DB2 CLP 預設開啟自動提交,若需在交易中執行多條 SQL 並保持原子性,必須關閉自動提交。本文說明暫時與永久關閉的方法,並附實測範例驗證行為差異。
db2 => update command options using C off -- 暫時關閉自動提交 db2 => update command options using C on -- 暫時開啟自動提交
C:\DB2> db2set -lr | find /i "db2option" C:\DB2> db2set DB2OPTIONS=+c -- +c 永久關閉自動提交 C:\DB2> db2set DB2OPTIONS=-c -- -c 永久開啟自動提交
設定後可用下列指令驗證:
C:\DB2> db2 list command options | find /i "-c" -c 自動落實 OFF
在指令前加上 -c(關閉)或 +c(開啟)可單次覆寫目前設定:
C:\DB2> db2 -c insert into c1_sched values ('a',1)
C:\DB2> db2 +c insert into c1_sched values ('b',2)
場景 1:自動提交開啟(預設)
C:\DB2> db2 -c insert into c1_sched values ('a',1)
DB20000I SQL 命令成功完成。
C:\DB2> db2 select * from c1_sched
CLASS_CODE DAY
-------------------- --------------------
a 1
1 條記錄已選擇。
C:\DB2> db2 rollback
DB20000I SQL 命令成功完成。
C:\DB2> db2 select * from c1_sched
CLASS_CODE DAY
-------------------- --------------------
a 1
1 條記錄已選擇。 -- 資料仍存在,因自動提交已生效
場景 2:自動提交關閉
C:\DB2> db2 +c insert into c1_sched values ('b',2)
DB20000I SQL 命令成功完成。
C:\DB2> db2 select * from c1_sched
CLASS_CODE DAY
-------------------- --------------------
b 2
a 1
2 條記錄已選擇。
C:\DB2> db2 rollback
DB20000I SQL 命令成功完成。
C:\DB2> db2 select * from c1_sched
CLASS_CODE DAY
-------------------- --------------------
a 1
1 條記錄已選擇。 -- 'b' 被回滾,僅剩 'a'
db2set DB2OPTIONS=+c),習慣顯式 COMMIT/ROLLBACK。update command options using C off,結束前 COMMIT。-c/+c)適合臨時測試,不影響全域設定。