ヘッダーをスキップ
Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド
11gリリース1(11.1)
E05675-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

4 Oracle SecureFilesの使用

この章では、SQLパラメータのBASICFILEによって示される元のLOB実装を補足するものとして導入されたSecureFilesの使用方法について説明します。この章の内容は次のとおりです。

SecureFilesの記憶域

この項では、LOB型の列を含む表の設計に使用される、LOB記憶域の特性について説明します。リリース11.1より、記憶域キーワードのSECUREFILECREATE TABLE文に含まれる場合に、新しいLOB記憶域パラダイムがデータベースで使用されるようになりました。古い記憶域パラダイムは、SECUREFILEキーワードが使用されない場合、またはBASICFILEキーワードが使用される場合に有効です。BASICFILE(元のLOB記憶域パラダイム)は、デフォルトの記憶域です。データベース管理者は、init.ora内の次の初期化パラメータを使用して、前述の設定を変更できます。


関連項目:

「db_securefile」

SECUREFILE LOBを含んだCREATE TABLE用のパラメータ

SecureFileは、自動セグメント領域管理(ASSM)表領域でのみ作成できます。次のパラメータに関する説明は、SECUREFILEパラメータを使用するLOB記憶域パラダイムに該当します。


関連項目:

『Oracle Database SQL言語リファレンス』のCREATE TABLE文に関する項

この新しいLOB機能には、新しい記憶域パラメータが必要です。これらすべての新規パラメータについては、次のCREATE TABLEのBNFの後で説明します。

CREATE [ GLOBAL TEMPORARY ] TABLE
   [ schema.]table OF
   [ schema.]object_type
   [ ( relational_properties ) ]
   [ ON COMMIT { DELETE | PRESERVE } ROWS ]
   [ OID_clause ]
   [ OID_index_clause ]
   [ physical_properties ]
   [ table_properties ] ;

