コミット、COMMIT
コミットの仕組み:コミットとは、トランザクション における変更したレコードを確定すること。⇔ ロールバック
オラクルでは発生させることができない現象であるが RDBMS の種類と トランザクション・分離レベル によっては確定前の変更レコードが ファントム として出現する。
コミット処理
コミット時に行なう仕事は以下のとおり
(※1) Oracle 10g R2 の COMMIT オプションに
COMMIT WRITE [IMMEDIATE|BATCH] [WAIT|NOWAIT]
があり COMMIT BATCH NOWAIT などと指定すると非同期書き込みになる。
暗黙コミット
暗黙コミット(implicitly commit)
暗黙コミットとは、トランザクションにおいて、ユーザーが明示的に COMMIT を実行するのではなく、ユーザーが制御できないところでオラクルによってコミットされること(DDL の実行は暗黙コミットの代表例である)。一般的な コミットとは、明示的な COMMIT のことをさす。
SQL*Plus の終了処理であるが、SQLPlus の EXIT と QUIT は COMMIT オプションが
デフォルト処理である。これを暗黙コミットというのかはわからない。
COMMIT 前に行なわれている処理
データを挿入、更新、削除した場合に行なう仕事は以下のとおり。
- UNDO の生成(ロールバックセグメントレコード)
- REDO ログエントリの生成(REDO バッファ)
- データベース・バッファに対する変更(※2)
(※2) ダイレクトパスインサート はデータベースバッファを経由しない。
データベース・バッファを超過する処理量の場合にはトランザクションが未コミット状態でもデータファイルに書き込まれる。
参考:遅延ブロッククリーンアウト
COMMIT 処理に関連する事項