[OracleDB] commitでデータ更新の確定
OracleDatabaseの「commit」文について紹介します。
「commit 」文は、「rollback 」文と同様にDCL(Data Control Language)と呼ばれ、
データを制御するSQL文になります。
データベースのcommitは各データベースで動作が異なります。
この記事ではcommit時にOracle Database特有のイベントについても説明していきます。
[st-card id=3731 label=\ name=\ bgcolor=\ color=\ readmore=on\]
基本構文: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文も暗黙コミットされます。
*またSQL Plusからログアウト(exit や quit)した場合もコミットされます。
Oracleの基本 ~データベース入門から設計/運用の初歩までposted with ヨメレバ
渡部 亮太,相川 潔,日比野 峻佑,岡野 平八郎,宮川 大地 技術評論社 2017-09-22

