ヘッダーをスキップ
Oracle® Database SecureFilesおよびラージ・オブジェクト開発者ガイド
11gリリース2 (11.2)
B56263-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

4 Oracle SecureFiles LOBの使用

この章では、元のBasicFiles LOB実装を拡張するものとして導入されたSecureFiles LOBの使用方法について説明します。

この章の内容は次のとおりです。

SecureFiles LOBについて

Oracle Database 11gリリース1以降、新しいLOB記憶域アーキテクチャであるSecureFilesが導入されました。SecureFiles LOBは、記憶域キーワードSECUREFILECREATE TABLE文に表れる場合に作成されます。元のLOB記憶域アーキテクチャであるBasicFiles LOBがデフォルトの記憶域です。CREATE TABLE文において、キーワードSECUREFILEが使用されない場合、またはキーワードBASICFILEが使用された場合に有効になります。

次の項では、LOB型の列を含む表の設計、作成および変更時に使用される、LOB記憶域の特性について説明します。データベース管理者は、init.oraファイルのdb_securefileの初期化パラメータを使用して、初期設定を変更できます。

CREATE TABLE文を使用して、圧縮、重複除外または暗号化を有効にしておくことをお薦めします。これらの機能をALTER TABLE文で有効にすると、表のすべてのSecureFiles LOBデータの読取り、変更および書込みが実行され、長時間に渡る可能性がある操作中にデータベースで表がロックされます。

この項の内容は次のとおりです。

圧縮について

SecureFilesインテリジェント圧縮は、Oracle Advanced Compressionオプションで使用可能で、SecureFiles LOBデータをシームレスに分析して圧縮し、ディスク領域を節約します。

SecureFilesインテリジェント圧縮を実行するには、Oracle Advanced Compressionオプションのライセンスが必要です。詳細は、『Oracle Databaseライセンス情報』を参照してください。

重複除外について

SecureFilesインテリジェント重複除外は、Oracle Advanced Compressionオプションで使用可能で、LOB列またはパーティション内で重複するLOBデータをOracle Databaseで自動検出できるようにし、データのコピーを1つのみ格納することにより領域を節約できます。

SecureFilesインテリジェント重複除外を実行するには、Oracle Advanced Compressionオプションのライセンスが必要です。詳細は、『Oracle Databaseライセンス情報』を参照してください。

Oracle Streamsでは、重複除外されるSecureFiles LOBがサポートされないことにも注意してください。

暗号化について

SecureFilesインテリジェント暗号化は、Oracle Advanced Securityオプションで使用可能で、新しいLOB暗号化機能が導入されています。データは透過的データ暗号化(TDE)使用して暗号化され、データの安全な格納だけでなく、ランダムな読取りおよび書込みアクセスが可能です。

SecureFilesインテリジェント暗号化を実行するには、Oracle Advanced Securityオプションのライセンスが必要です。詳細は、『Oracle Databaseライセンス情報』を参照してください。

SecureFiles LOBを含んだCREATE TABLEの使用

SecureFiles LOBは、自動セグメント領域管理(ASSM)で管理される表でのみ作成できます。次のパラメータに関する説明は、SECUREFILEパラメータを使用するLOB記憶域パラダイムに該当します。詳細は、『Oracle Database SQL言語リファレンス』CREATE TABLE文に関する項を参照してください。

CREATE TABLE文を使用して、圧縮、重複除外または暗号化を有効にしておくことをお薦めします。これらの機能をALTER TABLE文で有効にすると、表のすべてのSecureFiles LOBデータの読取り、変更および書込みが実行され、長時間に渡る可能性がある操作中にデータベースで表がロックされます。

SHRINKオプションはSecureFiles LOBではサポートされていません。

SecureFiles LOBでは、新しい記憶域パラメータが導入されています。これらは、例4-1CREATE TABLEのBNFに導入されています。パラメータの詳細は、「SecureFiles LOB用のCREATE TABLEのパラメータ」を参照してください。

例4-1 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 | LOW ]
  | 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
   }

SecureFiles LOB用のCREATE TABLEのパラメータ

表4-1は、CREATE TABLE文のパラメータをまとめたものです。

表4-1 CREATE TABLE文のパラメータ

パラメータ 説明

BASICFILE


LOBの元のアーキテクチャを指定するパラメータ。圧縮、重複除外または暗号化機能をサポートしないBasicFiles LOBを作成します。

SECUREFILE


