12.2 既存のLOB列の変更

ALTER TABLE文を使用すると、LOB列の記憶域特性を変更できます。

12.2.1 ALTER TABLE BNF

この項では、Backus Naur (BNF)表記法のALTER TABLEの構文について説明します。この構文の一部は、LOB固有のパラメータに焦点を当てるために簡略化されています。

関連項目:

ALTER TABLE文の使用方法の詳細は、「ALTER TABLE」を参照してください。
ALTER TABLE [ schema.]table ... [ ... | column_clauses | ... | move_table_clause] ...;

<column_clauses> ::= ... | [ modify_LOB_storage_clause | rename_lob_storage_clause ] ...

<modify_LOB_storage_clause> ::= MODIFY LOB (LOB_item) ( modify_LOB_parameters )
<modify_LOB_parameters> ::=
{ storage_clause
  | PCTVERSION integer
  | FREEPOOLS integer
  | REBUILD FREEPOOLS
  | LOB_retention_clause
  | LOB_deduplicate_clause
  | LOB_compression_clause
  | { ENCRYPT encryption_spec | DECRYPT }
  | { CACHE
  | { NOCACHE | CACHE READS } [ logging_clause ]
  | allocate_extent_clause
  | shrink_clause
  | deallocate_unused_clause
}. . .

<rename_lob_storage_clause> ::= RENAME LOB(LOB_item) <LOB_RENAME_PARAMETERS>
<LOB_RENAME_PARAMETERS> ::= [ PARTITION | SUBPARTITION | ] <OLD_SEGMENT_NAME> TO <NEW_SEGMENT_NAME>

<move_table_clause> ::= MOVE ...[ ... | LOB_storage_clause | ...] ...

<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 
  }

12.2.2 ALTER TABLE MODIFYとALTER TABLE MOVE LOB

この項では、ALTER TABLE MODIFYおよびALTER TABLE MOVE LOBの使用時の記憶域特性を比較します。

既存のストレージ特性には2種類の変更があります。

  1. 記憶域特性に加える変更には、データへのアクセス方法にのみ適用され、既存のLOBデータ全体を移動する必要がないものがあります。このような変更には、ALTER TABLE BNFのmodify_LOB_storage_clauseを使用するALTER TABLE MODIFY LOB構文を使用します。既存のLOBデータ全体を移動する必要のない変更の例には、RETENTIONPCTVERSIONCACHENOCACHELOGGINGNOLOGGINGまたはSTORAGE設定、LOBデータで使用される領域の縮小、未使用セグメントの割当て解除があります。

    関連項目:

    ALTER TABLE
  2. 記憶域特性を変更する場合は、データの格納方法を変更する必要があるため、既存のLOBデータ全体を移動する必要があります。このような変更には、ALTER TABLE MODIFY LOB構文のかわりにALTER TABLE MOVE LOB構文を使用します。これは、前者がSecureFiles LOB列に対してパラレル操作を実行し、リソースを効率的に使用できるようにするためです。ALTER TABLE MOVE LOB構文は、ALTER TABLE BNFのLOB_storage_clauseで表される任意のLOB記憶域句を処理でき、LOBデータを新しい場所に移動します。

    既存のLOBデータ全体を移動する必要がある変更の例には、TABLESPACEENABLE/DISABLE STORAGE IN ROWCHUNKCOMPRESSIONDEDUPLICATIONおよびENCRYPTIONの設定があります。

    ALTER TABLE MOVE LOBのかわりに、オンライン再定義を使用してこれらの機能を1つ以上有効にすることができます。ALTER TABLEと同じく、SecureFiles LOB列のオンライン再定義もパラレルで実行できます。

関連項目:

12.2.3 ALTER TABLE SecureFiles LOB機能

この項では、ALTER TABLE文と連携するSecureFiles LOBの機能について説明します。

12.2.3.1 拡張LOB圧縮を使用したALTER TABLE

拡張LOB圧縮構文をALTER TABLE文とともに使用すると、LOB列の圧縮モードが変更されます。この項の例では、特定の圧縮シナリオでALTER TABLE文を発行する方法を示します。

例: SecureFiles LOB列の変更によるLOW圧縮の有効化

ALTER TABLE t1 MOVE LOB(a) STORE AS SECUREFILE(COMPRESS LOW)

例: SecureFiles LOB列の変更による圧縮の無効化

ALTER TABLE t1 MOVE LOB(a) STORE AS SECUREFILE(NOCOMPRESS)

例: SecureFiles LOB列の変更によるHIGH圧縮の有効化

ALTER TABLE t1 MOVE LOB(a) STORE AS SECUREFILE(COMPRESS HIGH);

例: SecureFiles LOB列の変更による1つのパーティションでの圧縮の有効化

ALTER TABLE t1 MOVE PARTITION p1 LOB(a) STORE AS SECUREFILE(COMPRESS HIGH);

12.2.3.2 拡張LOB重複除外を使用したALTER TABLE

拡張LOB重複除外構文をALTER TABLE文とともに使用すると、LOB列の重複除外モードが変更されます。

重複除外を有効にする前に、GET_LOB_DEDUPLICATION_RATIO関数を使用して、既存のLOBに対してこの機能を有効にすることで保存できる領域を見積ることができます。この関数を使用して、BasicFiles LOBをSecureFiles LOBに移行する前に、重複除外を有効にして節約できる領域を見積ることもできます。これにより、重複除外を有効にするために情報に基づいた決定を行うことができます。『PL/SQLパッケージおよびタイプ・リファレンス』「GET_LOB_DEDUPLICATION_RATIO関数」を参照してください。

免責事項: 重複除外率は、LOB列のサンプリングされた行に基づいて計算される概算値です。表全体に対して重複除外を有効にしたときに節約できる実際の領域は、異なる場合があります。

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

例: SecureFiles LOB列の変更による重複除外の無効化

ALTER TABLE t1 MOVE LOB(a) STORE AS SECUREFILE(KEEP_DUPLICATES);

例: SecureFiles LOB列の変更による重複除外の有効化

ALTER TABLE t1 MOVE LOB(a) STORE AS SECUREFILE(DEDUPLICATE);

例: SecureFiles LOB列の変更による1つのパーティションでの重複除外の有効化

ALTER TABLE t1 MOVE PARTITION p1 LOB(a) STORE AS SECUREFILE(DEDUPLICATE);

12.2.3.3 SecureFiles暗号化を使用したALTER TABLE

この項の例では、SecureFiles暗号化を有効にするためにALTER TABLE文を発行する方法を示します。

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

  • ALTER TABLE文は、SecureFiles暗号化を有効化および無効化します。ALTER TABLE文でREKEYオプションを使用すると、新しいキーまたはアルゴリズムでLOB列を暗号化することもできます。
  • DECRYPTオプションは、暗号化された列をクリアテキストの形式に変換します。

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

例: AES256暗号化に基づいた暗号化によるSecureFiles LOB列の変更

ALTER TABLE t1 MOVE LOB(a) STORE AS SECUREFILE(ENCRYPT USING 'AES256');

例: パスワード・キーに基づいた暗号化によるSecureFiles LOB列の変更

ALTER TABLE t1 MOVE LOB(a)
    STORE AS SECUREFILE(ENCRYPT USING 'AES256' IDENTIFIED BY foo);

例: 暗号化キーの再生成によるSecureFiles LOB列の変更

ALTER TABLE t1 REKEY USING 'AES256';