ロールバックとは?
トランザクション中に障害や不整合が発生した場合に、トランザクション開始前の状態にデータを戻す処理。コミットの反対操作
詳細解説
ロールバック(Rollback)は、データベースのトランザクション処理においてトランザクション中に障害・エラー・整合性違反が発生した場合に、そのトランザクションで行われたすべてのデータ変更を無効にしてトランザクション開始前の状態にデータを復元する操作です。コミット(Commit:変更を確定・永続化)の反対操作で、ACIDのAtomicity(原子性)を保証する仕組みの一部です。ロールバックが実行される典型的な場面はアプリケーションが明示的にROLLBACK文を実行した場合(ビジネスロジックエラー検出時)・システム障害(サーバーやDBのクラッシュ)によるトランザクションの中断・デッドロックが検出されてDBシステムが犠牲者トランザクションをロールバック・制約違反(NOT NULL違反・外部キー制約違反等)発生時です。ロールバックの実現にはDBMSがトランザクションログ(変更前データを記録するUNDOログ)を使います。ロールバックはUNDOログを参照して変更を逆順に取り消します。部分ロールバック(セーブポイント)はSAVEPOINT文でトランザクション内に中間ポイントを設け、完全なロールバックではなくセーブポイントまで戻すことが可能です。ロールカバリ(Recovery)とは障害後にDBを正常状態に戻す処理全体を指し、コミット済みトランザクションのロールフォワード(再実行)と未コミットトランザクションのロールバック(取り消し)の両方を含みます。ITパスポートでは「ロールバックの定義」「コミットとの対比」「トランザクションの原子性との関係」「UNDOログ」が出題されます。
ITパスポートでの出題ポイント
- 1トランザクション中の障害・エラー時に変更を無効化して開始前の状態に復元
- 2コミット(変更確定)の反対操作。UNDOログを使い変更を逆順取り消し
- 3原子性(Atomicity)の保証:全部完了かゼロかのどちらかを保証
- 4デッドロック検出時やシステム障害時にDBMSが自動実行