この記事では暗黙的なコミットについて解説します。
暗黙的なコミットとは
コミットとはトランザクションの変更を確定する処理です。
Oracle Databaseにおいてはcommit文を使用することによって、明示的にコミットすることができます。
ただし、ユーザがコミットを実行するのではなく、自動的にコミットがされることがあります。
この処理を「暗黙的なコミット」と呼びます。
コミットされるとロールバックすることはできなくなりますので、暗黙的なコミットがされる場合は注意が必要です。
暗黙的なコミットがされるケース
暗黙的なコミットは下記の2つのケースで実行されます。
・DDL文を実行した場合
オブジェクトの作成や変更などに使われるDDL文を実行すると自動でコミットされます。
そのためDDL文では明示的なコミット処理は不要で、ロールバック処理はできません。
・SQL*PlusをEXITもしくはQUITで終了した場合
SQL*Plusでトランザクションを実行後、コミットしていない状態でEXITもしくはQUITコマンドでSQL*Plusを終了すると、トランザクションは自動でコミットされます。
それ以外の方法(コマンドプロンプトを閉じたり、異常終了した場合)で終了したときはコミットされずにロールバックされます。
SQL*Plusの終了で暗黙的なコミットがされる例
テーブルにデータをインサートして暗黙的なコミットがされるか確認してみます。
まずは最初のテーブルの状態を確認します。
SQL> SELECT * FROM EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ------ --- ---- -------- ---- ----- -------
1 tanaka
データをインサートします。
SQL> INSERT INTO emp (empno, ename) VALUES (2,'suzuki');
1行が作成されました。
コミットせずにEXITコマンドでSQL*Plusを終了します。
SQL> exit
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0との接続が切断されました。
再度接続し、追加したデータがあることを確認します。
SQL> SELECT * FROM EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ------ --- ---- -------- ---- ----- -------
1 tanaka
2 suzuki
暗黙的なコミットがされていることが確認できました。