ORACLE MASTER Silver DBA 取得に必要な知識のまとめ~表領域とデータファイル管理編~

2024/06/07に公開

はじめに

本記事はORACLE MASTER Silver DBA取得に必要な知識の個人的まとめになります。

ORACLE MASTERとは

Oracle Databaseの管理スキルを証明するOracle社の資格です。

Bronze, Silver, Gold, Platinumの4ランクあります。

表領域

表領域は格納できるセグメントの種類によって、永続表領域(通常の表領域)、UNDO表領域、一時表領域に分類されます。

表領域の種類 格納できるセグメント
永続表領域 通常のセグメント(表や索引などのオブジェクトに対応するセグメント)
UNDO表領域 UNDOセグメント
一時表領域 一時セグメント

UNDO表領域

UNDO表領域はUNDOセグメントと呼ばれる過去のデータを保持する特殊なセグメントを格納するための特殊な表領域です。通常の表領域と異なり、表や索引などのオブジェクトを格納できません。

変更処理を実行すると、変更前の過去データであるUNDOデータが生成され、UNDO表領域内のUNDOセグメントに格納されます。

一時表領域

一時表領域は一時セグメントと呼ばれる一時的なデータを保持する特殊なセグメントを格納するための特殊な表領域です。通常の表領域と異なり、表や索引などのオブジェクトを格納できません。

一時表領域は1つ以上の一時ファイルから構成されます。

永続表領域の分類

永続表領域にはアプリケーション用のデータを格納するための通常の永続表領域と、特殊な役割の永続表領域に分類されます。

特殊な役割の永続表領域は以下の通りです。

永続表領域 説明
SYSTEM表領域 ・Oracle Databaseに必須の表領域
・データベースの重要な管理情報が格納される
・常に使用可能な状態(オンライン)である必要がある。SYSTEM表領域を構成するデータファイルが破損して、SYSTEM表領域が使用できなくなった場合、インスタンスは異常終了する
・表領域名は SYSTEM 固定で変更できない
SYSAUX表領域 ・Oracle Databaseに必須の表領域
・SYSTEM表領域の補助的な役割であり、データベースの管理情報が格納される
・表領域名は SYSAUX 固定で変更できない

データファイルのブロックサイズによる分類

表領域を構成するデータファイルのブロックサイズにより、標準ブロックサイズの表領域と非標準ブロックサイズの表領域に分類されます。

表領域の種類 説明
標準ブロックサイズの表領域 データベースのデフォルトのブロックサイズを使用する。データベースのデフォルトのブロックサイズはデータベース作成時に指定し、作成時は変更できない。データベースのデフォルトのブロックサイズは DB_BLOCK_SIZE 初期化パラメータに設定されている
非標準ブロックサイズの表領域 データベースのデフォルトのブロックサイズとは異なるブロックサイズを使用する。表領域を作成する前に、使用するブロックサイズに応じたデータベースバッファキャッシュを構成しておく必要がある。表領域を作成する前に DB_nK_CACHE_SIZE 初期化パラメータ(n=2,4,8,16,32)を設定し、使用するブロックサイズに応じたデータベースバッファキャッシュを構成しておく必要がある

エクステント管理方式

エクステント管理方式とは表領域を構成するデータファイルにおいて、どの領域をどのエクステントに割り当てているか、どの領域が開いているかを管理する方法です。

表領域内のエクステントの内部管理方式の違いにより、ローカル管理方式とディクショナリ管理方式の表領域に分類されます。

ローカル管理 ディクショナリ管理
エクステント管理方式 それぞれの表領域の管理用ブロックでエクステントを管理(高速) SYSTEM表領域のデータディクショナリでエクステントを管理(低速)
エクステントサイズの決定 自動 手動(管理者が用設定)
空き領域の断片化 発生しにくい 発生しやすい

現在運用されているOracle Databaseのほぼすべてで、ローカル管理方式が使われていると思われます。ディクショナリ管理方式は、下位互換のためだけに存在しており、将来的に非推奨となる予定です。

ローカル管理方式の表領域

CREATE TABLESPACE で作成した表領域は基本的にすべてローカル管理方式になります。

