LOGGING / NOLOGGINGは、REDOおよびUNDOの生成を減らすために、ダイレクトパス書き込みの有効化を管理するのに役立ちます。これは、回復可能性とパフォーマンスの間の微妙なバランスを制御するいくつかの方法の1つです。
Oracleアーキテクチャの背景情報
REDO オラクルが耐久性、つまりACIDの「D」を提供する方法です。トランザクションがコミットされると、変更は必ずしもデータファイルにきちんと保存されるとは限りません。これにより、処理が高速になり、バックグラウンドプロセスで一部の作業を処理できるようになります。 REDOは変更の説明です。これは、複数のディスクの「ダム」ログにすばやく保存されます。変更は高速であり、コミットが返されてから1マイクロ秒後にサーバーの電源が切れた場合、OracleはREDOログを調べて、変更が失われていないことを確認できます。
元に オラクルが一貫性、つまりACIDの「C」を提供するのに役立ちます。変更を元に戻す方法の説明が格納されます。この情報は、テーブルを読み取り、使用された値を知る必要がある別のプロセスで必要になる場合があります。 古い時点になります。
ダイレクトパス書き込み REDO、UNDO、キャッシュ、その他の機能をスキップして、データファイルを直接変更します。これは、多くの環境で高速ですが潜在的に危険なオプションです。そのため、これを制御するための紛らわしいオプションが多数あります。ダイレクトパス書き込みは、INSERTSにのみ適用され、以下で説明するシナリオにのみ適用されます。
何もしない場合、デフォルトのオプションが最も安全なLOGGINGです。
ダイレクトパス書き込みを制御する多くの方法
LOGGING / NOLOGGINGは、ダイレクトパス書き込みを制御するためのいくつかのオプションの1つです。 からこの表を見てください。 AskTom さまざまなオプションがすべてどのように連携するかを理解するには:
Table Mode Insert Mode ArchiveLog mode result
----------- ------------- ----------------- ----------
LOGGING APPEND ARCHIVE LOG redo generated
NOLOGGING APPEND ARCHIVE LOG no redo
LOGGING no append ARCHIVE LOG redo generated
NOLOGGING no append ARCHIVE LOG redo generated
LOGGING APPEND noarchive log mode no redo
NOLOGGING APPEND noarchive log mode no redo
LOGGING no append noarchive log mode redo generated
NOLOGGING no append noarchive log mode redo generated
FORCE LOGGINGは、これらすべての設定を上書きできます。おそらく私が知らない他のいくつかのスイッチがあります。そしてもちろん、ダイレクトパスを妨げる多くの制限があります-トリガー、外部キー、クラスター、インデックス編成テーブルなど。
ルールは、インデックスに対してさらに制限されます。インデックスは常に DMLステートメント中にREDOを生成します。 CREATE INDEX ... NOLOGGING
などのDDLステートメントのみ またはALTER INDEX ... REBUILD
NOLOGGINGインデックスでは、REDOは生成されません。
なぜそんなに多くの方法があるのですか?回復可能性は非常に重要であり、役割が異なれば問題に対する見方も異なる可能性があるためです。また、一部の人の決定が他の人の決定を上書きする必要がある場合もあります。
開発者 ステートメントレベルで「モードの挿入」を決定します。 /*+ APPEND */
を使用すると、多くの奇妙なことが起こる可能性があります ヒントと開発者は、いつ使用するかを慎重に選択する必要があります。
アーキテクト オブジェクトレベルで「テーブルモード」を決定します。一部のテーブルは、開発者がどれだけ速く挿入したいかに関係なく、常に回復可能でなければなりません。
データベース管理者 データベースモードまたはテーブルスペースモードで、「アーカイブログ」とFORCELOGGINGを決定します。おそらく、組織は特定のデータベースの回復を気にしないので、それをNOARCHIVELOGモードに設定します。または、組織にはすべてが回復可能でなければならないという厳格なルールがあるため、テーブルスペースをFORCELOGGINGに設定します。