Oracle LOB記憶域にはSecureFiles LOB記憶域とBasicFiles LOB記憶域という2つのタイプがあり、これらは様々なタイプの表領域とともに使用されます。
LOB列型が含まれる表を設計、作成および変更します。
ここでは、次の項目について説明します。
初期のOracle Databaseリリースでは、LOB記憶域タイプのみサポートされていました。Oracle Database 11gでSecureFiles LOB記憶域が実装され、元の記憶域タイプの名前がBasicFiles LOB記憶域となり、これがデフォルトになりました。
BasicFiles LOB記憶域を使用して作成したLOBはBasicFiles LOBとされ、SecureFiles LOB記憶域を使用して作成したLOBはSecureFiles LOBと名付けられました。区別するためCREATE TABLE文が新しいキーワードに追加され、BASICFILEはBasicFiles LOB記憶域を示し、SECUREFILEはSecureFiles LOB記憶域を示しています。
Oracle Database 12c以降、SecureFiles LOB記憶域はCREATE TABLE文でデフォルトになりました。明示的に記憶域タイプが指定されていない場合、新規LOB列ではSecureFiles LOB記憶域が使用されます。
用語LOBは、(SecureFiles LOB記憶域タイプのみに適用できる)名前、またはアーカイブまたはリンクへの参照で記憶域タイプを明示的に示していない場合は両方の記憶域タイプのLOBを表しています。
初期化と互換性については、「初期化、互換性およびアップグレード」で説明しています
次の各項では、2つの記憶域タイプの詳細を説明します。
SecureFiles LOBはBasicFiles LOB記憶域とは異なり、自動セグメント領域管理(ASSM)で管理されている表領域にのみ作成できます。
SecureFiles LOB記憶域の設計はBasicFiles LOBと比較すると、よりパフォーマンスとスケーラビリティに優れており、従来のネットワーク・ファイルシステム以上のパフォーマンスを提供します。
SecureFiles LOB記憶域では、BasicFiles LOB記憶域オプションにはない圧縮、重複除外、暗号化の3つの機能をサポートしています。
CREATE TABLE文を使用して、圧縮、重複除外および暗号化を有効にしておくことをお薦めします。これらの機能をALTER TABLE文で有効にすると、表のすべてのSecureFiles LOBデータの読取り、変更および書込みが実行され、長時間に渡る可能性がある操作中にデータベースで表がロックされます。ただし、ALTER TABLE文には、この問題を回避するために役立つオンライン機能があります。
注意:
このような機能には、『Oracle Databaseライセンス情報』で説明されている特定のライセンス要件があります。
ここでは、次の項目について説明します。
拡張LOB圧縮では、ディスク領域を節約してパフォーマンスを改善するため、SecureFiles LOBデータを透過的に分析して圧縮します。
ライセンス要件: 拡張LOB圧縮を実装するには、Oracle Advanced Compressionオプションのライセンスが必要です。
拡張LOB重複除外は、LOB列またはパーティション内で重複するLOBデータをOracle Databaseで自動検出できるようにし、データのコピーを1つのみ格納することにより領域を節約できます。
ライセンス要件: 拡張LOB重複除外を実行するには、Oracle Advanced Compressionオプションのライセンスが必要です。
Oracle Streamsでは、重複除外されるSecureFiles LOBがサポートされないことにも注意してください。
CREATE TABLE文は、SecureFilesまたはBasicFiles LOB記憶域、あるいはその両方に固有のパラメータを使用してLOB記憶域と連携して機能します。
例4-1では、Backus Naur (BNF)表記法のCREATE TABLEの構文を示し、LOB固有パラメータは太字で表しています。パラメータの詳細とCREATE TABLE文については「CREATE TABLE LOB記憶域パラメータ」を参照し、完全な参照については『Oracle Database SQL言語リファレンス』を参照してください。
SHRINKオプションはSecureFiles LOBではサポートされていません。
例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
}
CREATE TABLE文では、LOB記憶域、特にBasicFiles LOBまたはSecureFiles LOBに関連するパラメータを使用します。
表4-1はLOB記憶域に関連するCREATE TABLE文のパラメータを示し、パラメータがBasicFiles LOBまたはSecureFiles LOB記憶域のどちらに固有のものかも示しています。
表4-1 LOBに関連するCREATE TABLE文のパラメータ
| パラメータ | 説明 |
|---|---|
BasicFiles LOB記憶域、LOBの元のアーキテクチャを示します。 互換性モードをOracle Database 11gに設定すると、完全な機能を実現するために Oracle Database 12c以降では、BasicFiles LOB記憶域タイプを使用するには、明示的にパラメータ 「初期化、互換性およびアップグレード」を参照してください。 BasicFiles LOBの場合、いずれかのSecureFiles LOBオプションを指定すると、エラーが発生します。 |
|
SecureFiles LOB記憶域を指定します。 Oracle Database 12c以降では、パラメータ |
|
BasicFiles LOBについては、LOBを格納する表を作成する場合にチャンク・サイズを指定します。
SecureFiles LOBについては、これは下位互換性を維持するために提供されるアドバイザ・サイズです。 |
|
指定した方法でLOBデータの旧バージョンをLOB列に格納するように設定します。 Oracle Database Release 12cでは、このパラメータ名で保存ポリシーが指定されます。
BasicFiles LOBで使用される |
|
LOBで使用可能な記憶域の上限を指定します。 上限に達した場合、時間要件にかかわらず、必要に応じて、旧バージョンのLOBデータ・ブロックのプールから新規のLOBデータ・ブロックが取得されます。 |
|
BasicFiles LOBの |
|
ロギング・オプションの指定:
SecureFiles LOBについては、次が適用されます。
「BasicFiles LOB用のLOGGING/NOLOGGINGパラメータ」および「読取り一貫性の保証」を参照してください。 パーティション化されていないオブジェクトでは、この句に指定された値はオブジェクトに関連付けられたセグメントの実際の物理属性です。 パーティション・オブジェクトの場合、この句に指定する値は、 注意: LOBセグメントでは、
データ保護、メディア障害、およびインスタンス障害の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 |
|
パーティション表で |
|
使用中のBasicFiles LOBデータ領域のうち、旧バージョンのLOBデータ・ページが占めることのできる割合を指定します。 リリース12cまでの互換モードでは、このパラメータはSecureFiles LOBの作成時に無視されます。 |
|
表または索引圧縮を設定しても、拡張LOB圧縮には影響しないことに注意してください。 |
|
|
|
|
CREATE TABLE文で使用するSecureFiles LOBの使用方法に関する注意と例に注意してください。
この項では、CREATE TABLE文で使用するSecureFiles LOBに固有の機能の使用方法に関する注意と例について説明します。
注意:
例で説明している句は、Backus Naur (BNF)表記法「例4-1」を参照しています。パラメータについては、「CREATE TABLE LOB記憶域パラメータ」で説明しています。
ここでは、次の項目について説明します。
特定の状況下では、拡張LOB圧縮とともにCREATE TABLE文を使用できます。
ここでは、次の項目について説明します。
CREATE TABLE文と拡張LOB圧縮を使用する場合は、次の点を考慮してください。
拡張LOB圧縮は、サーバー側で実行され、LOBデータへのランダムな読取りおよび書込みを可能にします。utl_compressなどのクライアント側の圧縮ユーティリティでは、ランダム・アクセスは得られません。
拡張LOB圧縮では、表または索引圧縮を有効にできません。逆に、表および索引圧縮でも拡張LOB圧縮を有効にできません。
LOW、MEDIUMおよび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ごとに圧縮を有効化および無効化できます。詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
次の例に、特定の圧縮シナリオで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および拡張LOB重複除外を使用する場合は、次のことを考慮してください。
同一のLOBがある場合、重複除外の対象となります。重複除外を使用可能にすることにより、コピー操作によるデータの重複を回避できます。
重複検出は、LOBセグメント内で発生します。パーティション化およびサブパーティション化されたLOB列の場合、パーティションまたはサブパーティションにまたがって重複を検出することはできません。
重複除外は、パーティション・レベルで指定できます。CREATE TABLE lob_storage_clauseを使用して、パーティションごとにパーティション化された表を指定できます。
DBMS_LOB.SETOPTIONSプロシージャを使用して、LOBごとに重複除外を有効化または無効化できます。
次の例に、特定の重複除外シナリオで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文では、SecureFiles暗号化を使用できます。
ここでは、次の項目について説明します。
CREATE TABLEおよびSecureFiles暗号化を使用する場合は、次のことを考慮してください
透過的データ暗号化(TDE)では、LOBデータ型の暗号化がサポートされます。
暗号化は、ブロック・レベルで実行されます。
encrypt_algorithmは、暗号化アルゴリズムの名前を示します。有効なアルゴリズムは、AES192(デフォルト)、3DES168、AES128およびAES256です。
列の暗号化キーは、(指定されている場合は)PASSWORDから導出されます。
LOB暗号化のデフォルトはSALTです。NO SALTはサポートされていません。
LOB列内のすべてのLOBが暗号化されます。
DECRYPTは、LOBをクリアテキストのままにします。
LOBは、TDEと同様に列ごとのみで暗号化されます。LOB列内のすべてのパーティションが暗号化されます。
キー管理により、暗号化または復号化が制御されます。
TDEは、従来のインポートおよびエクスポート・ユーティリティまたはトランスポータブル表領域ベースのエクスポートではサポートされていません。かわりに、暗号化された列には、データ・ポンプexpdbおよびimpdbユーティリティを使用してください。
関連項目:
ADMINISTER KEY MANAGEMENT文を使用してTDEキーストアを作成する方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください
次の例に、特定の暗号化シナリオで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
);
LOB記憶域は、ALTER TABLE文および特定のLOB関連パラメータを使用して変更できます。
ここでは、次の項目について説明します。
ALTER TABLEを使用して、LOB列の圧縮、重複除外または暗号化機能を有効にすることができます。
ALTER TABLE文はオンライン操作に対応しており(『Oracle Database SQL言語リファレンス』を参照)、Oracle DatabaseではSecureFiles LOB列でのパラレル操作がサポートされるため、この方法でリソースを有効に活用できます。
ALTER TABLEのかわりに、オンライン再定義を使用してこれらの機能を1つ以上有効にすることができます。ALTER TABLEと同じく、SecureFiles LOB列のオンライン再定義もパラレルで実行できます。オンライン再定義の詳細は「BasicFiles LOBからSecureFiles LOBへの列の移行」、DBMS_REDEFINITIONパッケージの詳細は『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
SHRINKオプションはSecureFiles LOBではサポートされていません。
このBackus Naur (BNF)表記法は、LOB固有のパラメータが太字で示された状態でALTER TABLEの構文を提供します。
パラメータの詳細とALTER TABLE文については「CREATE TABLE LOB記憶域パラメータ」を参照し、完全な参照については『Oracle Database SQL言語リファレンス』を参照してください。
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
} ...
LOB記憶域に関連するALTER TABLE文の特定のパラメータを使用する必要があります。
パラメータは、示されているとおり、BasicFiles LOBまたはSecureFiles LOB記憶域に固有のものです。
表4-2 LOBに関連するALTER TABLE文のパラメータ
| パラメータ | 説明 |
|---|---|
指定した方法でLOBデータの旧バージョンをLOB列に格納するように設定します。 |
|
拡張LOB圧縮を有効化または無効化します。LOBセグメント内のすべてのLOBが、この新規設定で変更されます。 |
|
拡張LOB重複除外を有効化または無効化します。
|
|
SecureFiles LOB暗号化を有効化または無効化します。LOBセグメント内のすべてのLOBを、この新規設定で変更します。LOBセグメントは、LOB暗号化を有効化または無効化する目的でのみ変更可能です。つまり、 |
SecureFiles LOBに固有の特定の機能は、ALTER TABLE文と連携して機能します。
これらのSecureFiles LOB機能は、使用上の注意や例で説明されているように、ALTER TABLEと連携して機能します。
注意:
例で説明している句は、Backus Naur (BNF)表記法「ALTER TABLE文のBNF」を参照しています。
パラメータについては、「ALTER TABLE LOB記憶域パラメータ」で説明しています。
ここでは、次の項目について説明します。
ALTER TABLEおよび拡張LOB圧縮を使用する場合は、次のことを考慮してください。
この構文は、LOB列の圧縮モードを変更します。
DBMS_LOB.SETOPTIONSプロシージャを使用して、LOBごとに圧縮を有効化または無効化できます。
圧縮は、表レベルまたはパーティション・レベルのいずれかで指定できます。
LOW、MEDIUMおよびHIGHオプションでは、異なる圧縮レベルを使用できます。圧縮度が高くなればなるほど、待機時間が長くなります。HIGH設定ではより多くの作業が発生しますが、データの圧縮が向上します。デフォルトは、MEDIUMです。「拡張LOB圧縮を使用したCREATE TABLE」を参照してください。
次の例に、特定の圧縮シナリオでALTER TABLE文を発行する方法を示します。
例4-15 SecureFiles LOB列の変更によるLOW圧縮の有効化
ALTER TABLE t1 MODIFY
LOB(a) (
COMPRESS LOW
);
例4-16 SecureFiles LOB列の変更による圧縮の無効化
ALTER TABLE t1 MODIFY
LOB(a) (
NOCOMPRESS
);
例4-17 SecureFiles LOB列の変更によるHIGH圧縮の有効化
ALTER TABLE t1 MODIFY
LOB(a) (
COMPRESS HIGH
);
例4-18 SecureFiles LOB列の変更による1つのパーティションでの圧縮の有効化
ALTER TABLE t1 MODIFY PARTITION p1
LOB(a) (
COMPRESS HIGH
);
ALTER TABLEおよび拡張LOB重複除外を使用する場合は、次のことを考慮してください。
ALTER TABLE構文は、LOBレベルの重複除外を有効化または無効化できます。
この構文は、LOB列の重複除外モードを変更します。
DBMS_LOB.SETOPTIONSプロシージャを使用して、LOBごとに重複除外を有効化または無効化できます。
重複除外は、表レベルまたはパーティション・レベルで指定できます。複数のパーティション化されたLOBにまたがって重複除外を実行することはできません。
次の例に、特定の重複除外シナリオでALTER TABLE文を発行する方法を示します。
例4-19 SecureFiles LOB列の変更による重複除外の無効化
ALTER TABLE t1 MODIFY
LOB(a) (
KEEP_DUPLICATES
);
例4-20 SecureFiles LOB列の変更による重複除外の有効化
ALTER TABLE t1 MODIFY
LOB(a) (
DEDUPLICATE
);
例4-21 SecureFiles LOB列の変更による1つのパーティションでの重複除外の有効化
ALTER TABLE t1 MODIFY PARTITION p1
LOB(a) (
DEDUPLICATE
);
SecureFiles暗号化は、ALTER TABLE文と連携して機能します。
ここでは、次の項目について説明します。
ALTER TABLEおよびSecureFiles暗号化を使用する場合は、次のことを考慮してください。
ALTER TABLEでは、SecureFiles暗号化を有効化および無効化できます。この構文では、新しいキーまたはアルゴリズムを使用してLOB列に再度キーを付けることもできます。
ENCRYPTおよびDECRYPTオプションは、指定したSecureFiles LOB列内のすべてのLOBの暗号化を有効化または無効化します。
LOB暗号化のデフォルトはSALTです。NO SALTはサポートされていません。
DECRYPTオプションは、暗号化された列をクリアテキストの形式に変換します。
キー管理により、暗号化または復号化が制御されます。
LOBは、列ごとのみで暗号化されます。パーティション化されたLOBは、すべてのパーティションが暗号化されるか暗号化されないかのいずれかです。
次の例に、特定の暗号化シナリオでALTER TABLE文を発行する方法を示します。
例4-22 特定のアルゴリズムに基づいた暗号化によるSecureFiles LOB列の変更
3DES168を使用して、LOBの暗号化を有効化します。
ALTER TABLE t1 MODIFY
( a CLOB ENCRYPT USING '3DES168');
これは、3DES168を使用してLOBの暗号化を有効化する別の例です。
ALTER TABLE t1 MODIFY LOB(a)
(ENCRYPT USING '3DES168');
例4-23 パスワード・キーに基づいた暗号化によるSecureFiles LOB列の変更
SecureFiles LOB列の暗号化を有効化し、パスワードを使用して暗号化キーを作成します。
ALTER TABLE t1 MODIFY
( a CLOB ENCRYPT IDENTIFIED BY foo);
例4-24 暗号化に再度キーを付けることによるSecureFiles LOB列の変更
新しいキーを使用してLOB列を再暗号化するには、表に再度キーを付けます。
ALTER TABLE t1 REKEY USING '3DES168';
このドキュメントで説明されているすべての機能は、互換性を11.2.0.0.0以上に設定した場合に有効になります。11.2.0.0.0に設定した後は、ダウングレードはできません。
BasicFiles LOBをSecureFiles LOBにアップグレードする場合、データのアップグレードに通常使用される一般的な方法(CTAS/ITAS、オンライン再定義、エクスポート/インポート、列間でのコピー、またはビューおよび新規列の使用など)を使用する必要があります。これらのソリューションの多くは、入力LOB列のデータで使用されるディスク領域を2回使用する必要があります。ただし、パーティション化して、これらの操作をパーティションごとに実行することにより、必要なディスク領域を減らすことができます。
データベース管理者としては、DB_SECUREFILE初期化パラメータを使用して、COMPATIBILITYパラメータによってデフォルトで設定される初期設定を変更できます。
初期設定を変更することにより、SecureFiles LOBまたはBasicFiles LOBが作成または許可される状況を変更します。DB_SECUREFILEパラメータは通常、init.oraファイルで設定されます。「互換性およびアップグレード」を参照してください。
関連項目:
『Oracle Databaseリファレンス』
DB_SECUREFILE初期化パラメータは動的であり、ALTER SYSTEM文を使用して変更できます。例4-25に、パラメータ値を変更するフォーマットを示します。
DB_SECUREFILEの有効値は次のとおりです。
NEVERでは、SecureFiles LOBが作成されません。NEVERが指定された場合、SecureFiles LOBとして指定されたLOBはすべて、BasicFiles LOBとして作成されます。記憶域オプションが指定されていない場合、BasicFiles LOBのデフォルト値が使用されます。すべてのSecureFiles LOB特定の記憶域オプションおよび機能(圧縮、暗号化、重複除外など)で例外が発生します。
IGNOREでは、SecureFiles LOBは許可されず、BasicFiles LOBをSecureFiles LOBオプションで強制実行する原因となるエラーは無視されます。IGNOREが指定された場合、SECUREFILEキーワードおよびすべてのSecureFiles LOBオプションは無視されます。
PERMITTEDでは、ユーザーが指定していれば、SecureFiles LOBの作成が許可されます。それ以外の場合は、BasicFiles LOBが作成されます。
PERFERREDでは、BasicFiles LOBがLOBまたは親LOB (LOBがパーティションまたはサブパーティション内にある場合)で明示的に指定されていなければ、SecureFiles LOBの作成が試行されます。PREFERREDは、Oracle Database 12c以降のデフォルト値です。
ALWAYSでは、SecureFiles LOBを作成しようとしますが、SECUREFILEパラメータが明示的に指定されていないかぎり、ASSM表領域にないLOBをBasicFiles LOBとして作成します。指定されるBasicFiles LOB記憶域オプションはいずれも無視され、指定されていないすべての記憶域オプションには、SecureFiles LOBのデフォルト値が使用されます。
FORCEでは、ユーザーがBASICFILEを指定しても、すべてのLOBをSecureFiles LOBとして作成しようとします。このオプションはお薦めしません。かわりにPREFERREDまたはALWAYSを使用する必要があります。
例4-25 ALTER SYSTEMによるDB_SECUREFILEパラメータの設定
ALTER SYSTEM SET DB_SECUREFILE = 'ALWAYS';
複数の方法を使用してLOB列を移行できます。
ここでは、次の項目について説明します。
BasicFiles LOB列を移行するとREDOデータが生成され、パフォーマンス障害の原因となる場合があります。
移行処理中の表に対するREDOがログに記録されるのは、CREATE TABLE文にLOGGING句が設定されている場合のみです。
BasicFiles LOBからSecureFiles LOBへ変換中の列に対するREDOがログに記録されるのは、SecureFiles LOB列の記憶域設定がLOGGINGの場合のみです。LOB列のロギング設定(LOGGINGまたはNOLOGGING)は、LOBが作成された表領域から継承されます。
SecureFiles LOBへの移行中のREDO領域の生成は防止できます。
任意の新しいSecureFiles LOB列に対してNOLOGGING記憶域パラメータを指定します。
移行の完了後に、LOGGINGをオンにすることができます。
BasicFiles LOBからSecureFiles LOBへの移行では、メソッドとしてオンライン再定義をお薦めします。
オンライン再定義は表またはパーティション・レベルで実行できます。
オンライン再定義のメリット
表またはパーティションをオフラインにする必要がない。
パラレルで実行可能。
オンライン再定義のデメリット
必要な表またはパーティション全体、およびすべてのLOBセグメントに等しい追加の記憶域が必要
グローバル索引の再作成が必要。
オンライン再定義を使用して表を移行できます。
オンライン再定義には表をオフラインにする必要がないメリットがありますが、表で使用している領域に等しいか、それよりも大きな追加の空き領域が必要です。例4-26に、オンライン再定義を使用して表を移行する方法を示します。
例4-26 オンライン再定義の例
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
// ALTER SESSION FORCE parallel dml;
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;
パラレル実行に十分なリソースがある場合は、SecureFiles LOB列の再定義をパラレルに実行できます。
オンライン再定義のパラレル実行を設定するには、ALTER SESSIONを実行します。
例4-26の最後のセクションにあるCONNECT文の後ろに次の文を追加します。
ALTER SESSION FORCE PARALLEL DML;
BasicFiles LOBおよびSecureFiles LOBとともに使用できるPL/SQLパッケージがあります。
SecureFiles LOBおよびDBFSに対応するために行われた変更は強調されています。
ここでは、次の項目について説明します。
DBMS_LOBパッケージでは、LOBの一部または完全なLOBを稼働、アクセスおよび操作するためのサブプログラムを提供しています。
DBMS_LOBパッケージはSecureFiles LOBとBasicFiles LOBのどちらにも適用されます。このパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_LOBパッケージを参照してください。
「データベース・ファイルシステムの概要」で紹介されている、SecureFiles LOBとデータベース・ファイルシステム(DBFS)の追加によってDBMS_LOB定数およびサブプログラムに対して行われる変更の詳細は、「SecureFiles LOBおよびDBFSで使用するDBMS_LOB定数」および「SecureFiles LOBおよびDBFSで使用されるDBMS_LOBサブプログラム」を参照してください。
特定の定数はDBFSリンク・インタフェースをサポートしています。
表4-3は、DBFSリンクのインタフェースをサポートする定数を示しています。PL/SQL DBMS_LOBパッケージで使用される定数の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
表4-3 DBFSリンク・インタフェースをサポートするDBMS_LOB定数
| 定数 | 説明 |
|---|---|
DBFS_LINK_NEVER |
DBFSリンクの状態値 |
DBFS_LINK_YES |
DBFSリンクの状態値 |
DBFS_LINK_NO |
DBFSリンクの状態値 |
DBFS_LINK_CACHE |
|
DBFS_LINK_NOCACHE |
|
DBFS_LINK_PATH_MAX_SIZE |
DBFSパラメータの最大長( |
CONTENTTYPE_MAX_SIZE |
コンテンツ・タイプの最大1バイトのASCII文字( |
DBMS_LOBサブプログラムには一定期間にわたっていくつかの変更が加えられていることに注意してください。
表4-4は、PL/SQLパッケージDBMS_LOBサブプログラムに加えられた変更をまとめたものです。
Oracle Database 11gリリース2より前から存在している一部のDBMS_LOB操作では、LOBがDBFSリンクの場合に例外エラーが発生することに注意してください。この問題を解決するには、アプリケーションでコールする前に、DBMS_LOB.COPY_FROM_LINKプロシージャをコールしてDBFSリンクをLOBと明示的に置換し、アプリケーションを変更します。コールが完了すると、必要に応じてDBMS_LOB.MOVE_TO_DBFS_LINKプロシージャにより、更新されたLOBがDBFSに戻されます。
Oracle Database 11gリリース2より前から存在しているその他のDBMS_LOB操作は、ストリーミングをサポートするファイルシステムにDBFSリンクが存在する場合に、透過的に動作します。ストリーミングがサポートされていないか無効の場合、これらの操作は失敗することに注意してください。
表4-4 DBMS_LOBのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
ソースLOBのコンテンツを宛先LOBに追加します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
2つのLOBの全体または一部を比較します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
ソースLOBの全体または一部を宛先LOBにコピーします。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
既存のDBFSを新しいLOBにコピーします。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
指定したLOBデータをDBFS HSMストアからデータベースにコピーします。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
DBFSリンクを作成するための一意のファイル・パス名を戻します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBの全体または一部を消去します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBの指定したフラグメントを削除します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
データのフラグメントをLOBに挿入します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBのフラグメントをLOB内の場所間で移動します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBのフラグメントを新しいデータで置き換えます。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBのDBFSパス名を戻します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBのリンクの状態を戻します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBデータのコンテンツ・タイプ文字列を取得します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
特定のLOBの設定済のオプションを取得します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 対応するOCI LOB関数 |
|
LOBがSecureFiles LOBかどうかを判別します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
指定したLOBデータをデータベースからDBFS HSMストアに移動します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBからデータを読み取ります。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBとDBFSパス名を関連付けます。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBデータのコンテンツ・タイプ文字列を戻します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
特定のLOBで新しいオプションを設定します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 対応するOCI LOB関数 |
|
LOBのフラグメントを戻します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
指定した長さまでLOBを切り捨てます。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
LOBにデータを書き込みます。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |
|
データをLOBの終わりに追加します。 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。 |