12.1 新規LOB列の作成

LOB記憶域特性は、CREATE TABLE文またはALTER TABLE ADD COLUMN文を使用してLOB列を作成するときに指定できます。

ほとんどのユーザーには、これらの記憶域特性のデフォルト値で十分です。ただし、LOB記憶域を微調整する場合は、この項で説明するガイドラインを考慮してください。

表内のLOBを定義する場合、各永続LOB列の表領域および記憶特性を明示的に指定できます。大型のLOBの場合は、別の表領域を使用するのが一般的です。SecureFilesはLOBのデフォルト記憶域であるため、SECUREFILEキーワードはオプションですが、次の例ではわかりやすくするために示されています。この例では、SecureFiles LOBは自動セグメント領域管理(ASSM)で管理される表領域でのみ作成できるため、TABLESPACE lobtbs1はASSMで管理されることを前提としています。

CREATE TABLE lobtab1 (n NUMBER, c CLOB)
      lob (c) STORE AS SECUREFILE sfsegname 
      ( TABLESPACE lobtbs1
        ENABLE STORAGE IN ROW 
        CACHE LOGGING
        RETENTION AUTO 
        COMPRESS
        STORAGE (MAXEXTENTS 5)
      );

BasicFiles LOBを作成するには、前述の例のSECUREFILEキーワードをBASICFILEキーワードに置き換え、SecureFilesに固有のCOMPRESSキーワードを削除します。

データ・ディクショナリ・ビューUSER_LOBSALL_LOBSおよびDBA_LOBSは、LOB列に固有の情報を提供します。

ノート:

永続LOBの格納にはSecureFiles LOBを使用することをお薦めします。そのため、この章では、SecureFiles記憶域のみに焦点を当てます。永続LOBの文脈では、LOBとは、他に示されていないかぎり、SecureFiles LOBを意味します。

ノート:

BFILEに対して指定できる表領域または記憶域特性はありません。これらはデータベースには格納されません。

LOBデータ・セグメント名の割当て

前述の例に示すように、LOBデータ・セグメントの名前(この例ではsfsegname)を指定すると、作業環境がより明確になります。USER_LOBSALL_LOBSおよびDBA_LOBSのLOBデータ・ディクショナリ・ビューを問い合せると、システムが生成した名前ではなく、選択したLOBデータ・セグメントが表示されます。

12.1.1 CREATE TABLE BNF

CREATE TABLE文は、SecureFiles、BasicFiles LOB記憶域、またはその両方に固有のパラメータを使用してLOB記憶域と連携して機能します。

Backus Naur (BNF)表記法のCREATE TABLEの構文は次のとおりです。これらの部分はLOB固有のパラメータに焦点を当てるために簡略化されています。

例12-1 CREATE TABLE用のBNF


CREATE ... TABLE [schema.]table ...;

<column_definition> ::= column [datatype]...

<datatype> ::= ... | BLOB | CLOB | NCLOB | BFILE | ...

<column_properties> ::= ... | LOB_storage_clause | ... | LOB_partition_storage |...

<LOB_storage_clause> ::=
  LOB
  { (LOB_item [, LOB_item ]...)
      STORE AS [ SECUREFILE | BASICFILE ] (LOB_storage_parameters)
  | (LOB_item)
      STORE AS [ SECUREFILE | BASICFILE ]
        { LOB_segname (LOB_storage_parameters)
        | LOB_segname
        | (LOB_storage_parameters)
        }
  }
<LOB_storage_parameters> ::=
  { TABLESPACE tablespace
  | { LOB_parameters [ storage_clause ]
    }
  | storage_clause
  }
    [ TABLESPACE tablespace
    | { LOB_parameters [ storage_clause ]
      }
    ]...
<LOB_parameters> ::=
  [ ENABLE STORAGE IN ROW [{4000|8000}] 
  | DISABLE STORAGE IN ROW
  | CHUNK integer
  | PCTVERSION integer
  | RETENTION [ { MAX | MIN integer | AUTO | NONE } ]
  | FREEPOOLS integer
  | LOB_deduplicate_clause
  | LOB_compression_clause
  | LOB_encryption_clause
  | { CACHE |  NOCACHE | CACHE READS } [ logging_clause ] } }
  ]
<LOB_retention_clause> ::= 
  {RETENTION [ MAX | MIN integer | AUTO | NONE ]}
<LOB_deduplicate_clause> ::=
  { DEDUPLICATE 
  | KEEP_DUPLICATES
  }
<LOB_compression_clause> ::=
  { COMPRESS [ HIGH | MEDIUM | LOW ]
  | NOCOMPRESS 
  }
<LOB_encryption_clause> ::=
  { ENCRYPT [ USING 'encrypt_algorithm' ] 
    [ IDENTIFIED BY password ]
  | DECRYPT 
  }
<LOB_partition_storage> ::=
  {PARTITION partition
  { LOB_storage_clause | varray_col_properties }...
  [ (SUBPARTITION subpartition
  { LOB_partitioning_storage | varray_col_properties }...
  )
  ]
  }
<LOB_partitioning_storage> ::=
  {LOB (LOB_item) STORE AS [BASICFILE | SECUREFILE]
  [ LOB_segname [ ( TABLESPACE tablespace | TABLESPACE SET tablespace_set ) ]
  | ( TABLESPACE tablespace | TABLESPACE SET tablespace_set )
  ]
  }

12.1.2 ENABLEまたはDISABLE STORAGE IN ROW

LOB列には、実際のLOB値の位置を参照するロケータが格納されます。この項では、表の行の記憶域を有効化または無効化する方法について説明します。

実際のLOB値は、表の作成時に指定された列プロパティ、およびLOBのサイズに応じて、表の行(表内)または表の行の外(表外)に格納されます。ENABLE | DISABLE STORAGE IN ROW句を使用して、LOBを表内または表外に格納するかどうかを指定します。小さいLOBにはパフォーマンス上の利点があるため、デフォルトはENABLE STORAGE IN ROWです。

ENABLE STORAGE IN ROW

ENABLE STORAGE IN ROWが設定されている場合、最小インライン・サイズは4000で、最大は8000です。この最大値には、LOB値および制御情報が含まれます。LOBのデフォルトのインライン・サイズは4000です。

LOBがIN ROWに格納されている場合、
  • Exadataプッシュダウンは、SecureFilesの圧縮および暗号化を使用する場合など、LOBに対して有効です。
  • インメモリーは、SecureFilesの圧縮および暗号化されていないLOBに対して有効です。

約32kより大きいLOBは表外に格納されます。ただし、制御情報は引き続き行に格納されるため、アウトラインLOBデータを高速に読み取ることができます。

LOBとして格納されたVARCHAR2(32K)およびVARRAYでは、このインライン構文の増加はサポートされていません。

DISABLE STORAGE IN ROW

行にLOBを格納すると行のサイズが大きくなるため、一部の例では、DISABLE STORAGE IN ROWを選択することをお薦めします。この場合、全表スキャン、複数行アクセス(レンジ・スキャン)、LOB列以外の列への多数のUPDATE/SELECTなどの実表の処理を頻繁に行う場合、パフォーマンスが低下します。

12.1.3 CACHE、NOCACHEおよびCACHE READS

この項では、LOBを含む表の作成時に従うガイドラインについて説明します。

次の表のガイドラインに従って、キャッシュ・オプションを使用します。

表12-1 CACHE、NOCACHEおよびCACHE READSオプションの使用

キャッシュ・モード 読取りの頻度 バッファ・キャッシュの動作
NOCACHE (デフォルト) 1回または時々 LOB値はバッファ・キャッシュに入れられません。
CACHE READS 頻繁 LOB値は、読取り中のみバッファ・キャッシュに入れられ、書込み中には入れられません。
CACHE 書込み直後にLOBを読取り LOBページは、読取りおよび書込み操作中にバッファ・キャッシュに配置されます。半構造化データを格納するには、CACHEオプションをオンにすることを検討してください。

注意:

アプリケーションでLOBへの書込みが頻繁に行われる場合、CACHEオプションを使用すると、LOB以外の他のページがバッファ・キャッシュから途中でエージ・アウトされる可能性があります。

12.1.4 LOGGINGおよびFILESYSTEM_LIKE_LOGGING

LOGGINGパラメータは、他の表操作に適用するのと同じ方法でLOBに適用できます。

このパラメータのデフォルト値はLOGGINGです。SecureFilesの場合、FILESYSTEM_LIKE_LOGGINGパラメータはNOLOGGINGオプションと同等です。

LOGGINGオプションを設定すると、Oracle Databaseによって、変更のREDOおよびUNDOログを生成する最も効率的な方法が決定されます。LOGGINGパラメータを有効にしておくことをお薦めします。

バルク・ロードおよび挿入には、FILESYSTEM_LIKE_LOGGINGまたはNOLOGGINGオプションが役立ちます。LOBにデータをロードする際、REDOログを必要とせず、失敗したロードを再開できる場合は、LOBデータ・セグメントの記憶域特性をFILESYSTEM_LIKE_LOGGINGに設定します。これによって、データの初期ロードのパフォーマンスが向上します。データのロードの完了後は、ALTER TABLE文を使用して、LOBデータ・セグメントのLOB記憶域特性を通常のLOB操作用に変更することをお薦めします。たとえば、キャッシュ・オプションをLOGGINGオプションとともにCACHEまたはCACHE READSに設定します。

関連項目:

データベース・レベルでのロギング動作のオーバーライドの詳細は、FORCE LOGGING設定の優先順位を参照してください

ノート:

BasicFilesの場合、CACHE NOLOGGINGオプションを指定するとエラーになります。

12.1.5 RETENTIONパラメータ

SecureFile LOBのRETENTIONパラメータでは、旧バージョンのLOBデータ・ブロックの管理方法を指定します。

他のデータ型とは異なり、SecureFiles LOBの古いバージョンのLOBデータ・ブロックはLOBセグメント自体に格納され、読取り一貫性操作をサポートするために使用されます。対応する旧バージョンのLOBデータ・ブロックがないと、以前のSCNでのLOBの読取りがORA-1555で失敗する場合があります。次のガイドラインに従って、RETENTIONパラメータを設定します。

表12-2 RETENTIONパラメータの動作

RETENTIONパラメータ値 動作
MAX 旧バージョンのLOBデータ・ブロックがLOBセグメント全体を占めるようにします。これにより、領域使用量が問題にならない場合に、ORA-1555の問題が発生する可能性が最小限に抑えられます。この設定では、旧バージョンのLOBデータ・ブロックが原因でLOBセグメントが増加する可能性があります。MAXSIZE属性を設定しない場合、MAXAUTOと同様に動作します。
MIN 旧バージョンのLOBデータ・ブロックの保存期間をn秒に制限します。この設定では、保存期間を秒数でnとして指定する必要もあります。旧バージョンのLOBデータ・ブロックでも、LOBセグメントが大きくなる可能性があります。
AUTO Oracle Databaseは、可能なかぎり効率的に領域を管理し、時間と領域の両方のニーズを重み付けします。
NONE 読取り一貫性のために古いバージョンのLOBデータ・ブロックが必要ない場合は、この値を設定します。これは、領域使用率の点で最も効率的な設定です。
未設定(DEFAULTに設定) UNDO_RETENTION設定を使用すると、動的または手動で設定できます。UNDO_RETENTIONパラメータが正の値に設定されると、同じ保存期間の値でRETENTIONパラメータをMINに設定することと同じになります。UNDO_RETENTIONパラメータがゼロ(0)に設定されると、RETENTIONパラメータをNONEに設定することと同じです。

SecureFiles LOBのSHRINK機能は、RETENTIONパラメータの設定に関係なく、LOBデータ・ブロックの旧バージョンを部分的に削除してエクステントを解放します。したがって、SHRINK機能は、RETENTIONパラメータがNONEに設定されている場合にのみ使用することをお薦めします。

次のSQLコード・スニペットは、LOBセグメントのRETENTIONパラメータの決定に役立ちます。

SELECT RETENTION_TYPE, RETENTION_VALUE FROM USER_LOBs WHERE ...;

12.1.6 SecureFilesの圧縮、重複除外および暗号化

この項では、BasicFilesでサポートされている機能に加えて、SecureFilesでサポートされている機能について説明します。

SecureFiles LOB記憶域は、BasicFiles LOB記憶域オプションでは使用できない次の3つの機能をサポートしています。

  • 圧縮
  • 重複除去
  • 暗号化

CREATE TABLE文を使用して、圧縮、重複除外および暗号化を有効にしておくことをお薦めします。

注意:

表または列レベルの圧縮または暗号化を有効にしても、LOBデータは圧縮または暗号化されません。LOBデータを圧縮または暗号化するには、LOB_storage_clauseで指定して、SecureFilesの圧縮または暗号化を使用します。

ノート:

ALTER TABLE文を使用して、圧縮、重複除外および暗号化機能を有効にできます。ただし、ALTER TABLE文を使用してこれらの機能を有効にすると、SecureFiles LOB記憶域のすべてのデータの読取り、変更および書込みが実行されます。これによって、長時間かかる可能性がある操作の際にデータベースで表のロックが発生する可能性があります。ALTER TABLE文には、この問題の回避に役立つオンライン機能があります。

拡張LOB圧縮

拡張LOB圧縮では、ディスク領域を節約してパフォーマンスを改善するため、SecureFiles LOBデータを透過的に分析して圧縮します。

ライセンス要件: 拡張LOB圧縮を実装するには、Oracle Advanced Compressionオプションのライセンスが必要です。

拡張LOB圧縮でCREATE TABLE文を使用する場合は、次の点を考慮してください。

  • 拡張LOB圧縮は、サーバー側で実行され、LOBデータへのランダムな読取りおよび書込みを可能にします。utl_compressなどのクライアント側の圧縮ユーティリティでは、ランダム・アクセスは得られません。

  • 拡張LOB圧縮では、表または索引圧縮を有効にできません。逆に、表および索引圧縮でも拡張LOB圧縮を有効にできません。

  • LOWMEDIUMおよびHIGHオプションでは、異なる圧縮レベルを使用できます。圧縮率が高くなれば、発生する待機時間も長くなります。HIGH設定ではより多くの作業が発生しますが、データの圧縮が向上します。デフォルトは、MEDIUMです。

    LOW圧縮オプションでは、ファイル圧縮でよく見られるCPUコストの大部分を軽減する非常に軽量の圧縮アルゴリズムが使用されます。LOWレベルで圧縮されたSecureFiles LOBにより、SecureFiles LOB記憶域を効率的に選択できるようになりました。LOWで圧縮されたSecureFiles LOBは、一般的にBasicFiles LOBよりもCPU時間と記憶域を消費せず、ディスクI/Oも減るためアプリケーションの実行を高速化できます。

  • 圧縮は、パーティション・レベルで指定できます。CREATE TABLE lob_storage_clauseでは、パーティションごとにパーティション化された表の圧縮を指定できます。

  • DBMS_LOB.SETOPTIONSプロシージャを使用して、SecureFiles LOBごとに圧縮を有効化および無効化できます。

次の例に、特定の圧縮シナリオでCREATE TABLE文を発行する方法を示します。

例12-2 LOW圧縮を使用したSecureFiles LOB列の作成

CREATE TABLE t1 (a CLOB)
    LOB(a) STORE AS SECUREFILE(
    COMPRESS LOW
    CACHE
    NOLOGGING
  );

例12-3 MEDIUM (デフォルト)圧縮を使用したSecureFiles LOB列の作成

CREATE TABLE t1 ( a CLOB)
    LOB(a) STORE AS SECUREFILE (
         COMPRESS
         CACHE
         NOLOGGING
    );

例12-4 HIGH圧縮を使用したSecureFiles LOB列の作成

CREATE TABLE t1 ( a CLOB)
    LOB(a) STORE AS SECUREFILE (
         COMPRESS HIGH
         CACHE
    );

例12-5 圧縮を無効化したSecureFiles LOB列の作成

CREATE TABLE t1 ( a CLOB)
    LOB(a) STORE AS SECUREFILE (
         NOCOMPRESS
         CACHE
    );

例12-6 1つのパーティションで圧縮を使用したSecureFiles LOB列の作成

CREATE TABLE t1 ( REGION VARCHAR2(20), a BLOB) 
     LOB(a) STORE AS SECUREFILE (
        CACHE
     )
     PARTITION BY LIST (REGION) (
          PARTITION p1 VALUES ('x', 'y')
               LOB(a) STORE AS SECUREFILE (
                   COMPRESS
                ),
          PARTITION p2 VALUES (DEFAULT)
     );

拡張LOB重複除外

拡張LOB重複除外は、LOB列またはパーティション内で重複するLOBデータをOracle Databaseで自動検出できるようにし、データのコピーを1つのみ格納することにより領域を節約できます。

ライセンス要件: 拡張LOB重複除外を実行するには、Oracle Advanced Compressionオプションのライセンスが必要です。

CREATE TABLEおよび拡張LOB重複除外を使用する場合は、次のことを考慮してください。

  • 同一のLOBがある場合、重複除外の対象となります。重複除外を使用可能にすることにより、コピー操作によるデータの重複を回避できます。

  • 重複検出は、LOBセグメント内で発生します。パーティション化およびサブパーティション化されたLOB列の場合、パーティションまたはサブパーティションにまたがって重複を検出することはできません。

  • 重複除外は、パーティション・レベルで指定できます。CREATE TABLE lob_storage_clauseを使用して、パーティションごとにパーティション化された表を指定できます。

  • DBMS_LOB.SETOPTIONSプロシージャを使用して、LOBごとに重複除外を有効化または無効化できます。

次の例に、特定の重複除外シナリオでCREATE TABLE文を発行する方法を示します。

例12-7 重複除外を使用したSecureFiles LOB列の作成

CREATE TABLE t1 ( a CLOB)
    LOB(a) STORE AS SECUREFILE (
        DEDUPLICATE
        CACHE
    );

例12-8 重複除外を無効化したSecureFiles LOB列の作成

CREATE TABLE t1 ( a CLOB)
    LOB(a) STORE AS SECUREFILE (
         KEEP_DUPLICATES
         CACHE
    );

例12-9 1つのパーティションで重複除外を使用したSecureFiles LOB列の作成

CREATE TABLE t1 ( REGION VARCHAR2(20), a BLOB) 
     LOB(a) STORE AS SECUREFILE (
           CACHE
)
PARTITION BY LIST (REGION) (
     PARTITION p1 VALUES ('x', 'y')
          LOB(a) STORE AS SECUREFILE (
               DEDUPLICATE
          ),
     PARTITION p2 VALUES (DEFAULT)
);

例12-10 1つのパーティションで重複除外を無効化したSecureFiles LOB列の作成

CREATE TABLE t1 ( REGION VARCHAR2(20), ID NUMBER, a BLOB)
     LOB(a) STORE AS SECUREFILE (
           DEDUPLICATE
           CACHE
)
PARTITION BY RANGE (REGION)
      SUBPARTITION BY HASH(ID) SUBPARTITIONS 2 (
        PARTITION p1 VALUES LESS THAN (51)
           lob(a) STORE AS a_t2_p1
           (SUBPARTITION t2_p1_s1 lob(a) STORE AS a_t2_p1_s1,
            SUBPARTITION t2_p1_s2 lob(a) STORE AS a_t2_p1_s2),
        PARTITION p2 VALUES LESS THAN (MAXVALUE)
           lob(a) STORE AS a_t2_p2 ( KEEP_DUPLICATES ) 
           (SUBPARTITION t2_p2_s1 lob(a) STORE AS a_t2_p2_s1,
            SUBPARTITION t2_p2_s2 lob(a) STORE AS a_t2_p2_s2)
      );

SecureFiles暗号化

SecureFiles暗号化では、LOBの新たな暗号化機能について説明します。データは透過的データ暗号化(TDE)使用して暗号化され、データの安全な格納だけでなく、ランダムな読取りおよび書込みアクセスが可能です。

ライセンス要件: SecureFiles暗号化を実行するには、Oracle Advanced Securityオプションのライセンスが必要です。

SecureFiles暗号化でCREATE TABLE文を使用する場合は、次の点を考慮してください。

  • SecureFiles暗号化では、データがLOBセグメントに行内に格納されているか表外に格納されているかに関係なく、SecureFile LOB列に格納されているデータが暗号化されます。表または列レベルの暗号化では、LOBセグメント内の表外に格納されているデータは暗号化されないことに注意してください。

  • SecureFiles暗号化では、ウォレットまたはハードウェア・セキュリティ・モデル(HSM)を使用して暗号化キーを保持します。ウォレットの設定は、透過的データ暗号化(TDE)および表領域暗号化について説明されている設定と同じであるため、SecureFiles暗号化を使用する前に完了してください。

    関連項目:

    TDEでのOracleウォレットの作成および使用の詳細は、Oracle Database Advanced Securityガイドを参照してください。

  • encrypt_algorithmは、暗号化アルゴリズムの名前を示します。有効なアルゴリズムは、AES192(デフォルト)、AES128およびAES256です。

  • 列の暗号化キーは、(指定されている場合は)PASSWORDから導出されます。

  • LOB暗号化のデフォルトはSALTです。NO SALTはサポートされていません。

  • SecureFiles暗号化は、表レベルでのみ列単位でサポートされ、パーティション・レベルではサポートされません。したがって、LOB列内のすべてのパーティションが暗号化されます。

  • DECRYPTは、LOBをクリアテキストのままにします。

  • キー管理により、暗号化または復号化が制御されます。

  • TDEは、従来のインポートおよびエクスポート・ユーティリティまたはトランスポータブル表領域ベースのエクスポートではサポートされていません。かわりに、暗号化された列には、データ・ポンプexpdbおよびimpdbユーティリティを使用してください。

次の例に、特定の暗号化シナリオでCREATE TABLE文を発行する方法を示します。

例12-11 特定の暗号化アルゴリズムを使用したSecureFiles LOB列の作成

CREATE TABLE t1 ( a CLOB ENCRYPT USING 'AES128')
    LOB(a) STORE AS SECUREFILE (
         CACHE
    );

例12-12 すべてのパーティションで暗号化を使用したSecureFiles LOB列の作成

CREATE TABLE t1 ( REGION VARCHAR2(20), a BLOB)
  LOB(a) STORE AS SECUREFILE (
  ENCRYPT USING 'AES128'
  NOCACHE
  FILESYSTEM_LIKE_LOGGING
)
PARTITION BY LIST (REGION) (
PARTITION p1 VALUES ('x', 'y'),
PARTITION p2 VALUES (DEFAULT)
);

例12-13 パスワード・キーに基づいた暗号化を使用したSecureFiles LOB列の作成

CREATE TABLE t1 ( a CLOB ENCRYPT IDENTIFIED BY foo)
    LOB(a) STORE AS SECUREFILE (
        CACHE
    );

暗号化オプションを文のLOB_encryption_clauseセクションで設定するため、次の例は同じ結果になります。

CREATE TABLE t1 (a CLOB)
    LOB(a) STORE AS SECUREFILE (
        CACHE
        ENCRYPT
        IDENTIFIED BY foo
    );

例12-14 暗号化を無効化したSecureFiles LOB列の作成

CREATE TABLE t1 ( a CLOB )
    LOB(a) STORE AS SECUREFILE (
        CACHE DECRYPT
    );

12.1.7 BasicFile固有のパラメータ

この項では、BasicFiles固有の記憶域パラメータについて説明します。

次の記憶域パラメータは、BasicFilesに固有のものです。

注意:

すべてのLOBのニーズにSecureFiles LOBを使用することをお薦めします。

PCTVERSION

