3 Oracle LOB記憶域の使用
Oracle LOB記憶域にはSecureFiles LOB記憶域とBasicFiles LOB記憶域という2つのタイプがあり、これらは様々なタイプの表領域とともに使用されます。
LOB列型が含まれる表を設計、作成および変更します。
内容は次のとおりです。
3.1 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つの記憶域タイプの詳細を説明します。
3.1.2 SecureFiles LOB記憶域
SecureFiles LOBはBasicFiles LOB記憶域とは異なり、自動セグメント領域管理(ASSM)で管理されている表領域にのみ作成できます。
SecureFiles LOB記憶域の設計はBasicFiles LOBと比較すると、よりパフォーマンスとスケーラビリティに優れており、従来のネットワーク・ファイルシステム以上のパフォーマンスを提供します。
SecureFiles LOB記憶域では、BasicFiles LOB記憶域オプションにはない圧縮、重複除外、暗号化の3つの機能をサポートしています。
CREATE TABLE
文を使用して、圧縮、重複除外および暗号化を有効にしておくことをお薦めします。これらの機能をALTER TABLE
文で有効にすると、表のすべてのSecureFiles LOBデータの読取り、変更および書込みが実行され、長時間に渡る可能性がある操作中にデータベースで表がロックされます。ただし、ALTER
TABLE
文には、この問題を回避するために役立つオンライン機能があります。
内容は次のとおりです。
3.1.2.1 拡張LOB圧縮について
拡張LOB圧縮では、ディスク領域を節約してパフォーマンスを改善するため、SecureFiles LOBデータを透過的に分析して圧縮します。
ライセンス要件: 拡張LOB圧縮を実装するには、Oracle Advanced Compressionオプションのライセンスが必要です。
3.1.2.2 拡張LOB重複除外について
拡張LOB重複除外は、LOB列またはパーティション内で重複するLOBデータをOracle Databaseで自動検出できるようにし、データのコピーを1つのみ格納することにより領域を節約できます。
ライセンス要件: 拡張LOB重複除外を実行するには、Oracle Advanced Compressionオプションのライセンスが必要です。
Oracle Streamsでは、重複除外されるSecureFiles LOBがサポートされないことにも注意してください。
3.2 LOB記憶域でのCREATE TABLE
CREATE
TABLE
文は、SecureFilesまたはBasicFiles LOB記憶域、あるいはその両方に固有のパラメータを使用してLOB記憶域と連携して機能します。
例3-1では、Backus Naur (BNF)表記法のCREATE
TABLE
の構文を示し、LOB固有パラメータは太字で表しています。
SHRINK
オプションはSecureFiles LOBではサポートされていません。
関連項目:
-
パラメータの説明と
CREATE TABLE
文の詳細は、「CREATE TABLE LOB記憶域パラメータ」を参照してください
例3-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
}
3.2.1 CREATE TABLE LOB記憶域パラメータ
CREATE TABLE
文では、LOB記憶域、特にBasicFiles LOBまたはSecureFiles LOBに関連するパラメータを使用します。
表3-1はLOB記憶域に関連するCREATE TABLE
文のパラメータを示し、パラメータがBasicFiles LOBまたはSecureFiles LOB記憶域のどちらに固有のものかも示しています。
表3-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については、次が適用されます。
パーティション化されていないオブジェクトでは、この句に指定された値はオブジェクトに関連付けられたセグメントの実際の物理属性です。 パーティション・オブジェクトの場合、この句に指定する値は、 注意: LOBセグメントでは、
関連項目:
|
|
パーティション表で |
|
使用中のBasicFiles LOBデータ領域のうち、旧バージョンのLOBデータ・ページが占めることのできる割合を指定します。 リリース12cまでの互換モードでは、このパラメータはSecureFiles LOBの作成時に無視されます。 |
|
表または索引圧縮を設定しても、拡張LOB圧縮には影響しないことに注意してください。 |
|
|
|
|
3.2.2 CREATE TABLEおよびSecureFiles LOBの機能
CREATE
TABLE
文で使用するSecureFiles LOBの使用上のノートと例に注意してください。
この項では、CREATE
TABLE
文で使用するSecureFiles LOBに固有の機能の使用上のノートと例について説明します。
ノート:
例で説明している句は、Backus Naur (BNF)表記法「例3-1」を参照しています。
関連項目:
パラメータの詳細は、「CREATE TABLE LOB記憶域パラメータ」を参照してください
内容は次のとおりです。
3.2.2.1 拡張LOB圧縮を使用したCREATE TABLE
3.2.2.1.1 拡張LOB圧縮での使用上のノート
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ごとに圧縮を有効化および無効化できます。
関連項目:
DBMS_LOB.SETOPTIONS
プロシージャの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください
3.2.2.1.2 CREATE TABLEおよび拡張LOB圧縮の例
次の例に、特定の圧縮シナリオでCREATE TABLE
文を発行する方法を示します。
例3-2 LOW圧縮を使用したSecureFiles LOB列の作成
CREATE TABLE t1 (a CLOB) LOB(a) STORE AS SECUREFILE( COMPRESS LOW CACHE NOLOGGING );
例3-3 MEDIUM (デフォルト)圧縮を使用したSecureFiles LOB列の作成
CREATE TABLE t1 ( a CLOB) LOB(a) STORE AS SECUREFILE ( COMPRESS CACHE NOLOGGING );
例3-4 HIGH圧縮を使用したSecureFiles LOB列の作成
CREATE TABLE t1 ( a CLOB) LOB(a) STORE AS SECUREFILE ( COMPRESS HIGH CACHE );
例3-5 無効化された圧縮を使用したSecureFiles LOB列の作成
CREATE TABLE t1 ( a CLOB) LOB(a) STORE AS SECUREFILE ( NOCOMPRESS CACHE );
例3-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) );
3.2.2.2 拡張LOB重複除外を使用したCREATE TABLE
3.2.2.2.1 拡張LOB重複除外での使用上のノート
CREATE
TABLE
および拡張LOB重複除外を使用する場合は、次のことを考慮してください。
-
同一のLOBがある場合、重複除外の対象となります。重複除外を使用可能にすることにより、コピー操作によるデータの重複を回避できます。
-
重複検出は、LOBセグメント内で発生します。パーティション化およびサブパーティション化されたLOB列の場合、パーティションまたはサブパーティションにまたがって重複を検出することはできません。
-
重複除外は、パーティション・レベルで指定できます。
CREATE
TABLE
lob_storage_clause
を使用して、パーティションごとにパーティション化された表を指定できます。 -
DBMS_LOB.SETOPTIONS
プロシージャを使用して、LOBごとに重複除外を有効化または無効化できます。
3.2.2.2.2 CREATE TABLEおよび拡張LOB重複除外の例
次の例に、特定の重複除外シナリオでCREATE TABLE
文を発行する方法を示します。
例3-7 重複除外を使用したSecureFiles LOB列の作成
CREATE TABLE t1 ( a CLOB) LOB(a) STORE AS SECUREFILE ( DEDUPLICATE CACHE );
例3-8 無効化された重複除外を使用したSecureFiles LOB列の作成
CREATE TABLE t1 ( a CLOB) LOB(a) STORE AS SECUREFILE ( KEEP_DUPLICATES CACHE );
例3-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) );
例3-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) );
3.2.2.3 SecureFiles暗号化を使用したCREATE TABLE
CREATE TABLE
文では、SecureFiles暗号化を使用できます。
内容は次のとおりです。
3.2.2.3.1 SecureFiles暗号化での使用上のノート
CREATE
TABLE
およびSecureFiles暗号化を使用する場合は、次のことを考慮してください
-
透過的データ暗号化(TDE)では、LOBデータ型の暗号化がサポートされます。
-
暗号化は、ブロック・レベルで実行されます。
-
encrypt_algorithm
は、暗号化アルゴリズムの名前を示します。有効なアルゴリズムは、AES192
(デフォルト)、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ガイド』を参照してください
3.2.2.3.2 CREATE TABLEおよびSecureFiles暗号化の例
次の例に、特定の暗号化シナリオでCREATE TABLE
文を発行する方法を示します。
例3-11 特定の暗号化アルゴリズムを使用したSecureFiles LOB列の作成
CREATE TABLE t1 ( a CLOB ENCRYPT USING 'AES128') LOB(a) STORE AS SECUREFILE ( CACHE );
例3-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) );
例3-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 );
例3-14 無効化された暗号化を使用したSecureFiles LOB列の作成
CREATE TABLE t1 ( a CLOB ) LOB(a) STORE AS SECUREFILE ( CACHE DECRYPT );
3.3 LOB記憶域でのALTER TABLE
LOB記憶域は、ALTER
TABLE
文および特定のLOB関連パラメータを使用して変更できます。
内容は次のとおりです。
3.3.1 ALTER TABLEおよびLOB記憶域について
ALTER
TABLE
を使用して、LOB列の圧縮、重複除外または暗号化機能を有効にすることができます。
ALTER
TABLE
文はオンライン操作に対応しており、Oracle DatabaseではSecureFiles LOB列でのパラレル操作がサポートされるため、この方法でリソースを有効に活用できます。
ALTER
TABLE
のかわりに、オンライン再定義を使用してこれらの機能を1つ以上有効にすることができます。ALTER
TABLE
と同じく、SecureFiles LOB列のオンライン再定義もパラレルで実行できます。
SHRINK
オプションはSecureFiles LOBではサポートされていません。
関連項目:
-
ALTER
TABLE
文の詳細は、Oracle Database SQL言語リファレンスを参照してください -
オンライン再定義の詳細は、「BasicFiles LOBからSecureFiles LOBへの列の移行」を参照してください
-
DBMS_REDEFINITION
パッケージの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください
3.3.2 ALTER TABLE文のBNF
このBackus Naur (BNF)表記法は、LOB固有のパラメータが太字で示された状態でALTER
TABLE
の構文を提供します。
関連項目:
-
パラメータの説明は、「CREATE TABLE LOB記憶域パラメータ」を参照してください
-
ALTER TABLE
文の詳細は、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
} ...
3.3.3 ALTER TABLE LOB記憶域パラメータ
LOB記憶域に関連するALTER TABLE
文の特定のパラメータを使用する必要があります。
パラメータは、示されているとおり、BasicFiles LOBまたはSecureFiles LOB記憶域に固有のものです。
表3-2 LOBに関連するALTER TABLE文のパラメータ
パラメータ | 説明 |
---|---|
指定した方法でLOBデータの旧バージョンをLOB列に格納するように設定します。 |
|
拡張LOB圧縮を有効化または無効化します。LOBセグメント内のすべてのLOBが、この新規設定で変更されます。 |
|
拡張LOB重複除外を有効化または無効化します。
|
|
SecureFiles LOB暗号化を有効化または無効化します。LOBセグメント内のすべてのLOBを、この新規設定で変更します。LOBセグメントは、LOB暗号化を有効化または無効化する目的でのみ変更可能です。つまり、 |
3.3.4 ALTER TABLE SecureFiles LOB機能
SecureFiles LOBに固有の特定の機能は、ALTER
TABLE
文と連携して機能します。
これらのSecureFiles LOB機能は、使用上のノートや例で説明されているように、ALTER
TABLE
と連携して機能します。
ノート:
例で説明している句は、Backus Naur (BNF)表記法「ALTER TABLE文のBNF」を参照しています。
パラメータについては、「ALTER TABLE LOB記憶域パラメータ」で説明しています。
内容は次のとおりです。
3.3.4.1 拡張LOB圧縮を使用したALTER TABLE
3.3.4.1.1 拡張LOB圧縮での使用上のノート
ALTER
TABLE
および拡張LOB圧縮を使用する場合は、次のことを考慮してください。
-
この構文は、LOB列の圧縮モードを変更します。
-
DBMS_LOB.SETOPTIONS
プロシージャを使用して、LOBごとに圧縮を有効化または無効化できます。 -
圧縮は、表レベルまたはパーティション・レベルのいずれかで指定できます。
-
LOW
、MEDIUM
およびHIGH
オプションでは、異なる圧縮レベルを使用できます。圧縮率が高くなれば、発生する待機時間も長くなります。HIGH
設定ではより多くの作業が発生しますが、データの圧縮が向上します。デフォルトは、MEDIUM
です。
関連項目:
3.3.4.1.2 ALTER TABLEおよび拡張LOB圧縮の例
次の例に、特定の圧縮シナリオでALTER TABLE
文を発行する方法を示します。
例3-15 SecureFiles LOB列の変更によるLOW圧縮の有効化
ALTER TABLE t1 MODIFY LOB(a) ( COMPRESS LOW );
例3-16 SecureFiles LOB列の変更による圧縮の無効化
ALTER TABLE t1 MODIFY LOB(a) ( NOCOMPRESS );
例3-17 SecureFiles LOB列の変更によるHIGH圧縮の有効化
ALTER TABLE t1 MODIFY LOB(a) ( COMPRESS HIGH );
例3-18 SecureFiles LOB列の変更による1つのパーティションでの圧縮の有効化
ALTER TABLE t1 MODIFY PARTITION p1 LOB(a) ( COMPRESS HIGH );
3.3.4.2 拡張LOB重複除外を使用したALTER TABLE
3.3.4.2.1 拡張LOB重複除外での使用上のノート
ALTER
TABLE
および拡張LOB重複除外を使用する場合は、次のことを考慮してください。
-
ALTER
TABLE
構文は、LOBレベルの重複除外を有効化または無効化できます。 -
この構文は、LOB列の重複除外モードを変更します。
-
DBMS_LOB.SETOPTIONS
プロシージャを使用して、LOBごとに重複除外を有効化または無効化できます。 -
重複除外は、表レベルまたはパーティション・レベルで指定できます。複数のパーティション化されたLOBにまたがって重複除外を実行することはできません。
3.3.4.2.2 ALTER TABLEおよび拡張LOB重複除外の例
次の例に、特定の重複除外シナリオでALTER TABLE
文を発行する方法を示します。
例3-19 SecureFiles LOB列の変更による重複除外の無効化
ALTER TABLE t1 MODIFY LOB(a) ( KEEP_DUPLICATES );
例3-20 SecureFiles LOB列の変更による重複除外の有効化
ALTER TABLE t1 MODIFY LOB(a) ( DEDUPLICATE );
例3-21 SecureFiles LOB列の変更による1つのパーティションでの重複除外の有効化
ALTER TABLE t1 MODIFY PARTITION p1 LOB(a) ( DEDUPLICATE );
3.3.4.3 SecureFiles暗号化を使用したALTER TABLE
SecureFiles暗号化は、ALTER TABLE
文と連携して機能します。
内容は次のとおりです。
3.3.4.3.1 SecureFiles暗号化での使用上のノート
ALTER
TABLE
およびSecureFiles暗号化を使用する場合は、次のことを考慮してください。
-
ALTER
TABLE
では、SecureFiles暗号化を有効化および無効化できます。この構文では、新しいキーまたはアルゴリズムを使用してLOB列に再度キーを付けることもできます。 -
ENCRYPT
およびDECRYPT
オプションは、指定したSecureFiles LOB列内のすべてのLOBの暗号化を有効化または無効化します。 -
LOB暗号化のデフォルトは
SALT
です。NO
SALT
はサポートされていません。 -
DECRYPT
オプションは、暗号化された列をクリアテキストの形式に変換します。 -
キー管理により、暗号化または復号化が制御されます。
-
LOBは、列ごとのみで暗号化されます。パーティション化されたLOBは、すべてのパーティションが暗号化されるか暗号化されないかのいずれかです。
3.3.4.3.2 ALTER TABLEおよびSecureFiles暗号化の例
次の例に、特定の暗号化シナリオでALTER TABLE
文を発行する方法を示します。
例3-22 特定のアルゴリズムに基づいた暗号化によるSecureFiles LOB列の変更
AES256
を使用して、LOBの暗号化を有効化します。
ALTER TABLE t1 MODIFY ( a CLOB ENCRYPT USING 'AES256');
これは、AES256
を使用してLOBの暗号化を有効化する別の例です。
ALTER TABLE t1 MODIFY LOB(a) (ENCRYPT USING 'AES256');
例3-23 パスワード・キーに基づいた暗号化によるSecureFiles LOB列の変更
SecureFiles LOB列の暗号化を有効化し、パスワードを使用して暗号化キーを作成します。
ALTER TABLE t1 MODIFY ( a CLOB ENCRYPT IDENTIFIED BY foo);
例3-24 暗号化に再度キーを付けることによるSecureFiles LOB列の変更
新しいキーを使用してLOB列を再暗号化するには、表に再度キーを付けます。
ALTER TABLE t1 REKEY USING 'AES256';
3.4 初期化、互換性およびアップグレード
3.4.1 互換性およびアップグレード
このドキュメントで説明されているすべての機能は、互換性を11.2.0.0.0
以上に設定した場合に有効になります。11.2.0.0.0
に設定した後は、ダウングレードはできません。
BasicFiles LOBをSecureFiles LOBにアップグレードする場合、データのアップグレードに通常使用される一般的な方法(CTAS/ITAS、オンライン再定義、エクスポート/インポート、列間でのコピー、またはビューおよび新規列の使用など)を使用する必要があります。これらのソリューションの多くは、入力LOB列のデータで使用されるディスク領域を2回使用する必要があります。ただし、パーティション化して、これらの操作をパーティションごとに実行することにより、必要なディスク領域を減らすことができます。
3.4.2 SecureFiles LOB用の初期化パラメータ
データベース管理者としては、DB_SECUREFILE
初期化パラメータを使用して、COMPATIBILITY
パラメータによってデフォルトで設定される初期設定を変更できます。
初期設定を変更することにより、SecureFiles LOBまたはBasicFiles LOBが作成または許可される状況を変更します。DB_SECUREFILE
パラメータは通常、init.ora
ファイルで設定されます。
DB_SECUREFILE
初期化パラメータは動的であり、ALTER
SYSTEM
文を使用して変更できます。例3-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
を使用する必要があります。
例3-25 ALTER SYSTEMによるDB_SECUREFILEパラメータの設定
ALTER SYSTEM SET DB_SECUREFILE
= 'ALWAYS';
3.5 BasicFiles LOBからSecureFiles LOBへの列の移行
複数の方法を使用してLOB列を移行できます。
内容は次のとおりです。
3.5.1 SecureFiles LOBへの移行時のREDOデータの生成防止
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
をオンにすることができます。
3.5.2 BasicFiles LOBのためのオンライン再定義
BasicFiles LOBからSecureFiles LOBへの移行では、メソッドとしてオンライン再定義をお薦めします。
オンライン再定義は表またはパーティション・レベルで実行できます。
オンライン再定義のメリット
-
表またはパーティションをオフラインにする必要がない。
-
パラレルで実行可能。
オンライン再定義のデメリット
-
必要な表またはパーティション全体、およびすべてのLOBセグメントに等しい追加の記憶域が必要
-
グローバル索引の再作成が必要。
3.5.3 BasicFiles LOBを含む表の移行時のオンライン再定義の例
オンライン再定義を使用して表を移行できます。
オンライン再定義には表をオフラインにする必要がないメリットがありますが、表で使用している領域に等しいか、それよりも大きな追加の空き領域が必要です。例3-26に、オンライン再定義を使用して表を移行する方法を示します。
例3-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;
3.5.4 SecureFiles LOBのパラレル再定義
パラレル実行に十分なリソースがある場合は、SecureFiles LOB列の再定義をパラレルに実行できます。
オンライン再定義のパラレル実行を設定するには、ALTER SESSION
を実行します。
-
例3-26の最後のセクションにあるCONNECT文の後ろに次の文を追加します。
ALTER SESSION FORCE PARALLEL DML;
3.6 LOBおよびDBFS用のPL/SQLパッケージ
BasicFiles LOBおよびSecureFiles LOBとともに使用できるPL/SQLパッケージがあります。
SecureFiles LOBおよびDBFSに対応するために行われた変更は強調されています。
内容は次のとおりです。
3.6.1 SecureFiles LOBおよびDBFSで使用するDBMS_LOBパッケージ
DBMS_LOB
パッケージでは、LOBの一部または完全なLOBを稼働、アクセスおよび操作するためのサブプログラムを提供しています。
DBMS_LOB
パッケージはSecureFiles LOBとBasicFiles LOBのどちらにも適用されます。
SecureFiles LOBとデータベース・ファイルシステム(DBFS)の追加によってDBMS_LOB
定数およびサブプログラムに対して行われる変更の詳細は、「SecureFiles LOBおよびDBFSで使用するDBMS_LOB定数」および「SecureFiles LOBおよびDBFSで使用されるDBMS_LOBサブプログラム」を参照してください。
関連項目:
-
DBMS_LOB
パッケージの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください
3.6.2 SecureFiles LOBおよびDBFSで使用するDBMS_LOB定数
特定の定数はDBFSリンク・インタフェースをサポートしています。
表3-3は、DBFSリンクのインタフェースをサポートする定数を示しています。
関連項目:
PL/SQL DBMS_LOB
パッケージで使用される定数の詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください
表3-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文字( |
3.6.3 SecureFiles LOBおよびDBFSで使用されるDBMS_LOBサブプログラム
DBMS_LOB
サブプログラムには一定期間にわたっていくつかの変更が加えられていることに注意してください。
表3-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リンクが存在する場合に、透過的に動作します。ストリーミングがサポートされていないか無効の場合、これらの操作は失敗することに注意してください。
表3-4 DBMS_LOBのサブプログラム
サブプログラム | 説明 |
---|---|
|
ソースLOBのコンテンツを宛先LOBに追加します。 |
|
2つのLOBの全体または一部を比較します。 |
|
|
|
|
|
ソースLOBの全体または一部を宛先LOBにコピーします。 |
|
既存のDBFSを新しいLOBにコピーします。 |
|
指定したLOBデータをDBFS HSMストアからデータベースにコピーします。 |
|
DBFSリンクを作成するための一意のファイル・パス名を戻します。 |
|
LOBの全体または一部を消去します。 |
|
LOBの指定したフラグメントを削除します。 |
|
データのフラグメントをLOBに挿入します。 |
|
LOBのフラグメントをLOB内の場所間で移動します。 |
|
LOBのフラグメントを新しいデータで置き換えます。 |
|
LOBのDBFSパス名を戻します。 |
|
LOBのリンクの状態を戻します。 |
|
LOBデータのコンテンツ・タイプ文字列を取得します。 |
|
特定のLOBの設定済のオプションを取得します。 関連項目:
|
|
LOBがSecureFiles LOBかどうかを判別します。 |
|
|
|
|
|
|
|
指定したLOBデータをデータベースからDBFS HSMストアに移動します。 |
|
LOBからデータを読み取ります。 |
|
LOBとDBFSパス名を関連付けます。 |
|
LOBデータのコンテンツ・タイプ文字列を戻します。 |
|
特定のLOBで新しいオプションを設定します。 関連項目:
|
|
LOBのフラグメントを戻します。 |
|
指定した長さまでLOBを切り捨てます。 |
|
LOBにデータを書き込みます。 |
|
データをLOBの終わりに追加します。 |