DB2 8.2 前僅能透過資料庫配置參數 LOCKTIMEOUT 統一設定全系統鎖等待時間。自 V8.2 起,引入 SET CURRENT LOCK TIMEOUT 語句,支援單一會話/連線自訂鎖等待策略,提供精細化並發控制能力。
SET [CURRENT] LOCK TIMEOUT =
{ WAIT | NOT WAIT | NULL | | }
| 選項 | 行為說明 |
|---|---|
| WAIT | 無限期等待鎖釋放(相容 LOCKTIMEOUT=-1) |
| NOT WAIT | 無法立即取得鎖時,立即返回錯誤 (SQLCODE -911) |
| NULL | 使用資料庫配置參數 LOCKTIMEOUT 值 |
| 秒數 (整數/主機變數) | 指定等待秒數,逾時返回錯誤 |
影響範圍:僅適用於列鎖、表鎖、索引鍵鎖、MDC 區塊鎖;不影響其他鎖類型。
db2 +cconnect to sample
create table test(id int, name char(10))
commit
insert into test values(1,'test')
connect to sample
select * from test -- 會卡住等待
set current lock timeout not wait
select * from test -- 立即返回錯誤 SQL0911N
SET CURRENT LOCK TIMEOUTdb2cli.ini 關鍵字 LOCKTIMEOUT = WAIT | NOT WAIT | WAIT | ,驅動程式自動發送設定語句根據業務特性彈性設定:高優先級線上交易用 NOT WAIT 快速失效轉向;批次報表用 WAIT 30 容忍短暫阻塞;長時間運行作業用 WAIT 確保完成。避免全系統預設 -1 導致連鎖阻塞。