データ格納の為の記憶域の利用①
行の格納方法とブロック管理
行データは、表に割り当てられたデータブロックに格納されます。
ここでは行データが格納される仕組みについて説明します。
データブロックへの行データの格納
ある表に格納された行のデータは、表に割り当てられたデータブロック(以下、単にブロックと表記)内に格納されます。
ブロックは、管理用の領域であるヘッダー領域とデータ格納用の領域に分かれています。
ヘッダー領域の中にはブロックヘッダー、表ディレクトリ、行ディレクトリという領域があり、タイムスタンプやブロック内の行データの位置情報などの
管理情報が格納されています。ヘッダー領域のサイズは可変です。
行のINSERT処理を実行すると、「ブロックのデータ格納用の領域における末端側」から順に行データが格納されます。
通常、1つのブロックには複数の行が格納されます。

INSERT処理を実行してブロックに格納された行データに対して、UPDATEやDELETEなどの変更処理を実行できます。
なお、以下の操作を実行すると、行データと行データの間に空き領域が生まれます。
●既存の行データを小さいサイズの行データに変更するUPDATE
●DELETEによる行の削除

行移行と行連鎖
通常、1つの行のデータはある特定のブロックに格納されます。
しかし、例外的な状況では1つのデータが複数のブロックにまたがって格納されることがあります。
| 状況 | 説明 |
|---|---|
| 行連鎖 | 1ブロックに収まりきらないサイズの行データが、複数のブロックに分割して格納された状況。 |
| 行移行 | 拡張された行データが、別のブロックに格納された状況。 |
●行連鎖
1つの行のデータサイズがブロックのデータ格納用領域よりも大きい場合に、行データを複数の行断片に分割し、それぞれの行断片を別々のブロックに格納する形態です。

●行移行
行のサイズが拡張するようなUPDATE分を実行した際に、拡張したデータがブロックの空き領域に収まらなかった場合の、行データの格納の形態です。
その行のデータは別のブロックにコピーされ、元のブロックには行のポインタ(位置情報)のみが格納されます。

該当行のデータを呼び出すためには、以下を読みだす必要がある為、ストレージI/O回数が増えます。
・行連鎖:その行の行断片が格納されているすべてのブロック
・行移行:行のポインタが格納されているブロック、行のデータが格納されているブロックの2つ
以上、本記事ではOracleデータベースの行の格納方法について、簡単に紹介しました。
参考文献…オラクルマスター教科書 Silver DBA Oracle Database Administration I 第7章









