ORACLE MASTER Silver取得日記 ~SGA/PGA~ | インターノウスインフラエンジニアブログ

インターノウスインフラエンジニアブログ

インターノウスのインフラエンジニア奮闘記。
https://www.internous.co.jp/

本日はCOMMIT文についてお勉強します。

COMMIT文とは?
現在のトランザクションを終了し、そのトランザクション内で実行されたすべての変更を永続的な変更とします。

①まずユーザプロセスがサーバプロセスにCOMMIT文を送信します。
②「COMMITが実行されたよ!」という情報がLGWRによってREDOログファイルに記録されます。
③LGWRによりREDOログバッファ上の変更履歴情報がREDOログファイルに書き出されます。
④COMMITが完了したことがサーバプロセスにより、ユーザプロセスに通知されます。
この段階でデータベースキャッシュの該当データのロックが解除されます。
※UPDATE文の実行の際に、他のユーザに変更されないようにロックが掛けられていましたよね!

以上でCOMMIT処理は完了となります。
ただし、COMMITが完了したといっても、
データファイル中の表データは変更前の「AAA」のままであることにお気づきでしょうか?

こんな感じで処理されるのはデータファイルに対するI/Oを減らすためなのです。

仮にですがDBWnが変更後の「BBB」というデータをデータファイルに書き出す前にインスタンス障害が発生した場合、
REDOログファイルに記録されている変更履歴情報(AAA→BBB)からデータファイル中のデータを変更後のデータに書き換えることができます。

上記のようなインスタンスに対する障害発生時のリカバリをインスタンスリカバリと言います。
多分とっても重要なので覚えておいた方がよろしいかと思います。