<relational_properties> ::=
{ column_definition
| { out_of_line_constraint
  | out_of_line_ref_constraint
  | supplemental_logging_props
  }
}
  [, { column_definition
     | { out_of_line_constraint
       | out_of_line_ref_constraint
       | supplemental_logging_props
       }
  ]...

<column_definition> ::=
column data_type [ SORT ]
      [ DEFAULT expr ]
      [ ENCRYPT encryption_spec ]
      [ ( inline_constraint [ inline_constraint ] ... )
      | inline_ref_constraint
      ]

<data_type> ::=
{ Oracle_built_in_datatypes
| ANSI_supported_datatypes
| user_defined_types
| Oracle_supplied_types
}

<Oracle_built_in_datatypes> ::=
{ character_datatypes
| number_datatypes
| long_and_raw_datatypes
| datetime_datatypes
| large_object_datatypes
| rowid_datatypes
}

<large_object_datatypes> ::=
{ BLOB | CLOB | NCLOB| BFILE }

 <table_properties> ::=
  [ column_properties ]
  [ table_partitioning_clauses ]
  [ CACHE | NOCACHE ]
  [ parallel_clause ]
  [ ROWDEPENDENCIES | NOROWDEPENDENCIES ]
  [ enable_disable_clause ]
  [ enable_disable_clause ]...
  [ row_movement_clause ]
  [ AS subquery ]

<column_properties> ::=
  { object_type_col_properties
  | nested_table_col_properties
  | { varray_col_properties | LOB_storage_clause }
    [ (LOB_partition_storage
        [, LOB_partition_storage ]...
      )
    ]
  | XMLType_column_properties
  }
  [ { object_type_col_properties
    | nested_table_col_properties
    | { varray_col_properties | LOB_storage_clause }
      [ ( LOB_partition_storage
          [, LOB_partition_storage ]...
        )
      ]
    | XMLType_column_properties
    }
  ]...

<LOB_partition_storage> ::=
  PARTITION partition
  { LOB_storage_clause | varray_col_properties }
    [ LOB_storage_clause | varray_col_properties ]...
  [ ( SUBPARTITION subpartition
     { LOB_storage_clause | varray_col_properties }
       [ LOB_storage_clause
       | varray_col_properties
       ]...
    )
  ]

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

<logging_clause> ::=
  { LOGGING | NOLOGGING | FILESYSTEM_LIKE_LOGGING }

<storage_clause> ::=
  STORAGE
  ({ INITIAL integer [ K | M ]
   | NEXT integer [ K | M ]
   | MINEXTENTS integer
   | MAXEXTENTS { integer | UNLIMITED }
   | PCTINCREASE integer
   | FREELISTS integer
   | FREELIST GROUPS integer
   | OPTIMAL [ integer [ K | M ]
             | NULL
             ]
   | BUFFER_POOL { KEEP | RECYCLE | DEFAULT }
   }
     [ INITIAL integer [ K | M ]
     | NEXT integer [ K | M ]
     | MINEXTENTS integer
     | MAXEXTENTS { integer | UNLIMITED }
     | MAXSIZE { { integer { K | M | G | T | P } } | UNLIMITED }
     | PCTINCREASE integer
     | FREELISTS integer
     | FREELIST GROUPS integer
     | OPTIMAL [ integer [ K | M ]
               | NULL
               ]
     | BUFFER_POOL { KEEP | RECYCLE | DEFAULT }
     ]...
  )

<LOB_deduplicate_clause> ::=
  { DEDUPLICATE
  | KEEP_DUPLICATES
  }

<LOB_compression_clause> ::=
  { COMPRESS [ HIGH | MEDIUM ]
  | NOCOMPRESS }

<LOB_encryption_clause> ::=
  { ENCRYPT [ USING 'encrypt_algorithm' ]
    [ IDENTIFIED BY password ]
  | DECRYPT
  }

<XMLType_column_properties> ::=
XMLTYPE [ COLUMN ] column
   [ XMLType_storage ]
   [ XMLSchema_spec ]

<XMLType_storage> ::=
STORE AS
   { OBJECT RELATIONAL
   | [ SECUREFILE | BASICFILE ] { CLOB | BINARY XML }
       [ { LOB_segname [ (LOB_parameters) ]
         | LOB_parameters
         }
         ]

<varray_col_properties> ::=
VARRAY varray_item
   { [ substitutable_column_clause ]
     STORE AS [ SECUREFILE | BASICFILE ] LOB
        { [ LOB_segname ] (LOB_parameters)
        | LOB_segname
        }
   | substitutable_column_clause
   }

条件:

BASICFILE

互換性モードが10gに設定されている場合、LOB STORAGE句は、10gで使用されていたものと同じです(BASICFILEキーワードは無効)。互換性モードが11g(またはそれ以上)に設定されている場合、デフォルトで元のリリース11.1より前のLOB機能が有効になり、完全な機能のためにこのパラメータが指定されます。

SECUREFILE

SecureFile記憶域パラダイムおよび機能を使用するには、SECUREFILE記憶域パラメータを明示的に指定します。SecureFileは、自動セグメント領域管理(ASSM)表領域でのみ作成できます。

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

CHUNK

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

RETENTION

SecureFilesに対する11gの互換性モードでは、このパラメータ名によって使用される保存ポリシーが指定されます。値がMAXの場合、セグメントで使用される領域がMAXSIZEパラメータで指定されるサイズに到達するまで、旧バージョンのLOBデータ・ブロックを保存するように指定されます。MAXSIZEが指定されない場合、MAXAUTOと同様に機能します。

値がMINの場合は、指定した保存時間(秒)が使用されることを意味します。値がNONEの場合は、保存期間がなく、必要であるとみなされる方法で領域を再利用できることを意味します。値がAUTOの場合は、時間と領域の両方の面で必要性を考慮し、可能なかぎり効率的に記憶域を管理するようにシステムが設定されます。

BASICFILE LOBとともに使用されるRETENTIONパラメータの詳細は、次の項を参照してください。

MAXSIZE

LOBセグメントで使用可能な領域の量を、指定したサイズに制限します。上限に達した場合、時間要件にかかわらず、必要に応じて、旧バージョンのディスク領域から新規のLOBデータが取得されます。

FREEPOOLS

11gの互換モードでは、このパラメータはSECUREFILE LOBに対して無視されます。

LOGGING/NOLOGGING/FILESYSTEM_LIKE_LOGGING

データベース・オブジェクトを作成してオブジェクトへの挿入を実行し、REDOログ・ファイルにログを記録する場合、LOGGINGを指定してください。デフォルトはLOGGINGです。

これらの操作をログに記録しない場合は、NOLOGGINGを指定します。

パーティション化されていないオブジェクトでは、この句に指定された値はオブジェクトに関連付けられたセグメントの実際の物理属性です。パーティション化されたオブジェクトでは、PARTITIONの説明にロギング属性を指定しないかぎり、この句に指定された値はCREATE文(および後続のALTER...ADD PARTITION文)で指定されるすべてのパーティションに関連付けられたセグメントのデフォルトの物理属性です。

FILESYSTEM_LIKE_LOGGINGは、SecureFilesがメタデータのみをログに記録することを意味します。このオプションはBasicFilesでは使用できません。この設定はファイル・システムをジャーナルするメタデータと同様で、障害の平均リカバリ時間を削減できます。SecureFile LOBのLOGGING設定は、ファイル・システムのデータ・ジャーナルと同様です。LOGGING設定およびFILESYSTEM_LIKE_LOGGING設定は、SecureFilesにより完全なトランザクション・ファイル・システムを提供します。

CACHENOLOGGINGは同時にサポートされていません。CACHEFILESYSTEM_LIKE_LOGGINGは同時にサポートされていません。

FILESYSTEM_LIKE_LOGGINGは、サーバー障害の後のデータの完全なリカバリを可能にします。


注意:

LOBセグメントでは、NOLOGGING設定およびFILESYSTEM_LIKE_LOGGING設定を使用すると、バックアップ操作中にデータがディスクで変更される可能性があり、読取り非一貫性が発生します。これを防ぐには、LOGGINGをLOB記憶域に設定してLOBセグメントに対する変更をREDOログ・ファイルに保存する必要があります。

FREELISTS/FREELIST GROUPS

11gの互換モードでは、SECUREFILE LOBが作成されるとき、これらのパラメータは無視されます。

PCTVERSION/FREEPOOLS

11gの互換モードでは、SECUREFILE LOBが作成されるとき、これらのパラメータは無視されます。

COMPRESS/NOCOMPRESS

LOB圧縮をオンまたはオフにします。LOB圧縮は、索引圧縮および表圧縮に対して直交です。つまり、表または索引圧縮を設定してもLOB圧縮には影響せず、また、その逆にも影響しません。

ENCRYPT/DECRYPT

LOB暗号化をオンまたはオフにします。また、オプションで、使用される暗号化アルゴリズムも選択します。

DEDUPLICATE/KEEP_DUPLICATES

DEDUPLICATEオプションを使用して、LOB列内の2つ以上の行の同一LOBデータ間で、すべて同じデータ・ブロックが共有されるように指定できます。データベースは同一の内容のSecureFileを単一のコピーに結合し、記憶域を削減して記憶域管理を簡素化します。このオプションの逆は、KEEP_DUPLICATESです。

重複除外でのCREATE TABLEの使用上の注意

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

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

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

  • 重複除外は、SecureFilesに対してのみ適用できます。

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

重複除外でのCREATE TABLEの例

SECUREFILEおよびLOBレベルの重複除外のある表を作成します。

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

SECUREFILE LOB列を含み、1つのパーティションに対してのみLOB重複除外が有効化されている表を作成します。p1パーティションに属する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)
);

SECUREFILE LOB列を含み、重複除外が無効化されている表を作成します。重複除外が無効化されている状態で、LOBが作成されます。

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

SecureFile列を含み、1つのパーティション以外、この列に対してSecureFile重複除外が有効化されている表を作成します。p2に属するもの以外のすべての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)
      );

圧縮でのCREATE TABLEの使用上の注意

  • SecureFile圧縮は、表または索引圧縮を伴わず、またその逆も伴いません。

  • サーバー全体のデフォルトのSecureFile圧縮アルゴリズムが使用されます。

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

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

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

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

  • LOB圧縮は、SECUREFILE LOBに対してのみ適用できます。

圧縮でのCREATE TABLEの例

SECUREFILE圧縮されたLOB列を含んだ表を作成します。デフォルトの圧縮レベルはMEDIUMです。

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

高い圧縮度のSECUREFILE LOB列を含んだ表を作成します。

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

SECUREFILE LOB列を含み、1つのパーティションに対してのみLOB圧縮が有効化されている表を作成します。p1パーティションに属する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)
     );

SECUREFILE LOB列を含み、LOB圧縮が無効化されている表を作成します。

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

暗号化でのCREATE TABLEの使用上の注意

LOB列で暗号化が有効化または無効化されている表を作成します。現在のTDE(透過的データ暗号化)構文を使用して、暗号化がLOBデータ型に拡張されます。LOBは、SECUREFILEパラメータを使用して作成する必要があります。

  • 暗号化は、ブロック・レベルで実行されます。

  • encrypt_algorithmは、暗号化アルゴリズムの名前を示します。有効なアルゴリズムには、次のものがあります。

    • 3DES168

    • AES128

    • AES192(デフォルト)

    • AES256

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

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

  • LOB列内のすべてのLOBが暗号化されます。

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

  • LOBは、列ごとのみで暗号化されます(透過的データ暗号化と同様)。LOB列内のすべてのパーティションが暗号化されます。

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

  • LOBの暗号化は、SECUREFILE LOBに対してのみ実行できます。

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