ローカル管理方式の表領域を使用すると以下の機能を使用できます。これらの機能はディクショナリ管理方式の表領域では使用できません。

  • エクステント割り当ての自動化
    • セグメントの新規作成やセグメントのサイズ拡張時に割り当てるエクステントのサイズをOracle Databaseが自動的に決定します
    • エクステントのサイズをデータベース管理者が設定する必要はありません
  • 自動セグメント領域管理
    • セグメント内のブロックの空き状態の管理に関わる内部処理をOracle Databaseが自動的に決定します
    • データベース管理者がブロックの空き状態の管理に関わる設定を調整する必要はありません
  • bigfile表領域
    • データファイルの最大サイズを大幅に拡張し、非常に大きなサイズのデータベースにおいて、データファイルが膨大な数になる問題を解消できます
  • 遅延セグメントの作成
    • オブジェクト作成時にセグメントを作成しない機能です
  • セグメントの縮小
    • ALTER TABLE SHRINK SPACE を実行してセグメントを縮小できる機能です

表領域の作成

表領域を作成するには CREATE TABLESPACE を実行します。また、UNDO表領域を作成するには CREATE UNDO TABLESPACE、一時表領域を作成するには CREATE TEMPORARY TABLESPACE を実行します。

エクステント割り当ての自動化

ローカル管理表領域ではセグメントの新規作成時やセグメントのサイズ拡張時に割り当てるエクステントのサイズを自動的に決定します。

エクステントサイズの決定方法は以下の通りです。エクステントサイズの決定方法をエクステント割り当てタイプといいます。

決定方法 説明
AUTOALLOCATE(自動) エクステントサイズを自動的に決定する。セグメントのエクステント数が多くなると大きなエクステントサイズが使用される。これがデフォルト
UNIFORM(均一) エクステントのサイズは固定。エクステントのサイズは表領域作成時に指定する

UNDO表領域と一時表領域のエクステント割り当てタイプ

UNDO表領域のエクステント割り当てタイプは常にAUTOALLOCATEとなります。UNIFORMにはできません。

一時表領域のエクステント割り当てタイプは常にUNIFORMとなります。AUTOALLOCATEにはできません。

bigfile表領域

bigfile表領域は非常に大きなサイズのデータベースを想定した機能でOracle 10gで導入されました。

従来からあるsmallfile表領域はデータファイルの最大サイズが32GB(データブロックサイズが8KBの場合)であり、数TBを超えるサイズの表領域を作成しようとすると、データファイルが膨大な数になって管理が非常に困難でした。

bigfile表領域はデータファイルの最大サイズが32TB(データブロックサイズが8KBの場合)で、smallfile表領域の「データファイルが膨大な数になる問題」を回避できます。

bigfile表領域は1つのデータファイルだけで構成されます。

bigfile表領域は CREATE BIGFILE TABLESPACE を使用します。

表領域の拡張

表領域の空き領域が不足した場合は以下のいずれかの方法で表領域のサイズを拡張します。

  • 表領域のデータファイルをリサイズして、データファイルのサイズを大きくする
  • 表領域に新しいデータファイルを追加する

データファイルのリサイズには ALTER DATABASE DATAFILE RESIZE を実行します。

新しいデータファイルの追加には ALTER DATABASE ADD DATAFILE を実行します。

表領域情報の表示

表領域の情報はデータディクショナリビューと動的パフォーマンスビューから確認できます。

ビュー名 説明
データディクショナリビュー
DBA_TABLE_SPACES 表領域の情報を確認できる
DBA_DATA_FILES データファイルの情報を確認できる
DBA_FREE_SPACE データファイルの空き領域の情報を確認できる
動的パフォーマンスビュー
V$TABLESPACE 表領域の情報を確認できる
V$DATAFILE データファイルの情報を確認できる

データファイルの移動

OS上のファイルシステムの空き領域が不足した場合、別のファイルシステム上にデータファイルを移動する場合があります。

データファイルの移動方法を以下の通りです。

移動方法 説明
オフライン移動 移動対象のデータファイルで構成される表領域をオフラインにしてから、データファイルを移動する。移動作業中は対象の表領域にはアクセスできない。ただし、ほかの表領域にはアクセス可能
オンライン移動 移動対象のデータファイルで構成される表領域をオンラインにしたまま、データファイルを移動する。移動作業中も対象の表領域にアクセス可能

オフライン移動

オフライン移動の移動手順は以下の通りです。

  1. ALTER TABLESPACE ... OFFLINE で移動対象のデータファイルを含む表領域をオフライン化する
  2. mv などのOSのファイル移動コマンドを用いて、データファイルを移動する
  3. ALTER TABLESPACE ... RENAME DATAFILE でデータファイルが移動したことをOracle Databaseに認識させる
  4. ALTER TABLESPACE ... ONLINE でデータファイルの移動が完了した表領域を再びオンライン化する

