暗黙的なコミット

この記事では暗黙的なコミットについて解説します。

 暗黙的なコミットとは

コミットとはトランザクションの変更を確定する処理です。

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

暗黙的なコミットがされていることが確認できました。