関連項目:

TDEを使用したOracle Walletの作成および使用方法は、『Oracle Database Advanced Security管理者ガイド』の「Oracle Wallet Managerの使用方法」を参照してください。

暗号化でのCREATE TABLEの例

SECUREFILE LOB列を含み、AES128を使用してLOB暗号化が有効化されている表を作成します。

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

SECUREFILE LOB列を含み、すべてのパーティションに対して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)
);

SECUREFILE LOB列を含み、パスワードを使用してLOB暗号化キーが作成されている表を作成します。デフォルトでは、AES192ビット暗号化が使用されます。

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

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

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

暗号化が無効化されているSECUREFILE LOBを作成します。

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

SECUREFILE LOBを含んだALTER TABLE用のパラメータ

ALTER TABLE文またはオンライン再定義を含んだLOB記憶域を、DBMS_REDEFINITIONパッケージを使用して変更できます。作成時にLOBの暗号化、圧縮または重複除外を有効化していない場合、この3つのパラメータに対する変更をディスク領域で効率的に行うために、オンライン再定義を使用して作成後にそれらを有効化することをお薦めします。


関連項目:

  • 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_REDEFINITIONパッケージに関する項

  • 「BasicFile LOBからSecureFileへの表列の移行」

  • 『Oracle Database SQL言語リファレンス』のALTER TABLE文に関する項


キーワードは太字で表されています。

ALTER TABLE [ schema.]table
  [ alter_table_properties
  | column_clauses
  | constraint_clauses
  | alter_table_partitioning
  | alter_external_table_clauses
  | move_table_clause
  ]
    [ enable_disable_clause
    | { ENABLE | DISABLE }
      { TABLE LOCK | ALL TRIGGERS }
    [ enable_disable_clause
    | { ENABLE | DISABLE }
      { TABLE LOCK | ALL TRIGGERS }
    ]...
  ] ;


<column_clauses> ::=
  { { add_column_clause
    | modify_column_clause
    | drop_column_clause
    }
    [ add_column_clause
    | modify_column_clause
    | drop_column_clause
    ]...
  | rename_column_clause
  | modify_collection_retrieval
    [ modify_collection_retrieval ]...
  | modify_LOB_storage_clause
    [ modify_LOB_storage_clause ] ...
  | alter_varray_col_properties
    [ alter_varray_col_properties ]
  }