オンライン移動

オンライン移動は ALTER DATABASE MOVE DATAFILE '移動前のデータファイル' | データファイル番号 TO '移動後のデータファイルパス' [REUSE] で実施できます。

  • 移動前のデータファイルはパス名またはデータファイル番号で設定できます
  • 移動後のデータファイルのパス名の既存ファイルが存在する場合は REUSE を指定する必要があります。

表領域の削除

表領域を削除するには DROP TABLESPACE を実行します。

空の表領域を削除するには DROP TABLESPACE 、表領域に格納されているオブジェクトと表領域を削除するには DROP TABLESPACE INCLUDING CONTENTS 、表領域に格納されているオブジェクトと表領域及びデータファイルを削除するには DROP TABLESPACE INCLUDING CONTENTS AND DATAFILES を実行します。

Oracle Managed Files(OMF)

Oracle Managed Files(OMF)とはOracle Databaseが自動的にデータベースファイルのファイル名の命名、作成、削除することで、データベース管理者の管理負荷の軽減を狙った機能です。

Oracle Managed Files(OMF)を利用することで以下の利点を享受できます。

  • Oracle Databaseが自動的にファイル名を決定するため、データベース管理者がファイル名を決める必要がなくなります
    • なお、ファイルはOMF関連の初期化パラメータに設定したディレクトリに配置されます
  • 不要なファイルは自動的に削除され、データベース管理者がファイルを削除する必要はありません。例えば、OMF管理の表領域を削除すると、データファイルも自動的に削除されます

OMF関連の初期化パラメータは以下の通りです。

初期化パラメータ OMF管理対象にできるファイル
DB_CREATE_FILE_DEST ・データファイル
・一時ファイル
・制御ファイルとREDOログファイル
DB_CREATE_ONLINE_LOG_DEST_n(n=1,2,...5) ・制御ファイルとREDOログファイル
DB_RECOVERY_FILE_DEST ・リカバリ関連のファイル(バックアップファイル、アーカイブログファイルなど)

初期化パラメータの留意点は以下の通りです。

  • 初期化パラメータは個別に設定可能です
  • DB_CREATE_ONLINE_LOG_DEST_nを設定せず、DB_CREATE_FILE_DESTを設定すると、DB_CREATE_FILE_DESTに設定されたディレクトリにOMF管理されたデータファイル、制御ファイル、REDOログファイルが作成されます
  • DB_CREATE_ONLINE_LOG_DEST_nを複数設定すると、制御ファイル、REDOログファイルが多重化されます

データファイルのOMF管理

データファイルをOMF管理する手順は以下の通りです。

  1. DB_CREATE_FILE_DESTにデータファイルの配置先となるディレクトリパスを設定します
  2. データファイル名を指定せず、表領域を作成、またはデータファイルを追加します

データファイルのOMF管理の留意事項は以下の通りです。

  • DATAFILE を設定しないと、サイズ100MB、自動拡張ONでデータファイルが作成されます
  • OMF管理のデータファイルと非OMF管理のデータファイルは混在可能です。したがって、OMFを使用していなかった表領域にOMFを使用したデータファイルの追加もできます
  • 一時ファイルも同様にOMF管理できます。一時ファイルを指定せず、一時表を作成すればOKです

制御ファイル、REDOログファイルのOMF管理

制御ファイル、REDOログファイルをOMF管理する方法は以下の通りです。

  • DB_CREATE_ONLINE_LOG_DEST_nを設定する場合
    • DB_CREATE_ONLINE_LOG_DEST_nに設定されたディレクトリにOMF管理された制御ファイル、REDOログファイルが作成されます。2つ以上のDB_CREATE_ONLINE_LOG_DEST_nを設定すると、制御ファイル、REDOログファイルは多重化されます
  • DB_CREATE_ONLINE_LOG_DEST_nを設定しない場合
    • DB_CREATE_FILE_DESTおよびDB_RECOVERY_FILE_DESTに設定されたディレクトリにOMF管理された制御ファイル、REDOログファイルが作成されます。DB_CREATE_FILE_DESTとDB_RECOVERY_FILE_DESTの片方のみが設定されている場合、制御ファイル、REDOログファイルは多重化されません

おわり

表領域とデータファイル管理編はここまで。

次はデータ格納のための記憶域について説明していきます。

Discussion