BasicFiles LOBが変更されると、新しいバージョンのBasicFiles LOBページが作成され、前のバージョンのBasicFiles LOB値の読取り一貫性操作がサポートされます。PCTVERSIONパラメータは、使用中のBasicFiles LOBデータ領域全体のうち、旧バージョンのBasicFiles LOBデータ・ページが占めることのできる割合です。旧バージョンのBasicFiles LOBデータ・ページの占める割合が使用中のBasicFiles LOB領域に対してPCTVERSION量を超え始めると、すぐにOracle Databaseにより旧バージョンの部分が解放され再利用されます。PCTVERSIONパラメータには、次の事前設定値があります。

  • デフォルト: 10%
  • 最小: 0
  • 最大: 100

アプリケーションで、BasicFiles LOB列の大量の読取りと並行して複数のBasicFiles LOBを更新する必要がある場合は、PCTVERSIONパラメータに20%などの大きい値を使用することを検討してください。アプリケーションで永続BasicFiles LOBインスタンスが作成されて1回のみ書き込まれ、その後は主に読取り専用となる場合、更新頻度は低くなります。この場合、PCTVERSIONパラメータに5%以下などの小さい値を使用することを検討してください。既存のBasicFiles LOBが読取り専用であることがわかっている場合、古いバージョンのデータに必要なページがないため、PCTVERSIONパラメータを0%に設定して問題ありません。

ノート:

PCTVERSIONパラメータとRETENTIONパラメータは、BasicFiles LOBに対して相互に排他的です。つまり、PCTVERSIONパラメータまたはRETENTIONパラメータのどちらか一方を指定できますが、両方は指定できません。

CHUNK

チャンクとは1つまたは複数のOracleブロックです。LOBを含む表を作成する場合に、BasicFiles LOB用のチャンク・サイズを指定できます。これは、LOB値に対してアクセスまたは変更を行うときに、Oracle Databaseが使用するデータ・サイズに対応します。チャンクの一部はシステム関連の情報を格納し、残りはLOB値を格納します。チャンク・サイズの取得に使用するAPIは、LOB値を格納するLOBチャンクで使用される領域容量を返します。次のAPIを使用すると、チャンク・サイズを取得できます。

  • PL/SQLのDBMS_LOB.GETCHUNKSIZEプロシージャ
  • OCIのOCILobGetChunkSize()関数

LOB列の作成時にCHUNKパラメータの値を指定した後は、LOBを移動せずに値を変更することはできません。CHUNKパラメータは、最も頻繁にアクセスまたは書込みが行われるデータ・サイズに設定できます。LOBへのアクセスは、大きいデータ・チャンクで行う方が効率的です。LOBの記憶域特性を明示的に指定する場合は、LOBデータ・セグメント記憶域のINITIALパラメータおよびNEXTパラメータをCHUNKサイズより大きいサイズに設定してください。

SecureFilesでは、CHUNKサイズは、アドバイザ・サイズで、後方互換性のために使用します。

FREEPOOLS

BasicFiles LOBのFREELISTグループの数を指定します(データベースが自動UNDOモードの場合)。リリース12cまでの互換モードでは、このパラメータはSecureFiles LOBの作成時に無視されます。

FREELISTSまたはFREELIST GROUPS

パーティション表でNULLセグメントに割り当てられるプロセス空きリスト、または空きリスト・グループの数をそれぞれ指定します。リリース12cまでの互換性モードでは、これらのパラメータはSecureFiles LOBの作成時に無視されます。

12.1.8 LOBセグメントの最初のエクステントの制限

この項では、SecureFilesおよびBasicFilesの最初のエクステント要件について説明します。

SecureFiles LOBセグメントの最初のエクステント

SecureFiles LOBセグメントは、自動セグメント領域管理(ASSM)でローカル管理表領域にのみ作成できます。最初のエクステントに必要なブロック数は、リリースによって異なります。21cより前では、最初のエクステントに16ブロック以上が必要です。21c以降では、compatibleパラメータが20.1.0.0.0以上の場合、数値は32です。以前のリリースで作成されたセグメントは、引き続き新しいリリースで機能します。ただし、自動的にはアップグレードされません。

