Oracleのデータ更新(INSERT/
今回はOracle内部の更新の仕組を噛み砕いて説明します。
1. 更新(INSERT/UPDATE/DELETE)はメモリへの書き込み
Oracleでデータを更新する(INSERT/
「データベースバッファキャッシュ」と「REDOログバッファ」はメモリ上の領域のことです。
「REDOログバッファ」は「更新履歴」が書き込まれます。「○○を××に書き換えた」という履歴を残します。「データベースバッファキャッシュ」は「更新データ」そのものが書き込まれます。
INSERT/
INSERT/UPDATE/DELETEすると
- 更新履歴 →REDOログバッファ(メモリ)へ書き込む
- 更新データ →データベースバッファキャッシュ(メモリ)へ書き込む
2. コミットはREDOログファイルへの書き込み
では次です。Oracleではこの時点では更新は確定されておらず、確定するために「コミット」をします。
「コミットする」とはどういう事でしょうか?
「コミット」すると「REDOログバッファ」から「REDOログファイル」へ書き込みします。コミットすると「更新履歴」をメモリからファイルへ書き出すわけです。
「コミット」というと、確定している感じがするので、更新データをデータファイル(dbf)へ書き込みしているような気がしますが、実は更新履歴ファイルへ書き込んでいるだけなのです。
更新(INSERT/
更新からコミットまでの流れでしたが、ここまではよいでしょうか?
コミットすると
- REDOログバッファ →REDOログファイルへ書き込む
- データベースバッファキャッシュ →何もしない
3. チェックポイントはデータファイルへの書き込み
この後、チェックポイントが発生したタイミングで「データベースバッファキャッシュ」の中身を「データファイル」(xxx.
チェックポイント・・聞きなれない言葉ですね。
チェックポイント(ファイルへの書き込み)はログスイッチ発生(REDOログファイルの切り替え)、インスタンスのシャットダウンなどで発生します。
ちなみに、ログスイッチとはREDOログファイルが一杯になったときに次のREDOログファイルへ書き込むタイミングを指します。ログファイルの切り替えスイッチなのでログスイッチとよばれています。
チェックポイントが発生すると
- REDOログバッファ →何もしない
- データベースバッファキャッシュ →データファイルへ書き込む
これでOracleのデータ更新の流れが一通りつかめました。
Oracleのデータ更新の流れのまとめ
- INSERT,UPDATE,DELETE →「REDOログバッファ」「データベースバッファキャッシュ」へ書き込む
- コミット →「REDOログバッファ」から「REDOログファイル」(REDO0xx.
LOG)へ書き込む - チェックポイント →「データベースバッファキャッシュ」を「データファイル」へ書き込む
言い換えるとこのようになります。
- 更新 = 更新履歴・更新データを書き込む(メモリへ)
- コミット = 更新履歴を書き込む(メモリから更新履歴ファイルへ)
- チェックポイント = 更新データを書き込む(メモリからデータベースファイルへ)
これがざっくりとしたOracleの更新の流れです。
更新、コミット、チェックポイントという処理に対し、データベースバッファキャッシュ、REDOログバッファ、REDOログファイル、データファイルを順番に書き換えて行く流れ・・・
これらの関係はわかりましたか?
長々と説明しましたが、以上でOracleのデータ更新の流れの解説は終了です。
初級者にとって難しい部分もありますが、全てを覚えないといけないわけではありません。
更新するとメモリへ書き込み、コミットのときにメモリからREDOログファイルへ書き込み、チェックポイントのときにメモリからデータファイルへ書き込む。
この大きな流れが理解できていれば実務においてそれ程支障にはならないと考えます。
以上、Oracleのデータ更新(INSERT/
コメント