行断片(レコードピース)

通常 テーブルの 1レコードのデータは、1つのピース(行断片)でデータブロックに格納される。
1つの行断片の大きさ(バイト数)は固定長、または、可変長である。行断片の内部のバイト数は格納するデータ型、データの値(データの長さ)、そして個数によって変化する。

レコードピース(行断片)の構成

レコードヘッダレコードデータ
(a)(b)(c)(d)列ヘッダ1列データ1列ヘッダ2・・・列ヘッダ255列データ255

レコードヘッダ(3 バイト〜)

(a) 行オーバヘッド (2 バイト〜)
(b) 列数 (1 バイト)
(c) クラスタキーID (0 バイト/? バイト) クラスタ化されている場合のみ(COLUMN_ID)
(d) 連鎖行断片 ROWID (0 バイト/ 6 or 10 バイト?) 行断片の断片化が発生している場合のみ

レコードデータ(最大 255 個の列データが格納可能)

  • 列ヘッダ(列長)

    データサイズが 250 バイト以下なら 1 バイト、251 バイト以上のときには 3 バイトを使用する。

  • ブロック内断片

    列数が 256 以上になると 連鎖行断片 ROWID を使用して分割格納される。行断片(レコードピース)は 2つ以上で構成され、同一データブロック に配置される。
    そのため、行移行行連鎖 のように複数のブロックへのIOは発生しない。 行移行、行連鎖も連鎖行断片ROWID を使用して複数のレコードピースでデータを格納している。

データ型による必要なバイト数:レコードピース 見積り用

予約領域レコードヘッダ固定3 バイト
列ヘッダ可変0〜3 バイト: データ長が0〜250バイトなら 1バイト、251バイト以上なら 3 バイト
(注意)データ長が 0 バイトでかつ、後続カラムのすべてが NULLの場合 0 バイトとなる。
=列データの最後の連続する NULL はすべて削除される。
文字型CHAR(byte_size)固定
CHAR(char_size)可変キャラクタセットとデータによる ⇒マルチバイト・キャラクタセット参照
VARCHAR2(byte_size|char_size)可変データのバイト数 ⇒マルチバイト・キャラクタセット参照
NCHAR(char_size)固定char_size×1〜3 バイト ⇒マルチバイト・キャラクタセット参照
NVARCHAR2(char_size)可変データ文字数×1〜3 バイト ⇒マルチバイト・キャラクタセット参照
(LONG)可変データ長と同じ(下位互換用)
数値型NUMBER(p, s)可変1 + CEIL (p / 2) p=精度、 負数の場合+1 最大 21 バイト(精度が38桁以下の場合)
NUMBER可変ROUND( (p+s)/2) )+1
p=指数表記での仮数部桁数、s=負数の場合1 それ以外は0 最大 21 バイト
日付 ・期間型DATE固定7 バイト
TIMESTAMP可変7 バイト 〜 最大(ナノ秒の場合) 11 バイト
TIMESTAMP WITH TIME ZONE固定13 バイト
TIMESTAMP WITH LOCAL TIME ZONE可変7 〜 11 バイト
INTERVAL YEAR TO MONTH固定5 バイト
INTERVAL DAY TO SECOND固定11 バイト
バイナリ型RAW可変データ長と同じ
(LONG RAW)可変データ長と同じ(下位互換用)
L O BBFILE固定530 バイト
CLOB可変行外のみのロケータ 20 バイト
行内格納を許可している場合:ロケータが36〜86 バイト
36 バイト+データ長(行内格納)または 86 バイト(行外格納)
行内格納の場合 EMPTY_xLOB 状態で 36 バイト使用する
NCLOB可変
BLOB可変
 


行断片 関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト