12.5 索引構成表内のLOB
索引構成表(IOT)では、LOB列およびBFILE列がサポートされます。
ほとんどの場合、IOT内のLOBに対するSQLのDDL、DMLおよびピース単位操作は、従来の表での操作と同様の結果をもたらします。作成時のLOBのデフォルトのセマンティクスのみが異なります。主な違いは次のとおりです。
-
表領域のマッピング: デフォルトで、または別に指定されていないかぎり、LOBデータおよび索引セグメントは、索引構成表の主キー索引セグメントが作成された表領域の中に作成されます。
-
インライン記憶域とアウトライン記憶域: オーバーフロー・セグメントなしで作成された索引構成表内のすべてのLOBは、デフォルトでアウトラインに格納されます。つまり、索引構成表がオーバーフロー・セグメントなしで作成された場合、この表内のLOBのデフォルト記憶域属性は
DISABLE
STORAGE
IN
ROW
になります。このようなLOBに対して強制的にENABLE
STORAGE
IN
ROW
句を指定しようとすると、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