<modify_LOB_storage_clause> ::=
MODIFY LOB (LOB_item) (LOB_deduplicate_clause [LOB_deduplicate_clause ] )

<LOB_deduplicate_clause> ::=
  { storage_clause
  | PCTVERSION integer
  | RETENTION [ { MAX | MIN integer | AUTO | NONE } ]
  | FREEPOOLS integer
  | REBUILD FREEPOOLS
  | LOB_deduplicate_clause
  | LOB_compression_clause
  | LOB_encryption_clause
  | { CACHE | { { NOCACHE | CACHE READS } [ logging_clause ] } }
  | allocate_extent_clause
  | shrink_clause
  | deallocate_unused_clause
  }
    [ storage_clause
    | PCTVERSION integer
    | RETENTION
    | FREEPOOLS integer
    | REBUILD FREEPOOLS
    | modify_LOB_sharing_clause
    | LOB_compression_clause
    | LOB_encryption_clause
  | { CACHE | { NOCACHE | CACHE READS } [ logging_clause ] }
    | shrink_clause
    | deallocate_unused_clause
    ]...

次の場合、これらのキーワードがこの文に対して定義されます。

DEDUPLICATE/KEEP_DUPLICATES

DEDUPLICATEオプションを使用して、LOB列内の2つ以上の行の同一LOBデータ間で、すべて同じデータ・ブロックが共有されるように指定できます。データベースは同一の内容のLOBを単一のコピーに結合し、記憶域を削減して記憶域管理を簡素化します。このオプションの逆は、KEEP_DUPLICATESです。

COMPRESS/NOCOMPRESS

LOB圧縮を有効化または無効化します。LOBセグメント内のすべてのLOBが、この新規設定で変更されます。

ENCRYPT/DECRYPT

LOBの暗号化をオンまたはオフにします。LOBセグメント内のすべてのLOBが、この新規設定で変更されます。LOBセグメントは、LOB暗号化を有効化または無効化する目的でのみ変更可能です。つまり、ALTERは、暗号化アルゴリズムまたは暗号化キーを更新する目的には使用できません。暗号化アルゴリズムまたは暗号化キーは、ALTER TABLE REKEY構文を使用して更新できます。

RETENTION

RETENTIONの変更は、ALTER TABLE文の実行後に作成された領域にのみ影響します。

重複除外でのALTER TABLEの使用上の注意

ALTER TABLE構文は、LOBレベルの重複除外を有効化または無効化します。

  • この構文は、LOB列の重複除外モードを変更します。

  • 既存のLOBに対する重複除外は、待機時間を大幅に増やします。

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

  • 重複除外は、表レベルまたはパーティション・レベルで指定できます。複数のパーティション化されたLOBにまたがって重複除外を実行することはできません。

  • 重複除外は、SecureFilesに対してのみ適用できます。

重複除外でのALTER TABLEの例

SECUREFILE LOBの重複除外を無効化します。

ALTER TABLE t1 MODIFY
     LOB(a) (
         KEEP_DUPLICATES
    );

SECUREFILE LOBに対するLOBレベルの重複除外を有効化します。

ALTER TABLE t1 MODIFY
    LOB(a) (
         DEDUPLICATE
    );

1つのパーティション内のSECUREFILE LOB列に対するLOBレベルの重複除外を有効化します。

ALTER TABLE t1 MODIFY PARTITION p1
    LOB(a) (
         DEDUPLICATE
    );

圧縮でのALTER TABLEの使用上の注意

  • この構文は、LOB列の圧縮モードを変更します。

  • 既存のLOBに対する圧縮は、待機時間を大幅に増大します。

  • DBMS_LOB.SETOPTIONSを使用して、LOBごとに圧縮を有効化または無効化できます。

  • 圧縮は、表レベルまたはパーティション・レベルで指定できます。

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

  • LOB圧縮は、SecureFilesに対してのみ適用できます。

圧縮でのALTER TABLEの例

SECUREFILE LOBの圧縮を無効化します。

ALTER TABLE t1 MODIFY
    LOB(a) (
         NOCOMPRESS
    );

高い圧縮度でのSECUREFILE LOBの圧縮を有効化します。

ALTER TABLE t1 MODIFY
    LOB(a) (
         COMPRESS HIGH
    );

1つのパーティション内のSECUREFILE LOB列に対するLOB圧縮を有効化します。

ALTER TABLE t1 MODIFY PARTITION p1
    LOB(a) (
         COMPRESS HIGH
    );

暗号化でのALTER TABLEの使用上の注意

ALTER TABLEを使用して、SECUREFILE LOBのLOB暗号化を有効化または無効化します。また、この構文を使用して、新しいキーまたはアルゴリズムを使用してLOB列に再度キーを付けることもできます。

  • ENCRYPT/DECRYPTオプションは、SecureFile列内のすべてのLOBの暗号化を有効化または無効化します。

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

  • DECRYPTオプションは、暗号化された列をクリアテキストの形式に変換します。

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

  • LOBは、列ごとのみで暗号化されます。パーティション化されたLOBは、すべてのパーティションが暗号化されているか暗号化されていないかのいずれかです。

  • LOB暗号化は、SecureFilesに対してのみ適用できます。

暗号化でのALTER TABLEの例

3DES168を使用して、LOBの暗号化を有効化します。

ALTER TABLE t1 MODIFY
      ( a CLOB ENCRYPT USING '3DES168');

次の例は、3DES168を使用したLOBの暗号化です。

ALTER TABLE t1 MODIFY LOB(a)
      (ENCRYPT USING '3DES168');

SECUREFILE LOB列の暗号化を有効化し、パスワードを使用して暗号化キーを作成します。

ALTER TABLE t1 MODIFY
    ( a CLOB ENCRYPT IDENTIFIED BY foo);

新しいキーを使用してLOB列を再暗号化するには、表に再度キーを付けます。

ALTER TABLE t1 REKEY USING '3DES168';

SecureFiles用のPL/SQLパッケージ: 列の設定

SecureFiles用の列の設定パッケージはアウトライン化されています。

DBMS_LOBパッケージ

LOBは、重複除外、暗号化および圧縮のためのLOB列の設定を継承します。また、LOBロケータAPIを使用してLOBレベルごとに設定することもできます。ただし、LONG APIを使用して、これらのLOB設定を設定することはできません。これらの機能に関するDBMS_LOBパッケージの追加事項については、次の項で説明します。


関連項目:

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_LOBパッケージに関する項

DBMS_LOB.GETOPTIONS

設定は、このファンクションを使用して取得できます。オプションの型に基づいて事前定義された定数に対応する整数が戻されます。

DBMS_LOB.SETOPTIONS

このプロシージャによって機能が設定されます。デフォルトのLOB設定を上書きして、LOBごとの機能設定を可能にします。このコールによりサーバーへのラウンドトリップが発生し、変更が永続化されます。

DBMS_LOB.ISSECUREFILE

このファンクションは、渡されるLOBロケータ(BLOBまたはCLOB)がSecureFile用の場合はTRUE、そうでない場合はFALSEを戻します。

DBMS_SPACEパッケージ

このプロシージャは、SECUREFILE LOB用です。

DBMS_SPACE.SPACE_USAGE

既存のSPACE_USAGEプロシージャがオーバーロードされ、LOB領域の使用に関する情報が表示されます。LOBセグメント内のすべてのLOBによって使用されるブロック内のディスク領域の量が戻されます。このプロシージャは、自動セグメント領域管理によって作成される表領域でのみ使用可能です。


関連項目:

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_SPACEパッケージに関する項

SecureFiles用の初期化パラメータ

db_securefileパラメータは、init.oraファイルで設定されます。

db_securefile

パラメータ名: db_securefile

