~COMMIT・ROLLBACK・SAVEPOINTをわかりやすく解説~
Oracleデータベースでは、データの整合性を保つためにトランザクション制御が非常に重要です。本記事では、基本的な操作から実務的な考慮点まで、トランザクションの仕組みをわかりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
✅ トランザクションとは?
トランザクションとは、複数の処理をひとまとめにして「すべて成功」または「すべて失敗」にするための論理的な単位です。
たとえば、以下のような一連の処理を考えてみましょう。
① 口座Aから1万円引き出す
② 口座Bへ1万円振り込む
上記の処理は、どちらか一方だけが実行されたら整合性が崩れます。このような問題を防ぐために、トランザクションという単位で管理します。
🔄 トランザクションの開始と終了のイメージ
【トランザクションのライフサイクル】
▼ SQL実行開始
↓
【トランザクション開始】
↓
INSERT / UPDATE / DELETE
↓
SAVEPOINT(任意)
↓
COMMITまたはROLLBACK
↓
【トランザクション終了】
Oracleでは、DML文(INSERT、UPDATE、DELETEなど)を実行すると自動的にトランザクションが開始されます。
🟩 COMMIT:変更を確定する
COMMIT;
- DML文で行った変更を永続的に保存します。
- 他のユーザーからも変更が見えるようになります。
- トランザクションは終了し、ロックも解放されます。
例)
INSERT INTO emp VALUES (9999, 'TARO', 'CLERK', 7902, SYSDATE, 3000, NULL, 20);
COMMIT;
🟥 ROLLBACK:変更を取り消す
ROLLBACK;
- トランザクション開始後に行った変更をすべて元に戻す処理です。
- COMMITしていない内容は、ROLLBACKでキャンセル可能です。
- ロックも解放され、他のユーザーからは何も変更されていないように見えます。
例)
DELETE FROM emp WHERE empno = 7788;
ROLLBACK; -- 削除を取り消す
🟨 SAVEPOINT:部分的なロールバックを可能にする
SAVEPOINT ラベル名;
SAVEPOINTは、トランザクション中の特定の位置を記録するコマンドです。
SAVEPOINTを設定しておくと、そこまでの処理を維持しつつ、後続の処理のみを取り消すことができます。
SAVEPOINT sp1;
🔄 ROLLBACK TO SAVEPOINT:指定位置まで戻す
ROLLBACK TO sp1;
- 設定したSAVEPOINT「sp1」以降の処理だけを取り消します。
- トランザクションは終了しません。
- COMMITが行われていない限り、他のSAVEPOINTも有効です。
🧪 実行例で理解する
以下に実行例を紹介します。
-- トランザクション開始(暗黙)
UPDATE emp SET sal = sal + 100 WHERE empno = 7839;
SAVEPOINT sp_update;
DELETE FROM emp WHERE empno = 7566;
SAVEPOINT sp_delete;
-- DELETEだけ取り消す
ROLLBACK TO sp_delete;
-- 給与更新を確定
COMMIT;
🔎 テキスト図で流れを確認
処理の流れと状態
----------------------------
UPDATE(給与加算) → OK
SAVEPOINT sp_update → 設定
DELETE(従業員削除) → 実行
SAVEPOINT sp_delete → 設定
ROLLBACK TO sp_delete → DELETEのみ取り消し
COMMIT → UPDATEだけ確定
🧠 トランザクション制御の注意点
| 注意点 | 内容 |
|---|---|
| COMMIT忘れ | セッション終了時に自動でROLLBACKされることがある |
| 長時間トランザクション | UNDO領域の圧迫、ロック競合の原因になる |
| SAVEPOINTの多用 | 可読性低下や管理複雑化を招くことがある |
| 自動COMMITされる操作に注意 | DDL(CREATE/ALTERなど)は自動COMMITされる(明示的制御は不可) |
✅ まとめ
Oracleのトランザクション制御は、アプリケーションの信頼性と整合性を支える重要な仕組みです。
COMMIT:トランザクション確定(変更を保存)ROLLBACK:トランザクション取り消し(元に戻す)SAVEPOINT:部分的ロールバックを可能にする
これらを正しく理解し、安全かつ効率的なデータ操作を実現しましょう。
[参考]
10 トランザクション
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント