小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


OracleのSQL*Plusと自動コミットについて

はじめに

Oracleには自動コミットという機能があり、明示的にcommit命令を発行しなくても変更を確定してくれる機能があります。
この自動コミットはデフォルトOFFなのですが、SQL*Plusでは自動コミットの設定にかかわらずコミットされるケースがあるため、注意が必要です。

自動コミットOFFでもコミットされる

Oracleの自動コミットはデフォルトでOFFなのですが、SQL*Plusは正常終了するとコミットされます。

自動コミット機能は、SQL*PlusのAUTOCOMMITシステム変数で指定します。AUTOCOMMITの設定にかかわらず、変更はSQL*Plusが正常に終了するとコミットされます。
SQL*Plusの基本 はてなブックマーク - SQL*Plusの基本

要するに、

  • SQL*Plusでupdate文を実行し、commitなしにexitするとコミット
  • SQL*Plusでupdate文を実行し、commitなしに×ボタンで閉じるとロールバック

×ボタンで閉じるのはSQL*Plusにとって正常終了ではないみたいです。

Oracleの自動コミット設定を確認する

Oracleの自動コミット設定を確認するには、以下のコマンドを実行します。

show autocommit;

autocommit OFFと表示された場合は、自動コミット機能がOFFになっています。commit命令を発行するまでは変更が確定されず、ロールバックされます。

Oracleの自動コミット設定を変更する

自動コミット設定をONにするには、以下のコマンドを実行します。

SET AUTOCOMMIT ON