Database OracleDB インフラ

[OracleDB] rollbackでデータ更新の取り消し

投稿日:2018年8月1日 更新日:

こんにちは!シミダイ(@shimidai2100)です。

OracleDatabaseの「rollback」文について紹介します。

rollback」文は、「commit」文と同様にDCL(Data Control Language)と呼ばれ、データを制御するSQL文になります。

この記事ではrollback時にOracle Database特有のイベントについても説明していきます。

なおcommit文の記事は以下にまとめてあります。

[OracleDB] commitでデータ更新の確定

こんにちは!シミダイ(@shimidai2100)です。 OracleDatabaseの「commit」文について紹介します。 「commit」文は、「rollback」文と同様にDCL(Data C ...

続きを見る


基本構文:commit

rollbackの基本構文は以下になります。

上記のように何も指定しないとrollback文で以下の処理が行われます。

  • トランザクションの終了
  • 現行のトランザクションのすべての変更を取消し
  • トランザクション中のセーブポイントの消去
  • すべてのロックの解除

rollbackのオプションとして「savepoint」が存在します。

savepoint付きでrollback文を発行するとで以下の処理が行われます。

  • トランザクションのセーブポイントまでロールバック。トランザクションは終了しない
  • 指定したセーブポイントより後に作成されたセーブポイントの消去
  • 指定したセーブポイントより後に発生した表・行へのロック解除

ロールバック(rollback)の種類

ここからはロールバックの種類とその特徴を紹介します。

トランザクションのrollback

トランザクションの開始時または設定したsavepointまでデータを元に戻すことを「トランザクションのロールバック」と呼びます。

  1. トランザクション開始時または指定したsavepointまでに変更されたデータをUNDOセグメントから取り出す
  2. 取り出したデータを使って元のデータを元に戻す
  3. ロールバックの対象となった操作による行レベルのロックと表レベルのロックの解放
  4. トランザクション終了 ※ savepointを指定した場合、トランザクションは終了しない

ステートメントレベルのrollback

SQL文デッドロックによる 単文におけるエラーの取り消しを「ステートメントレベルロールバック」と呼びます。

ステートメントレベルのロールバックを使用するためには、「savapoint」を設定する必要があります。

ユーザープロセスの異常終了のロールバック

ユーザープロセスが何らかの原因で異常終了して時に、未コミットトランザクションが残ってしまう時があります。

このトランザクションをOracleDatabaseでは自動でロールバックします。

このロールバック処理はバックグラウンドのPMON(プロセス・モニター)プロセスが実施します。

クラッシュリカバリやメディアリカバリ処理

何らかの原因でインスタンスが異常終了した際にデータファイルが破損したりした時に、

OracleDatabaseが自動で行うロールバック処理が行います。

これらのロールバック処理はバックグラウンドのSMON(システム・モニター)プロセスが実施します。

 

スポンサードリンク

関連記事

-Database, OracleDB, インフラ

Translate »

Copyright© shimidai2100 , 2018 All Rights Reserved.