パラメータ型: テキスト

許容値: { ALWAYS | FORCE | PERMITTED | NEVER | IGNORE }

デフォルト値: PERMITTED

説明: このパラメータを使用して、データベース管理者は、SECUREFILE LOBの作成の許可(PERMITTED)、今後のSECUREFILE LOBの作成の禁止(NEVER)、今後作成されるすべてのLOBがSECUREFILE LOBとなるように強制(FORCE)、SECUREFILE LOBを作成してBASICFILE LOBにフォールバック(ALWAYS)、またはSECUREFILE LOBの禁止とSECUREFILEオプションを使用したBASICFILE LOBの強制により発生するエラーの無視(IGNORE)のいずれかを指定できます。

NEVERが指定された場合、SECUREFILE LOBとして指定されたLOBはすべて、BASICFILE LOBとして作成されます。すべてのSECUREFILE特定の記憶域オプションおよび機能(圧縮、暗号化、重複除外など)で例外が発生します。指定されていない記憶域オプションには、BASICFILE LOBのデフォルト値が使用されます。

ALWAYSは、すべてのLOBをSECUREFILE LOBとして作成しようとしますが、SECUREFILEが明示的に指定されていないかぎり、ASSM表領域にないLOBをBASICFILE LOBとして作成します。指定されるBASICFILE LOB記憶域オプションはいずれも無視され、指定されていないすべての記憶域オプションには、SECUREFILEのデフォルト値が使用されます。

FORCEが指定された場合、システムで作成されるすべてのLOBは、SECUREFILE LOBとして作成されます。LOBがMSSM表領域で作成される場合、エラーが発生します。指定されるBASICFILE LOB記憶域オプションはいずれも無視され、指定されていないすべての記憶域オプションには、SECUREFILEのデフォルト値が使用されます。

IGNOREが指定された場合、SECUREFILEキーワードおよびすべてのSECUREFILEオプションは無視されます。

動的: パラメータは動的で、スコープはALTER SYSTEMです。

例: ALTER SYSTEM SET db_securefile = 'ALWAYS';

互換性およびアップグレード

このドキュメントで説明されているすべての機能は、互換性を11.0.0.0.0以上に設定した場合に有効になります。11.0.0.0.0に設定した後は、ダウングレードできません。

BASICFILE LOBフォーマットは、11.0.0.0.0の互換性でサポートされます。

BASICFILE LOBをSECUREFILE LOBにアップグレードする場合、データのアップグレードに通常使用される一般的な方法(CTAS / ITAS、オンライン再定義、エクスポート/インポート、列間でのコピー、またはビューおよび新規列の使用など)でアップグレードする必要があります。これらのソリューションの多くは、入力LOB列のデータで使用されるディスク領域を2回使用することを意味します。ただし、パーティション化して、これらの操作をパーティションごとに実行することにより、必要なディスク領域を少なくすることができる場合もあります。

ストリームは現行リリースのSecureFilesをサポートしていないことに注意してください。

BasicFile LOBからSecureFileへの表列の移行

この項では、LOB列の移行の方法について説明します。

SecureFile LOBへの移行時のREDO領域の生成防止

BasicFile LOB列の移行処理中にREDO領域が生成されると、パフォーマンスが低下することがあります。移行処理中の表に対するREDOがログに記録されるのは、表にLOGGINGが設定されている場合のみです。

また、BasicFile LOBからSecureFileへ変換中の列に対するREDOがログに記録されるのは、SecureFile LOB列の記憶特性がLOGGINGに指定されている場合のみです。LOB列のロギング設定(LOGGINGまたはNOLOGGING)は、LOBが作成された表領域から継承されます。

移行中のREDO領域の生成を回避するには、NOLOGGING記憶域パラメータを新しいSecureFile LOB列に指定する必要があります。移行の完了後に、LOGGINGをオンにしてください。

BasicFilesのためのオンライン再定義

オンライン再定義のメソッドは、BasicFile LOBをSecureFileに移行する場合にのみお薦めします。これは、表レベルまたはパーティション・レベルで指定できます。

オンライン再定義のメリット

  • 表またはパーティションをオフラインにする必要がない。

  • パラレルで実行可能。

オンライン再定義のデメリット

  • 表またはパーティション全体およびすべてのLOBセグメントに等しい追加の記憶域が必要。

  • グローバル索引を再作成する必要がある。

BasicFileを含む表の移行時のオンライン再定義の使用

また、オンライン再定義を使用して表を移行できます。オンライン再定義には表をオフラインにする必要がないメリットがありますが、表で使用している領域に等しいか、それよりも大きな追加の空き領域が必要です。次に、オンライン再定義を使用した表の移行の例を示します。

例4-1 オンライン再定義の例

REM Grant privileges required for online redefinition.
GRANT EXECUTE ON DBMS_REDEFINITION TO pm;
GRANT ALTER ANY TABLE TO pm;
GRANT DROP ANY TABLE TO pm;
GRANT LOCK ANY TABLE TO pm;
GRANT CREATE ANY TABLE TO pm;
GRANT SELECT ANY TABLE TO pm;
REM Privileges required to perform cloning of dependent objects.
GRANT CREATE ANY TRIGGER TO pm;
GRANT CREATE ANY INDEX TO pm;
CONNECT pm
DROP TABLE cust;
CREATE TABLE cust(c_id NUMBER PRIMARY KEY,
c_zip NUMBER,
c_name VARCHAR(30) DEFAULT NULL,
c_lob CLOB
);
INSERT INTO cust VALUES(1, 94065, 'hhh', 'ttt');
-- Creating Interim Table
-- There is no need to specify constraints because they are
-- copied over from the original table.
CREATE TABLE cust_int(c_id NUMBER NOT NULL,
c_zip NUMBER,
c_name VARCHAR(30) DEFAULT NULL,
c_lob CLOB
) LOB(c) STORE AS SECUREFILE (NOCACHE FILESYSTEM_LIKE_LOGGING);
DECLARE
col_mapping VARCHAR2(1000);
BEGIN
-- map all the columns in the interim table to the original table
col_mapping :=
'c_id c_id , '||
'c_zip c_zip , '||
'c_name c_name, '||
'c_lob c_lob';
DBMS_REDEFINITION.START_REDEF_TABLE('pm', 'cust', 'cust_int', col_mapping);
END;
/
DECLARE
error_count pls_integer := 0;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('pm', 'cust', 'cust_int',
    1, TRUE,TRUE,TRUE,FALSE, error_count);
DBMS_OUTPUT.PUT_LINE('errors := ' || TO_CHAR(error_count));
END;
/
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('pm', 'cust', 'cust_int');
-- Drop the interim table
DROP TABLE cust_int;
DESC cust;
-- The following insert statement fails. This illustrates
-- that the primary key constraint on the c_id column is
-- preserved after migration.
INSERT INTO cust VALUES(1, 94065, 'hhh', 'ttt');
SELECT * FROM cust;

パラレル・オンライン再定義

パラレル実行に十分なリソースがあるシステムでは、BASICFILE LOB列のSECUREFILE LOB列への再定義は、次の条件下でパラレルに実行できます。

  • 挿入先の表がパーティション化されていない場合:

    挿入先の表にLOB列を格納するために使用されるセグメントが、自動セグメント領域管理(ASSM)が使用可能になっている(現在のデフォルトおよびSecureFilesの要件)ローカル管理表領域に属している。

    1つのLOB列から1つのLOB列への単純なマッピングが存在し、挿入先の表には1つのLOB列のみがある。

  • 挿入先の表がパーティション化されている場合:

    パーティション化に通常使用されるパラレル実行方法が適用されます。挿入先の表がパーティション化されている場合、オンライン再定義がパラレルに実行されます。

オンライン再定義をパラレル実行するには、前の項の例4-1「オンライン再定義の例」の接続文の後に次の文を追加してください。

ALTER SESSION FORCE PARALLEL DML;