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を格納できますが、MOVESPLITMERGEなどのパーティションのメンテナンス操作はサポートされません。

  • LOBデータ型として格納されているVARRAYデータ型
  • LOB属性を持つ抽象データ型
  • LOB型を持つネストした表

LOB列を含む索引構成表に関する制限事項

ALTER TABLE MOVE操作は、LOB列を含む索引構成表に対してパラレルに実行できません。かわりに、NOPARALLEL句を使用して、このような表のLOB列を移動します。たとえば:

ALTER TABLE t1 MOVE LOB(a) STORE AS (<tablespace users>) NOPARALLEL;