パフォーマンスを改善し、圧縮、重複除外および暗号化機能もサポートするアーキテクチャであるSecureFiles LOBを指定するパラメータ。

CHUNK


LOBに対してアクセスまたは変更を行うときに、Oracle Databaseが使用するデータ・サイズです。これはBasicFiles LOBで使用され、SecureFiles LOBの場合は後方互換性のために提供されるアドバイザ・サイズです。

RETENTION


指定した方法でLOBデータの旧バージョンをLOB列に格納するように設定します。

MAXSIZE


LOBで使用可能な記憶域の上限。

FREEPOOLS


BasicFiles LOBのFREELISTグループの数を指定します(データベースが自動UNDOモードの場合)。SecureFiles LOBには使用されません。

LOGGING、NOLOGGINGまたはFILESYSTEM_LIKE_LOGGING


ロギング・オプション。

FREELISTSまたはFREELIST GROUPS


パーティション表でNULLセグメントに割り当てられるプロセス空きリスト、または空きリスト・グループの数をそれぞれ指定します。SecureFiles LOBには使用されません。

PCTVERSION


使用中のBasicFiles LOBデータ領域全体のうち、旧バージョンのLOBデータ・ページが占めることのできる割合を指定します。SecureFiles LOBには使用されません。

COMPRESSまたはNOCOMPRESS


SecureFilesインテリジェント圧縮をオンまたはオフにします。

DEDUPLICATEまたはKEEP_DUPLICATES


SecureFilesインテリジェント重複除外をオンまたはオフにします。

ENCRYPTまたはDECRYPT


SecureFilesインテリジェント暗号化をオンまたはオフにします。


BASICFILE

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

SECUREFILE

SecureFiles LOB記憶域アーキテクチャおよび機能を使用するには、SECUREFILE記憶域パラメータを明示的に指定します。SecureFiles LOBは、自動セグメント領域管理(ASSM)で管理される表領域でのみ作成できます。

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

CHUNK

CHUNKは1つ以上のOracleブロックです。SecureFiles LOBでは、CHUNKはアドバイザ・サイズで、後方互換性の目的で提供されます。BasicFiles LOBでは、LOBを格納する表を作成する際にチャンク・サイズを指定できます。LOB値に対してアクセスまたは変更を行うときに、Oracle Databaseが使用するデータ・サイズに対応します。

RETENTION

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

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

BasicFiles LOBで使用されるRETENTIONパラメータの詳細は、「BasicFiles LOB用のRETENTIONパラメータ」を参照してください。

MAXSIZE

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

FREEPOOLS

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

LOGGING、NOLOGGINGまたはFILESYSTEM_LIKE_LOGGING

LOBを作成してLOBへの挿入を実行し、REDOログ・ファイルにログを記録する場合、LOGGINGを指定します。デフォルトはLOGGINGです。

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

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

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

SecureFiles LOBでは、NOLOGGING設定はFILESYSTEM_LIKE_LOGGINGに内部変換されます。

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

「BasicFiles LOB用のLOGGING/NOLOGGINGパラメータ」および「読取り一貫性の保証」を参照してください。


注意:

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

FREELISTSまたはFREELIST GROUPS

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

PCTVERSION

このパラメータでは、使用中のBasicFiles LOBデータ領域全体のうち、旧バージョンのBasicFiles LOBデータ・ページが占めることのできる割合を指定します。11gの互換モードでは、このパラメータはSecureFiles LOBの作成時に無視されます。

COMPRESSまたはNOCOMPRESS

COMPRESSオプションでは、SecureFilesインテリジェント圧縮をオンにし、NOCOMPRESSではオフにします。表または索引圧縮を設定しても、SecureFilesインテリジェント圧縮には影響しないことに注意してください。

SecureFilesインテリジェント圧縮を実行するには、Oracle Advanced Compressionオプションのライセンスが必要です。詳細は、『Oracle Databaseライセンス情報』を参照してください。

DEDUPLICATEまたはKEEP_DUPLICATES

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

SecureFilesインテリジェント重複除外を実行するには、Oracle Advanced Compressionオプションのライセンスが必要です。詳細は、『Oracle Databaseライセンス情報』を参照してください。

ENCRYPTまたはDECRYPT

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

SecureFilesインテリジェント暗号化を実行するには、Oracle Advanced Securityオプションのライセンスが必要です。詳細は、『Oracle Databaseライセンス情報』を参照してください。

CREATE TABLE圧縮

この項では、CREATE TABLE文で使用されるSecureFilesインテリジェント圧縮について説明します。この項の内容は次のとおりです。

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

  • SecureFilesインテリジェント圧縮では、表または索引圧縮を有効にできません。同様に、表および索引圧縮でもSecureFilesインテリジェント圧縮を有効にできません。

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

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

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

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

  • メソッドDBMS_LOB.SETOPTIONS()を使用して、SecureFiles LOBごとに圧縮を有効および無効化できます。「SETOPTIONS()」を参照してください。

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

CREATE TABLE圧縮の例

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

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

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

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

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

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

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

例4-5 無効化された圧縮を使用したSecureFiles LOB列の作成

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

例4-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)
     );

CREATE TABLE重複除外

この項では、CREATE TABLE文で使用されるSecureFiles LOB重複除外について説明します。この項の内容は次のとおりです。

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

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

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

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

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

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

CREATE TABLE重複除外の例

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

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

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

例4-8 無効化された重複除外を使用したSecureFiles LOB列の作成

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

例4-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)
);

例4-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)
      );

CREATE TABLE暗号化

この項では、CREATE TABLE文で使用されるSecureFiles LOB暗号化について説明します。この項の内容は次のとおりです。

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

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

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

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

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

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

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

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

  • LOBは、TDEと同様に列ごとのみで暗号化されます。LOB列内のすべてのパーティションが暗号化されます。

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

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

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


    関連項目:

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

CREATE TABLE暗号化の例

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

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

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

例4-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)
);

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

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
    );

例4-14 無効化された暗号化を使用したSecureFiles LOB列の作成

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

SecureFiles LOBを含んだALTER TABLEの使用

ALTER TABLE文またはオンライン再定義を含んだLOB記憶域を、DBMS_REDEFINITIONパッケージを使用して変更できます。『PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

表の作成時に、圧縮、重複除外または暗号化を有効にしておくことをお薦めします。ALTER TABLEを使用してこれらの機能を有効にすると、読取り、変更および書込みコマンドでSecureFiles LOB列全体が変更され、長時間に渡る可能性があるこの操作中に、表のロックが保持されます。

SHRINKオプションはSecureFiles LOBではサポートされていません。

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

例4-1ALTER TABLEのBNFでは、新しいパラメータが導入されています。パラメータの詳細は、「SecureFiles LOB用のCREATE TABLEのパラメータ」を参照してください。

ALTER TABLE文の詳細は、「BasicFiles LOBからSecureFiles LOBへの列の移行」および『Oracle Database SQL言語リファレンス』を参照してください。

例4-15 ALTER TABLE用のBNF

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

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) ( 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
} ...

SecureFiles LOB用のCREATE TABLEのパラメータ

表4-2は、CREATE TABLE文のパラメータをまとめたものです。

表4-2 ALTER TABLE文のパラメータ

パラメータ 説明

RETENTION


指定した方法でLOBデータの旧バージョンをLOB列に格納するように設定します。

COMPRESSまたはNOCOMPRESS


SecureFiles LOB圧縮をオンまたはオフにします。

DEDUPLICATEまたはKEEP_DUPLICATES


SecureFiles LOB重複除外をオンまたはオフにします。

ENCRYPTまたはDECRYPT


SecureFiles LOB暗号化をオンまたはオフにします。


RETENTION

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

COMPRESSまたはNOCOMPRESS

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

DEDUPLICATEまたはKEEP_DUPLICATES

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

ENCRYPTまたはDECRYPT

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

ALTER TABLE圧縮

この項では、ALTER TABLE文で使用されるSecureFiles LOB圧縮について説明します。この項の内容は次のとおりです。

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

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

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

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

  • LOW、MEDIUMおよびHIGHオプションでは、異なる圧縮レベルを使用できます。圧縮度が高くなればなるほど、待機時間が長くなります。HIGH設定ではより多くの作業が発生しますが、データの圧縮が向上します。デフォルトは、MEDIUMです。解凍が簡単で、非常に迅速です。「CREATE TABLE圧縮」を参照してください。

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

ALTER TABLE圧縮の例

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

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

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

例4-17 SecureFiles LOB列の変更による圧縮の無効化

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

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

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

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

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

ALTER TABLE重複除外

この項では、ALTER TABLE文に関連するSecureFiles LOB重複除外について説明します。この項の内容は次のとおりです。

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

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

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

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

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

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

ALTER TABLE重複除外の例

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

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

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

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

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

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

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

ALTER TABLE暗号化

この項では、ALTER TABLE文で使用されるSecureFiles LOB暗号化について説明します。この項の内容は次のとおりです。

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

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

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

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

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

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

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

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

ALTER TABLE暗号化の例

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

例4-23 特定のアルゴリズムに基づいた暗号化によるSecureFiles LOB列の変更

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

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

これは、3DES168を使用してLOBの暗号化を有効化する2番目の例です。

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

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

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

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

例4-25 暗号化に再度キーを付けることによるSecureFiles LOB列の変更

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

ALTER TABLE t1 REKEY USING '3DES168';

データベース・ファイルシステム・リンク

この項では、データベース・ファイルシステム・リンクについて説明します。この章の内容は、次のとおりです。

データベース・ファイルシステム・リンクの概要

DBFSリンクには、LOBが格納される通常のセグメントとは別の場所にSecureFiles LOBを透過的に格納し、かわりにこのLOBへのリンクをセグメントに格納する機能が用意されています。このリンクは、アクセスされたときにDBFSを使用してLOBを特定するパスを参照する必要があります。つまり、LOBは、別のファイルシステム、テープ・システム、クラウド、またはDBFSを使用してアクセスできる任意の場所に格納できます。

セグメントの外部に格納されているSecureFiles LOBにユーザーまたはアプリケーションがDBFSリンクを使用してアクセスしようとすると、試行された操作や、LOBを保持しているDBFSストアの特性に応じて、動作が異なる場合があります。

  • 読取り:

    LOBがデータベース内のローカル領域にまだキャッシュされていない場合、LOBが保持されているDBFSコンテンツ・ストアでPROPNAME_STREAMABLEパラメータの設定に基づいてストリーミング・アクセスが許可されていれば、このコンテンツ・ストアからLOBを直接読み取ることができます。コンテンツ・ストアでストリーミング・アクセスが許可されていない場合、データベース内のローカル領域にLOB全体が最初に読み込まれ、将来のアクセスに備えてここに一定期間格納されます。

  • 書込み:

    LOBがデータベース内のローカル領域にまだキャッシュされていない場合、LOBは最初にデータベースに読み込まれ、必要に応じて変更されてから、該当するLOBのDBFSリンクに定義されているDBFSコンテンツ・ストアに書き戻されます。

  • 削除:

    DBFSリンクを介して格納されているSecureFiles LOBが削除されると、DBFSリンクは表から削除されますが、LOB自体はDBFSコンテンツ・ストアから削除されません。または、これは、該当するDBFSコンテンツ・ストアの特性/設定によってはより複雑になります。

データベース・ファイルシステム・リンクでは、SecureFiles LOBをDBFS階層ストア(DBFS HS)と組み合せて使用することにより、階層ストレージ管理(HSM)を実装できます。HSMは、データベースが使用頻度の低いまたは未使用のデータを、高速でコストが高い小さいストレージから、速度が遅く低コストで容量の大きいストレージに移動するためのプロセスです。

図4-1 データベース・ファイルシステム・リンク

図4-1の説明が続きます。
「図4-1 データベース・ファイルシステム(DBFS)」の説明

データベース・ファイルシステム・リンクの作成

データベース・ファイルシステム・リンクでは、DBFSコンテンツ・パッケージ(DBMS_DBFS_CONTENT)を使用して、データベース・ファイルシステムを作成する必要があります。

Oracleでは、DBFSリンクの作成用に複数の方法を用意しています。

  • 指定したDBFSパス名にSecureFiles LOBデータを移動し、新しい場所への参照をLOBに格納できます。LOBおよびDBFSパス名引数を使用してDBMS_LOB.MOVE_TO_DBFS_LINK()をコールすると、指定したDBFS HSMストアが作成され(存在しない場合)、指定したDBFS HSMストアにSecureFiles LOBからデータがコピーされ、SecureFiles LOBからデータが削除され、このLOBを介して後続のアクセス用のファイル・パス名が格納されます。

  • 既存のファイルへの参照をコピーまたは作成できます。DBMS_LOB.COPY_DBFS_LINK()をコールし、既存のDBFSリンクからリンクをコピーします。宛先SecureFiles LOBにデータがある場合、そのデータは削除され、そのリンクに対する参照のコピーが宛先SecureFiles LOBに格納されます。

  • 指定されたDBFSパス名にリンクのデータが格納されている場合は、DBMS_LOB.SET_DBFS_LINK()をコールします。指定したSecureFiles LOBからデータが削除され、DBFSパス名のリンクが格納されます。

DBFSリンクを作成すると、実行可能な操作およびその実行方法に影響があります。Oracle Database 11gR2より前から存在している一部のDBMS_LOB操作では、LOBがDBFSリンクの場合に例外が発生します。アプリケーションでは、これらをコールする前にDBMS_LOB.COPY_FROM_LINK()をコールして、DBFSリンクをLOBで置き換える必要があります。完了したら、DBMS_LOB.MOVE_TO_DBFS_LINK()を使用して、更新済のLOBを必要に応じてDBFSに戻すことができます。Oracle Database 11gR2より前から存在しているその他のDBMS_LOB操作は、ストリーミングをサポートするファイルシステムにDBFSリンクが存在する場合に、透過的に動作します。ストリーミングがサポートされていないか無効の場合、これらの操作は失敗することに注意してください。

DBFSリンク・ファイルがDBFSインタフェースから直接変更されると、後続のSecureFiles LOBの読取りに変更内容が反映されます。ファイルがDBFSインタフェースからから削除されると、後続の読取りで例外が発生します。

データベースでは、エクスポートおよびインポートの際、DBAがSecureFiles LOB HSMに格納されたデータのすべてを格納することは望まない場合もあります。Oracleには、データベース・ファイルシステム・リンクのみをエクスポートおよびインポートする機能があります。このリンクは完全に修飾された識別子で、SecureFiles LOBに入れられるか、または異なるデータベースのSecureFiles LOBに登録されると、格納済のデータに対するアクセスを提供します。リンクをエクスポートおよびインポートするこの機能は、シンボリック・リンクの共通ファイルシステムの機能性に類似しています。

新しくインポートしたリンクが使用可能なのは、ソース(格納されたデータ)が使用可能である場合、または、インポートしたシステムで最初の取得が行われるまでのみです。格納されたデータベースの保存はアプリケーションが担当します。まだ参照されているデータをアプリケーション・システムがストアから削除すると、参照する側のSecureFiles LOBがこのデータにアクセスしようとしたときに例外がスローされます。Oracleでは、データベース内のデータをDBFSストアに移行した後もキャッシュ済コピーとして保持し続けることもサポートしています。保存ポリシーに準拠してこれらのコピーをパージするかどうかは、アプリケーションによって決まります。

データベース・ファイルシステム・リンクのコピー

API DBMS_LOB.COPY_DBFS_LINK(DSTLOB, SRCLOB, FLAGS)には、リンクされたSecureFiles LOBをコピーする機能が用意されています。デフォルトでは、LOBはこの操作中にDBFS HSMストアから取得されません。これは、DBFSパス名を(ソース側で)エクスポートして(宛先側で)インポートすることで可能となる参照によるコピー操作です。flags引数を使用すると、宛先ではデータベース内にローカル・コピーを持ち、DBFS HSMストア内のLOBデータを参照するよう命令できます。

表間でのリンク済LOBのコピー

CREATE TABLE ... AS SELECT (CTAS)およびINSERT TABLE ... AS SELECT (ITAS)を使用すると、ソース表のSecureFiles LOBに格納されたDBFSリンクが宛先表にコピーされます。

オンライン再定義およびDBFSリンク

オンライン再定義では、再定義される表のSecureFiles LOBで格納されたDBFSリンクがコピーされます。

透過的読取り

DBFSリンクでは、データがデータベースにキャッシュされていない場合でも、リンクされたSecureFiles LOBから読み取ることができます。この操作は、データが実際に格納されているコンテンツ・ストアからデータを読み取り、SecureFiles LOBセグメントからデータが読み取られているかのように、そのデータをユーザーのアプリケーションにストリーミングして戻すことにより実行されます。これにより、DBMS_LOB.COPY_FROM_DBFS_LINK()を最初にコールする必要なく、DBFSリンクのデータにシームレスにアクセスできます。

特定のSecureFiles LOBで透過的読取りを使用できるかどうかは、データが存在するDBFS_CONTENTストアで決定されます。この機能は、DBFS_SFSストアで常に有効で、デフォルトではDBFS_HSストアで有効です。DBFS_HSストアで透過的読取りを無効にするには、PROPNAME_STREAMABLEパラメータをFALSEに設定します。

SecureFiles LOBの初期化パラメータdb_securefile

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

パラメータdb_securefileの型はtextです。許容値は、ALWAYSPERMITTED(デフォルト)NEVERまたはIGNOREです。db_securefileパラメータは動的で、スコープはALTER SYSTEMです。

例4-26 ALTER SYSTEMによるdb_securefileパラメータの設定

ALTER SYSTEM SET db_securefile = 'ALWAYS';

db_securefileパラメータを使用して、データベース管理者はSecureFiles LOBの作成を許可(PERMITTED)、SecureFiles LOBの作成を禁止(NEVER)、SecureFiles LOBの作成は試行するがBasicFiles LOBに戻す(ALWAYS)、またはSecureFiles LOBを禁止して、BasicFiles LOBでSecureFiles LOBオプションを強制することで発生するすべてのエラーを無視(IGNORE)のいずれかを行うことができます。

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

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

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

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

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

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

BasicFiles LOBからSecureFiles LOBへの列の移行

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

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

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

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

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

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

BasicFiles LOBからSecureFiles LOBへの移行では、メソッドとしてオンラインの再定義のみをお薦めします。これは表レベルまたはパーティション・レベルで実行できます。

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

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

  • パラレルで実行可能。

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

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

  • グローバル索引の再作成が必要。

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

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

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

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 requirement 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_lob) 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;

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

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

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

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

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

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

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

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

ALTER SESSION FORCE PARALLEL DML;

SecureFiles LOBおよびDBFS用のPL/SQLパッケージ

この項では、SecureFiles LOBで使用されるPL/SQLパッケージについて説明します。

この項の内容は次のとおりです。

DBMS_LOBパッケージ

LOBは重複除外、暗号化および圧縮に関するLOB列設定を継承し、LOBロケータAPIを使用して特定のLOBインスタンスに構成することもできます。LOB設定の構成にLONG APIが使用できないことに注意してください。次の項は、これらの機能に対応するためPL/SQL DBMS_LOBパッケージに行われた追加および変更を説明します。詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』DBMS_LOBパッケージに関する項を参照してください。

表4-3に示すCONSTANT PLS_INTEGER型の定数では、DBFSリンクのインタフェースをサポートしています。PL/SQL DBMS_LOBパッケージで使用される定数の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

表4-3 一部のDBMS_LOB定数

定数 説明
DBFS_LINK_NEVER

DBFSリンクの状態値

DBFS_LINK_YES

DBFSリンクの状態値

DBFS_LINK_NO

DBFSリンクの状態値

DBFS_LINK_CACHE

COPY_DBFS_LINK()およびMOVE_DBFS_LINK()で使用されるフラグ。

DBFS_LINK_NOCACHE

COPY_DBFS_LINK()およびMOVE_DBFS_LINK()で使用されるフラグ。

DBFS_LINK_PATH_MAX_SIZE

DBFSパラメータの最大長(1024)。

CONTENTTYPE_MAX_SIZE

コンテンツ・タイプの最大1バイトのASCII文字(128)。


表4-4は、PL/SQLパッケージDBMS_LOBのメソッドに加えられた変更をまとめたものです。SecureFiles LOBパラダイムをサポートできるように、既存のメソッドの多くが強化されており、複数の新しいメソッドが追加されています。

Oracle Database 11gR2より前から存在している一部のDBMS_LOB操作では、LOBがDBFSリンクの場合に例外が発生することに注意してください。アプリケーションでは、これらをコールする前にCOPY_FROM_LINK()をコールして、DBFSリンクをLOBで置き換える必要があります。完了したら、MOVE_TO_DBFS_LINK()を使用して、更新済のLOBを必要に応じてDBFSに戻すことができます。Oracle Database 11gR2より前から存在しているその他のDBMS_LOB操作は、ストリーミングをサポートするファイルシステムにDBFSリンクが存在する場合に、透過的に動作します。ストリーミングがサポートされていないか無効の場合、これらの操作は失敗することに注意してください。

表4-4 DBMS_LOBメソッド

メソッド 説明

GETOPTIONS()


特定のLOBの設定済のオプションを取得します。

SETOPTIONS()


特定のLOBで新しいオプションを設定します。

ISSECUREFILE()


LOBがSecureFiles LOBかどうかを判別します。

MOVE_TO_DBFS_LINK()


指定したLOBデータをデータベースからDBFS HSMストアに移動します。

COPY_FROM_DBFS_LINK()


指定したLOBデータをDBFS HSMストアからデータベースにコピーします。

COPY_DBFS_LINK()


既存のDBFSを新しいLOBにコピーします。

GET_DBFS_LINK()


LOBのDBFSパス名を戻します。

SET_DBFS_LINK()


LOBとDBFSパス名を関連付けます。

GET_DBFS_LINK_STATE()


LOBのリンクの状態を戻します。

DBFS_LINK_GENERATE_PATHNAME()


DBFSリンクを作成するための一意のファイル・パス名を戻します。

SETCONTENTTYPE()


LOBデータのコンテンツ・タイプ文字列を戻します。

GETCONTENTTYPE()


LOBデータのコンテンツ・タイプ文字列を取得します。

APPEND()


ソースLOBのコンテンツを宛先LOBに追加します。

COMPARE()


2つのLOBの全体または一部を比較します。

CONVERTTOBLOB()


CLOBまたはNCLOBの文字データを指定したキャラクタ・セットに変換し、バイナリ形式で宛先BLOBに書き込みます。

CONVERTTOCLOB()


BLOBのバイナリ・データを指定したキャラクタ・セットに変換し、文字形式で宛先CLOBまたはNCLOBに書き込みます。

COPY()


ソースLOBの全体または一部を宛先LOBにコピーします。

ERASE()


LOBの全体または一部を消去します。

FRAGMENT_DELETE()


LOBの指定したフラグメントを削除します。

FRAGMENT_INSERT()


データのフラグメントをLOBに挿入します。

FRAGMENT_MOVE()


LOBのフラグメントをLOB内の場所間で移動します。

FRAGMENT_REPLACE()


LOBのフラグメントを新しいデータで置き換えます。

LOADBLOBFROMFILE()


BFILEデータをBLOBにロードします。

LOADCLOBFROMFILE()


BFILEデータをCLOBにロードします。

LOADFROMFILE()


BFILEデータをLOBにロードします。

READ()


LOBからデータを読み取ります。

SUBSTR()


LOBのフラグメントを戻します。

TRIM()


指定した長さまでLOBを切り捨てます。

WRITE()


LOBにデータを書き込みます。

WRITEAPPEND()


データをLOBの終わりに追加します。


GETOPTIONS()

この関数では、各SecureFiles LOBの圧縮、重複除外および暗号化の設定を取得します。オプションの型に基づいて事前定義された定数に対応する整数が戻されます。

これらの機能が無効になっているSecureFiles LOB列全体では、圧縮または重複除外をオンまたはオフに切り替えることはできません。

この関数の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。対応するOCI LOB関数OCILobGetContentType()の詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

SETOPTIONS()

このプロシージャは圧縮、重複除外および暗号化機能を設定します。各LOBベースの機能の設定を可能にし、デフォルトLOB設定を上書きします。このコールでは、変更を永続化させる際にサーバーへのラウンド・トリップが発生します。

これらの機能が有効になっていないSecureFiles LOB列では、圧縮または重複除外をオンまたはオフに切り替えることができません。GETOPTIONS() およびSETOPTIONS()は、個々のSecureFiles LOBに対して動作します。特定のSecureFiles LOBで機能をオフに切り替えたり、SETOPTIONS()によってすでにオフにされた機能をオンに切り替えはできますが、表の作成時にSecureFiles LOBに指定されていないオプションをオンに切り替えることはできません。

この関数の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。対応するOCI LOB関数OCILobSetContentType()の詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

ISSECUREFILE()

このファンクションは、渡されるLOBロケータがSecurefiles LOB用の場合にTRUEを戻します。そうでなければ、FALSEを戻します。

この関数の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

MOVE_TO_DBFS_LINK()

MOVE_TO_DBFS_LINK()では、指定したLOBデータを(データベースから)DBFS HSMストアに配置します。LOBが格納済の場合、MOVE_TO_DBFS_LINK()は移動が正常に終了したかのように暗黙的に返されます。この場合、DBFS_LINK_NOCACHEが指定されるか、デフォルトのflags値が設定されると、LOBデータはデータベースから削除されます。

同じflagsを持つ同じLOBでMOVE_TO_DBFS_LINK()を複数回コールしても効果はありません。格納済のLOBでMOVE_TO_DBFS_LINK()をコールすると、flagsの設定に応じて、LOBはキャッシュ(MOVE_TO_DBFS_LINK_CACHE)されるか、削除(DBFS_LINK_NOCACHE)されます。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

COPY_FROM_DBFS_LINK()

COPY_FROM_DBFS_LINK()では、指定したLOBデータをDBFS HSMストアからデータベースに取得します。

LOBが正常に取得されると、COPY_FROM_DBFS_LINKでは暗黙的に成功が返されます。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

COPY_DBFS_LINK()

COPY_DBFS_LINK()では、取得を中断することなく宛先LOBがソースLOBと同じDBFSパス名を参照します。オプションのフラグ・パラメータにより、LOBが宛先に読み取られます。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

GET_DBFS_LINK()

GET_DBFS_LINK()では、指定されたLOBのDBFSパス名を戻します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

SET_DBFS_LINK()

SET_DBFS_LINK: 指定されたLOBを指定されたDBFSパス名にリンクします。

GET_DBFS_LINK_STATE()

GET_DBFS_LINK_STATEは、指定されたLOBに対する現行のリンクの状態を取得します。

指定されたLOBの現行のリンクの状態を戻します。LOBがリンクされていない場合、状態はDBFS_LINK_NEVERに設定されます。LOBがリンクされている場合、状態はDBFS_LINK_YESに設定されます。LOBがDBFS HSMストアから取得されている場合、状態はDBFS_LINK_NOに設定されます。LOBがリンク済だがデータがデータベースに残っている場合、cachedはTRUEに設定されます。データがリンクの作成後に削除された場合、cachedはFALSEに設定され、状態がDBFS_LINK_NEVERの場合はNULLに設定されます。pathname引数は、DBFS HSMストアでLOBの識別に使用されるDBFSパス名に設定されます。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

DBFS_LINK_GENERATE_PATHNAME()

DBFS_LINK_GENERATE_PATHNAME()では、DBFSリンクを作成するための一意のファイル・パス名を戻します。

アーカイブに使用できるグローバルに一意なファイル・パス名を戻します。これは、このファンクションの各種LOBまたはLOBの各バージョンを対象としたすべてのコールで、グローバルに一意であることが保証されています。同一のLOBおよびバージョンでは、常に同じ名前になります。

SETCONTENTTYPE()

SETCONTENTTYPE()では、LOB内のデータに対するコンテンツ・タイプ文字列を設定します。

SecureFiles LOBに関連付けられた既存のcontenttypeをクリアするには、contenttypeを空の文字列に設定してSETCONTENTTYPE()を呼び出します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

GETCONTENTTYPE()

GETCONTENTTYPE()は、LOB内のデータに対するコンテンツ・タイプ文字列が設定されている場合に取得します。

SecureFiles LOBにcontenttypeが関連付けられていない場合、GETCONTENTTYPE()NULLを戻します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

APPEND()

リンクされたSecureFiles LOBでAPPEND()がコールされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

COMPARE()

DBFSリンクであるLOBでCOMPARE()がコールされると、リンクされたLOBは、可能な場合はDBFSからストリーミングされ、可能でない場合は例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

CONVERTTOBLOB()

CONVERTTOBLOBがコールされ、ソースLOBがリンク済の場合、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

CONVERTTOCLOB()

CONVERTTOCLOBがコールされ、ソースLOBがリンク済の場合、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

COPY()

ソースLOBがリンクされると、データは、可能な場合はDBFSからストリーミングされ、可能でない場合は例外が発生します。宛先LOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

ERASE()

削除するLOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

FRAGMENT_DELETE()

LOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

FRAGMENT_INSERT()

LOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

FRAGMENT_MOVE()

LOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

FRAGMENT_REPLACE()

LOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

LOADBLOBFROMFILE()

BLOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

LOADCLOBFROMFILE()

CLOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

LOADFROMFILE()

LOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

READ()

LOBがリンクされると、データは、可能な場合はDBFSからストリーミングされ、可能でない場合は例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

SUBSTR()

LOBがリンクされると、データは、可能な場合はDBFSからストリーミングされ、可能でない場合は例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

TRIM()

LOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

WRITE()

LOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

WRITEAPPEND()

LOBがリンクされると、例外が発生します。

詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

DBMS_SPACEパッケージ

DBMS_SPACE PL/SQLパッケージでは、セグメントの増加および領域の要件を分析できます。

SPACE_USAGE()

既存のSPACE_USAGEプロシージャがオーバーロードされ、LOB領域使用量に関する情報が戻されます。これは、LOBセグメント内のすべてのLOBによって使用されている、ブロック内のディスク領域容量を戻します。このプロシージャは、自動セグメント領域管理で作成された表領域でのみ使用できます。詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。