用途
logging_clauseを使用すると、特定のDML操作をREDOログ・ファイルに記録するか(LOGGING)、記録しないか(NOLOGGING)を指定できます。
logging_clauseは次の文に指定できます。
CREATE TABLEおよびALTER TABLE: 表、表のパーティション、LOBセグメント、または索引構成表のオーバーフロー・セグメントのログを記録する場合(「CREATE TABLE」および「ALTER TABLE」を参照)。
|
注意: LOB列に指定されたロギングは、表レベルで設定されたロギングとは異なる場合があります。表レベルでLOGGINGを指定し、LOB列にNOLOGGINGを指定する場合は、実表の行に対するDMLの変更は記録されますが、LOBデータに対するDMLの変更は記録されません。 |
CREATE INDEXおよびALTER INDEX: 索引または索引のパーティションのログを記録する場合(「CREATE INDEX」および「ALTER INDEX」を参照)。
CREATE MATERIALIZED VIEWおよびALTER MATERIALIZED VIEW: マテリアライズド・ビュー、マテリアライズド・ビューのパーティションの1つまたはLOBセグメントのログを記録する場合(「CREATE MATERIALIZED VIEW」および「ALTER MATERIALIZED VIEW」を参照)。
CREATE MATERIALIZED VIEW LOGおよびALTER MATERIALIZED VIEW LOG: マテリアライズド・ビュー・ログまたはマテリアライズド・ビュー・ログのパーティションの1つのログを記録する場合(「CREATE MATERIALIZED VIEW LOG」および「ALTER MATERIALIZED VIEW LOG」を参照)。
CREATE TABLESPACEおよびALTER TABLESPACE: 表領域に作成されたすべてのオブジェクトに対するデフォルトのロギング特性を設定または変更する場合(「CREATE TABLESPACE」および「ALTER TABLESPACE」を参照)。
次の操作にも、LOGGINGまたはNOLOGGINGを指定できます。
索引の再構築(CREATE INDEX ... REBUILDを使用)
表の移動(ALTER TABLE ... MOVEを使用)
セマンティクス
この項では、logging_clauseのセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトに対してロギング特性を設定または再設定するSQL文の説明を参照してください。
LOGGINGを指定すると、データベース・オブジェクトの作成、およびその後のオブジェクトへの挿入をREDOログ・ファイルに記録します。
NOLOGGINGを指定すると、データベース・オブジェクトの作成、およびその後の従来型INSERTをREDOログ・ファイルに記録します。ダイレクト・パス・インサートは記録されません。
非パーティション・オブジェクトの場合、この句に指定する値は、オブジェクトに関連付けられたセグメントの実際の物理属性となります。
パーティション・オブジェクトの場合、この句に指定する値は、PARTITION記述でロギング属性を指定しないかぎり、CREATE文(および後続のALTER ... ADD PARTITION文)で指定するすべてのパーティションに関連付けられたセグメントのデフォルトの物理属性となります。
SecureFiles LOBでは、NOLOGGING設定はFILESYSTEM_LIKE_LOGGINGに内部変換されます。
CACHE NOLOGGINGは、BasicFiles LOBに対しては許可されません。
FILESYSTEM_LIKE_LOGGING句は、SecureFiles LOBセグメントのログを記録する場合にのみ有効です。この設定は、BasicFiles LOBには指定できません。メタデータ変更のログのみを記録する場合は、この設定を指定します。この設定は、障害からリカバリする平均時間を短縮するファイル・システムのメタデータ・ジャーナリングに似ています。SecureFiles LOBのLOGGING設定は、ファイルシステムのデータ・ジャーナルに似ています。LOGGINGとFILESYSTEM_LIKE_LOGGINGの両方の設定によって、SecureFileを使用した完全なトランザクション・ファイル・システムが実現します。
|
注意: LOBセグメントの場合は、NOLOGGING設定とFILESYSTEM_LIKE_LOGGING設定を使用すると、バックアップ操作中にディスク上でデータが変更され、バックアップの一貫性が損われる可能性があります。この状況を回避するには、LOB記憶域にLOGGINGを設定し、LOBセグメントに対する変更がREDOログ・ファイルに保存されるようにします。または、データベースをFORCE LOGGINGモードに変更し、すべてのLOBセグメントに対する変更がREDOログ・ファイルに保存されるようにします。 |
ロギング属性を指定しているオブジェクトが強制ロギング・モードのデータベースまたは表領域に存在している場合、そのデータベースまたは表領域が強制ロギング・モードから別のモードに変わるまで、NOLOGGING設定は無視されます。
データベースをARCHIVELOGモードで実行している場合、LOGGING操作の前に取ったバックアップからのメディア・リカバリによって、オブジェクトが再作成されます。ただし、NOLOGGING操作の前に取ったバックアップからのメディア・リカバリでは、オブジェクトは再作成されません。
NOLOGGINGモードでの操作で生成されるREDOログのサイズは、LOGGINGモードで生成されるログより非常に小さくなります。
NOLOGGINGモードでは、データの変更時に、(新しいエクステントをINVALIDとしてマーク設定し、ディクショナリの変更を記録するために)最小限のログが記録されます。メディア・リカバリ中にNOLOGGINGが適用された場合、REDOデータのログ記録が中断されるため、エクステント無効化レコードでは、一定のブロック範囲に「論理的に無効」というマークが付きます。このため、損失してはならないデータベース・オブジェクトの場合は、NOLOGGING操作の後にバックアップを取る必要があります。
NOLOGGINGは、LOGGINGをサポートする場所のサブセットのみでサポートされます。次の操作でのみ、NOLOGGINGモードがサポートされます。
DML:
INSERT文またはMERGE文のいずれかの結果として実行されるダイレクト・パスINSERT(シリアルまたはパラレル)。NOLOGGINGは、MERGE文の結果として実行されるUPDATE操作には適用できません。
ダイレクト・ローダー(SQL*Loader)
DDL:
CREATE TABLE ... AS SELECT(NOLOGGINGモードでは、表の作成は記録されますが、ダイレクト・パス・インサートは記録されません。)
CREATE TABLE ... LOB_storage_clause ... LOB_parameters ... CACHE | NOCACHE | CACHE READS
ALTER TABLE ... LOB_storage_clause ... LOB_parameters ... CACHE | NOCACHE | CACHE READS(新しく作成したLOB列のロギングを指定する場合)
ALTER TABLE ... modify_LOB_storage_clause ... modify_LOB_parameters ... CACHE | NOCACHE | CACHE READS(既存のLOB列のロギングを変更する場合)
ALTER TABLE ... MOVE
ALTER TABLE ... (データ移動を伴うすべてのパーティション操作)
ALTER TABLE ... ADD PARTITION(ハッシュ・パーティションのみ)
ALTER TABLE ... MERGE PARTITIONS
ALTER TABLE ... SPLIT PARTITION
ALTER TABLE ... MOVE PARTITION
ALTER TABLE ... MODIFY PARTITION ... ADD SUBPARTITION
ALTER TABLE ... MODIFY PARTITION ... COALESCE SUBPARTITION
CREATE INDEX
ALTER INDEX ... REBUILD
ALTER INDEX ... REBUILD [SUB]PARTITION
ALTER INDEX ... SPLIT PARTITION
LOB以外のオブジェクトの場合、この句を指定しないと、オブジェクトが存在する表領域のロギング属性がオブジェクトのデフォルトのロギング属性になります。
LOBに対してこの句を省略した場合は、次のようになります。
CACHEを指定した場合は、LOGGINGが使用されます(CACHE NOLOGGINGは指定できないため)。
NOCACHEまたはCACHE READSを指定した場合は、表が存在する表領域の属性がデフォルトのロギング属性として使用されます。
NOLOGGINGは、内部に(行データとともに表に)格納されたLOBには適用されません。LOBに対するNOLOGGINGを4000バイト未満の値に指定し、STORAGE IN ROWを使用禁止にしていなかった場合、NOLOGGINGの指定は無視され、LOBデータは他の表データと同様に扱われます。