首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 表鎖死鎖排查與強制解鎖完整實戰指南

     編輯:DB2 教學

鎖監控開啟與快照擷取

遇到應用程式疑似死鎖(Hang 住)時,依循以下步驟快速定位阻塞鏈:

  1. 開啟鎖監控開關:
    UPDATE MONITOR SWITCHES USING LOCK ON TABLE ON
  2. 另開視窗重現被阻塞的 UPDATE 陳述式。
  3. 原視窗擷取鎖快照至檔案:
    GET SNAPSHOT FOR LOCKS ON <資料庫名> > locks.txt

快照關鍵欄位解讀

輸出包含多個「應用程式句柄」區塊,重點關注:

  • 應用程式狀態:UOW 正在等待、聯合請求暫掛 顯示被阻塞。
  • 掛起的鎖定:非零值表示正等待鎖。
  • 鎖定列表:含 鎖定對象名、對象類型(表、行、內部)、模式(S/IS/NS/X/IX 等)。

範例中句柄 43、557 均顯示「聯合請求暫掛」且持有 C_USER 表的行鎖(NS)與表鎖(IS),互相等待,形成經典死鎖。

階梯式解鎖與復原指令

1. 精準終止阻塞應用

FORCE APPLICATION (43)
FORCE APPLICATION (557)

操作為非同步,執行 LIST APPLICATIONS 確認進程是否消失。若長時間未退出,可能正執行大量回滾,需耐心等待。

2. 全域強制斷開並重啟實例(核彈選項)

FORCE APPLICATION ALL
TERMINATE
DB2STOP FORCE
DB2START

警告:將中斷所有連線、回滾所有未提交交易,僅在極端情況使用。

圖形化替代方案:Windows 控制中心

Windows 環境下可使用「控制中心」→ 實例右鍵「應用程式」,即時檢視鎖狀態、鎖鏈圖譜,並可直接右鍵強制關閉特定應用,操作直觀、風險可控。

預防死鎖最佳實踐

  • 統一存取順序:所有交易按相同順序存取表/行。
  • 縮短交易長度:盡早 COMMIT,減少持鎖時間。
  • 適當隔離級別:評估 CS/RS/UR,避免不必要的 RR。
  • 啟用鎖逾時:LOCKTIMEOUT 設定非 -1,防止無限等待。
  • 定期 RUNSTATS/REORG:優化存取路徑,減少掃描鎖升級。

掌握監控工具與處理流程,讓死鎖從「恐怖意外」變為「可控事件」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved