Oracleのトランザクション制御を完全理解!

オラクルデータベースの基本

~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専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました