12.5 索引構成表内のLOB
索引構成表(IOT)では、LOB列およびBFILE列がサポートされます。
ほとんどの場合、IOT内のLOBに対するSQLのDDL、DMLおよびピース単位操作は、従来の表での操作と同様の結果をもたらします。作成時のLOBのデフォルトのセマンティクスのみが異なります。主な違いは次のとおりです。
-
表領域のマッピング: デフォルトで、または別に指定されていないかぎり、LOBデータおよび索引セグメントは、索引構成表の主キー索引セグメントが作成された表領域の中に作成されます。
-
インライン記憶域とアウトライン記憶域: オーバーフロー・セグメントなしで作成された索引構成表内のすべてのLOBは、デフォルトでアウトラインに格納されます。つまり、索引構成表がオーバーフロー・セグメントなしで作成された場合、この表内のLOBのデフォルト記憶域属性は
DISABLESTORAGEINROWになります。このようなLOBに対して強制的にENABLESTORAGEINROW句を指定しようとすると、SQLはエラーを表示します。一方、オーバーフロー・セグメントが指定されている場合は、索引構成表内のLOBが従来の表のセマンティクスを正確に模倣します。
LOB列を含む索引構成表(IOT)の例
次に例を示します。
CREATE TABLE iotlob_tab (c1 INTEGER PRIMARY KEY, c2 BLOB, c3 CLOB, c4
VARCHAR2(20))
ORGANIZATION INDEX
TABLESPACE iot_ts
PCTFREE 10 PCTUSED 10 INITRANS 1 MAXTRANS 1 STORAGE (INITIAL 4K)
PCTTHRESHOLD 50 INCLUDING c2
OVERFLOW
TABLESPACE ioto_ts
PCTFREE 10 PCTUSED 10 INITRANS 1 MAXTRANS 1 STORAGE (INITIAL 8K) LOB (c2)
STORE AS lobseg (TABLESPACE lob_ts DISABLE STORAGE IN ROW
CHUNK 16384 PCTVERSION 10 CACHE STORAGE (INITIAL 2M)
INDEX lobidx_c1 (TABLESPACE lobidx_ts STORAGE (INITIAL 4K)));
これらの文を実行すると、次の要素を持つ索引構成表iotlob_tabが作成されます。
-
表領域
iot_ts内の主キー索引セグメント -
表領域
ioto_ts内のオーバーフロー・データ・セグメント -
オーバーフロー・データ・セグメント内に明示的に格納される、
C3から始まる列 -
表領域
lob_ts内のBLOB(列C2)データ・セグメント -
表領域
lobidx_ts内のBLOB(列C2)索引セグメント -
表領域
iot_ts内のCLOB(列C3)データ・セグメント -
表領域
iot_ts内のCLOB(列C3)索引セグメント -
IOTにオーバーフロー・セグメントがあるためにインラインに格納される
CLOB(列C3) -
明示的にアウトラインに強制格納される
BLOB(列C2)ノート:
オーバーフローが指定されていない場合、C2とC3の両方がデフォルトでアウトラインに格納されます。
パーティション化された索引構成表内のLOB
LOB列およびLOB属性は、パーティション化された索引構成表に格納できます。
索引構成表には、次のようにLOBを格納できますが、MOVE、SPLIT、MERGEなどのパーティションのメンテナンス操作はサポートされません。
- LOBデータ型として格納されているVARRAYデータ型
- LOB属性を持つ抽象データ型
- LOB型を持つネストした表
LOB列を含む索引構成表に関する制限事項
ALTER TABLE MOVE操作は、LOB列を含む索引構成表に対してパラレルに実行できません。かわりに、NOPARALLEL句を使用して、このような表のLOB列を移動します。たとえば:
ALTER TABLE t1 MOVE LOB(a) STORE AS (<tablespace users>) NOPARALLEL;親トピック: 永続LOB: 高度なDDL