LOB 型の格納方式

LOB 型(Large OBject) 型は、その名前の通り大きなオブジェクトを格納する必要があるために 特別な格納方式でデータを保持している。

ロケータ

ロケータとは LOB の格納先のポインタを格納する構造体のようなものである。 このロケータの情報を使用して実データに対してアクセスを行なう。 このロケータによりデータを LOB 専用の格納領域に配置することなどの領域管理を行なうことができる。

インライン格納とアウトライン格納

インライン格納とは
LOB の実データを他の行データを一緒に格納する方式である(制限あり)
アウトライン格納とは
LOB を格納するための専用の データ・セグメント を 用意しておき、そこに格納する方式である。

インライン格納とアウトライン格納は、ブロック内連鎖と複数ブロックを使用する 行連鎖 の同じ違いに近い。 1行のすべてのデータをアクセスすることを考えればインライン格納の方がアウトライン格納に比べ遥かに高速に処理される。
しかし、データ群で考えるとインライン格納は1ブロックの格納行数が少ないため LOB を必要としない 問い合わせに対しては非常に効率の悪い処理となる。

インライン格納とアウトライン格納の表定義

インラインかアウトラインかはテーブル定義における STORAGE IN ROW 句
(DISABLE STORAGE IN ROW | ENABLE STORAGE IN ROW) と格納しているデータ長に影響される。
NULL 値であるか ENABLE STORAGE IN ROW(デフォルト値 ※)を指定し データサイズが制御情報を含め 4000 バイト以内の場合、 インライン内に配置される。4000 バイトを超える場合にはアウトライン (LOB 専用記憶域)に配置される。
実データ領域へのアクセスはロケータを経由して行われる。
4000 バイト以上のデータを投入するには DBMS_LOB パッケージで行うか、このような方法を使う。

(※) アプリケーション開発者ガイドの一部に相反する記述もあるが SQL リファレンスにも ENABLE STORAGE IN ROW がデフォルトと明記されている(Oracle 10g)。 以前のバージョンで変更されたのかもしれない(未確認) 誤訳でなく原文から既に相反している。

アプリケーション開発者ガイド LOB > 表内のLOB > LOB 記憶域 > インラインLOB 記憶域とアウトラインLOB 記憶域

内部 LOB と外部 LOB

インライン格納とアウトライン格納はともに 内部 LOB である。つまり、データの実体の管理はオラクルの管理下にある。 一方、外部 LOB とはデータの管理情報だけを管理する。実データの管理責任はオラクルにはないということになる。(エディタや OS などのオラクルの外部から書き換えが可能である)

外部 LOB は BFILE

 


LOB 格納形式の関連事項

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