最初のエクステントの実際のサイズは、データベースblock_sizeによって異なります。表領域が均一エクステントを使用するように構成されている場合、エクステントは前述の数より大きくする必要があります。たとえば、block_size = 8kの場合、均一エクステント・サイズは21c以前では128K以上、21cでは互換性のあるパラメータが設定された256K以上である必要があります。表領域がこの数より小さい均一エクステントを使用するように構成されている場合、LOBセグメントの作成は失敗します。

BasicFile LOBセグメントの最初のエクステント

BasicFile LOBセグメントは、ディクショナリ管理表領域またはローカル管理表領域に作成できます。セグメントには、最初のエクステントに3つ以上のブロックが必要です。これは、データベースblock_sizeに基づいて様々なエクステント・サイズに変換されます。表領域が3つ未満のブロックを格納する均一エクステントを使用するように構成されている場合、LOBセグメントの作成は失敗します。

12.1.9 SecureFiles LOB用のCREATE TABLE LOB記憶域パラメータの概要

この項の表は、SecureFiles LOB記憶域に関連するCREATE TABLE文のパラメータをまとめたものです。

表12-3 LOBに関連するCREATE TABLE文のパラメータ

パラメータ 説明

SECUREFILE

SecureFiles LOB記憶域を指定します。

Oracle Database 12c以降では、パラメータSECUREFILEで指定されるSecureFiles LOB記憶域タイプがデフォルトになります。

SecureFiles LOBは、自動セグメント領域管理(ASSM)で管理される表領域でのみ作成できます。

BASICFILE

BasicFiles LOB記憶域、LOBの元のアーキテクチャを示します。

BasicFiles LOB記憶域タイプを使用するには、明示的にパラメータBASICFILEを指定する必要があります。

BasicFiles LOBの場合、いずれかのSecureFiles LOBオプションを指定すると、エラーが発生します。

RETENTION

読取り一貫性をサポートするために、旧バージョンのLOBデータを格納するための保存方針を指定します。使用可能な値は、MAXMINAUTOおよびNONEです。

MAXSIZE

LOBで使用可能な記憶域の上限を指定します。デフォルト・サイズは4000ですが、最大で8000にできます。

上限に達した場合、時間要件にかかわらず、必要に応じて、旧バージョンのLOBデータ・ブロックのプールから新規のLOBデータ・ブロックが取得されます。

CACHE、NOCACHE、CACHE READS

LOBデータがバッファ・キャッシュに格納されるタイミングを指定します。

  • NOCACHE: バッファ・キャッシュに格納されません。
  • CACHE READS: 読取り中のみ。
  • CACHE: 読取り時および書込み時。

デフォルトはNOCACHEです。

LOGGINGNOLOGGINGFILESYSTEM_LIKE_LOGGING

LOBへの変更に対してREDOおよびUNDOを生成するかどうかを指定します。

  • LOGGING: 変更に対するREDOおよびUNDOの生成

  • FILESYSTEM_LIKE_LOGGING/NOLOGGING: メタデータのみをログに記録します。

デフォルトはLOGGINGです。

COMPRESSまたはNOCOMPRESS

COMPRESSオプションでは、拡張LOB圧縮をオンにし、NOCOMPRESSではオフにします。

デフォルトはNOCOMPRESSです。

DEDUPLICATEまたはKEEP_DUPLICATES

DEDUPLICATEオプションでは拡張LOB重複除外が有効化され、LOB列、パーティション、またはサブパーティションの複数行で同一のSecureFiles LOBデータで同じデータ・ブロックを共有する必要があることを示します。データベースは同一の内容のSecureFiles LOBを単一のコピーに結合し、記憶域を削減して記憶域管理を簡素化します。このオプションの逆は、KEEP_DUPLICATESです。

デフォルトはKEEP_DUPLICATESです。

ENCRYPTまたはDECRYPT

ENCRYPTオプションでは、SecureFiles暗号化をオンにし、Oracle Transparent Data Encryption(TDE)を使用してすべてのSecureFiles LOBデータを暗号化します。DECRYPTオプションでは、SecureFiles圧縮をオフにします。

デフォルトはDECRYPTです。