データの構造
Oracleにおいて、データはデータ・ブロック、エクステントおよびセグメントと呼ばれる論理構造を用いて管理される (参考).
データ・ブロック
データ・ブロックとは、ORACLEにおいてのデータの最小単位である. 各データ・ブロックのサイズは初期化パラメータDB_BLOCK_SIZE
の値で決定され、デフォルトでは8KBが指定されている. データ・ブロックのサイズは、OSが扱う物理ブロックサイズの倍数でなければいけない - [2KB、4KB、8KB、16KB、32KB] (参考).
SHOW PARAMETERS DB_BLOCK_SIZE;
出力例) | NAME | TYPE | VALUE |
| :----: | :----: | :----: |
| db_block_size | INTEGER | 8192 |
各データ・ブロックの構造は以下の通り (参考1, 参考2, 参考3, 参考4, 参考5).
データ・ブロックの構造
項目 | サイズ(バイト) | 説明 |
---|---|---|
共通・ヘッダ | 20 | ブロック・区分 [UNDOセグメント・ヘッダ、UNDOセグメント・ブロック、一時テーブル...等]、 ブロック・フォーマット [v6, v7, v8...等]、ブロック・シリアル番号などを含む. |
固定トランザクション・ヘッダ | 24 | トランザクションに関する情報を含む. |
可変トランザクション・ヘッダ | 24*(INITRANS-1) | トランザクションに関する情報を含む. 最大サイズはMAXTRANSで制限される. |
データ・ヘッダ | 14 | データに関する情報を含む. |
表ディレクトリ | 4*エントリ数 | 一般的なテーブルに対するエントリ数は1. クラスタの場合は1以上のエントリが存在する場合がある. |
行ディレクトリ | 4*行数 | データブロック内のデータの行数毎に依存したデータを含む. |
エクステントとセグメント
単一のデータファイルの連続したデータブロックで構成された論理単位をエクステントと呼ぶ.
表や索引などのオブジェクトには、1:1の関係でセグメントと呼ばれる1つ以上のエクステントから構成された記憶域が割り当てられる. オブジェクトに追加されたデータは全てセグメントが保有するエクステント内のデータ・ブロックに格納される. また、セグメントの拡張は、エクステント単位で行われる. エクステントの拡張は行われない.
一般的に、エクステントの管理にはローカル管理方式が使用されており、セグメント作成時や拡張時に割り当てられるエクステントのサイズや、セグメント内の空き状態等を Oracle が自動で管理する.
表領域の種類
作成されたオブジェクトは表領域と呼ばれる、1つ以上の物理データ・ファイルから構成された論理領域上で管理される (参考).
また、表領域は、下記のように、3種類の領域に分類される(参考).
表領域種類 | 説明 |
---|---|
永続的表領域 | 永続的に保存される必要があるオブジェクト等が格納される領域. ユーザ作成時に自動で永続的表領域が割り当てられる. |
UNDO表領域 | レコードの更新が発生する際、更新前のレコードがUNDO表領域に格納される. 格納されたデータは、トランザクションのロールバックが発生した際や、読み取り一貫性の担保のため、参照系SQL文が発行された際に利用される. 各インスタンスに大して活性化されているUNDO表領域は1つに限られる. |
一時表領域 | ソート処理時になど、SQL処理のために一時的に利用される表領域. 1つ以上の一時ファイルから構成される. |
Oracleには、デフォルトで作成される表領域がいくつか存在する.
作成済みの表領域はdba_tablespaces
データディクショナリから以下のように確認が可能.
//表領域の確認
SELECT * FROM dba_tablespaces;
// 出力例) | TAABLESPACE_NAME | BLOCK_SIZE | INITIAL_EXTENT | …
| :----: | :----: | :----: | …
| SYSTEM | 8192 | 65536 | …
| SYSAUX | 8192 | 65536 | …
⋮
| USERS | 8192 | 65536 | …
表領域種類 | 表領域名 | 説明 |
---|---|---|
永続的表領域 | SYSTEM | データディクディクショナリなどのデータベースの管理に必要な情報が格納されている. 命名変更はできない. |
永続的表領域 | SYSAUX | SYSTEM表領域の補助表領域であり、一部のコンポーネントや製品に関する情報が格納されている. 命名変更はできない. |
永続的表領域 | USERS | ユーザー・オブジェクトおよびデータの格納に使用される. 新規作成されたユーザのデフォルト表領域として指定される. |
一時表領域 | TEMP | 新規作成されたユーザのデフォルト一時表領域として指定される. |
UNDO表領域 | UNDOTBS1 | デフォルトで使用されるUNDO表領域. |