OracleDatabaseの「commit」文について紹介します。
「commit」文は、「rollback」文と同様にDCL(Data Control Language)と呼ばれ、
データを制御するSQL文になります。
データベースのcommitは各データベースで動作が異なります。
この記事ではcommit時にOracle Database特有のイベントについても説明していきます。
基本構文:commit
commitの基本構文は以下になります。
commit;
あまり知られていませんが、commit文にもオプションがあります。
commit write [wait | nowait] [immediate | batch]
wait | nowait
「wait」オプションを指定すると、REDOログの書き込みが完了後に次の処理に移ります。
「nowait」オプションを指定すると、REDOログの書き込みが完了しなくて次の処理に移ります。
nowaitはスループットが向上しますが、異常終了時にREDOの損失が発生します。
なお何も指定しない場合は「wait」が指定されています。
immediate | batch
「immediate」オプションを指定すると、
ログライター(LGWR)プロセスが即座にトランザクションのREDO情報をログに書き込みます。
「batch」オプションを指定すると、更新情報がREDOログバッファに配置され、
後ほどまとめてREDOログへ書き込みます。
何も指定しない場合は「immediate」が指定されています。
comit時のOracleDBの動作
OracleDatabaseではcommit文が発行されると以下のイベントを実施します。
- システム変更番号(SCN)
- LGWR(ログ・ライター)プロセスがREDOログバッファ内の更新情報とトランザクションのSCNをREDOログに書き込む。
- 行と表に対して保持されているロックが解放
- セーブポイントの削除
- コミットのクリーンアウト
- トランザクションの完了
暗黙コミット
Oracle Databaseでは「DDL」文を実行すると暗黙コミットが行われます。
- create文 (create table, create index, create user)
- alter文 (alter table, alter index, alter system)
- drop文 (drop table, drop user, drop tablespace)
- truncate文
上記のDDL文を実行すると暗黙コミットがされるので注意しましょう。
**※上記以外のDDL文も暗黙コミットされます。
*またSQLPlusからログアウト(exit や quit)した場合もコミットされます。
Oracleの基本 ~データベース入門から設計/運用の初歩までposted with ヨメレバ
渡部 亮太,相川 潔,日比野 峻佑,岡野 平八郎,宮川 大地 技術評論社 2017-09-22