背景
生產環境中,我幾乎沒有遇到過鎖表。多是在開發過程中遇到的,比如團隊開發中經常會遇到多個功能訪問同一張表的情況。如果有開發人員在這張表加了排它鎖,然後又忘記提交事務,那麼其他開發人員就要一直等待了。如開發人員在斷點除錯(debug)忘記點通過、資料庫客戶端中修改資料忘記commit……
當我們在辦公室或公司im上喊了幾次後沒人反應後,就需要強制解鎖了。
db2解鎖實戰
開啟db2命令列,開始戰鬥。
1.查詢node節點
鍵入命令「list node directory」,我們會發現當前區域網的所有資料庫節點。
db2 => list node directory
節點目錄
目錄中的條目數 = 3
節點 1 條目:
節點名 = nde5dc7d
注釋 =
目錄條目型別 = local
協議 = tcpip
主機名 = 192.168.1.11
服務名稱 = 50000
節點 2 條目:
節點名 = nde5f473
注釋 =
目錄條目型別 = local
協議 = tcpip
主機名 = 192.168.1.12
服務名稱 = 50001
節點 3 條目:
節點名 = nde9bbae
注釋 =
目錄條目型別 = local
協議 = tcpip
主機名 = 192.168.1.13
服務名稱 = 50001
我要找的表在192.168.1.12節點,那麼根據節點名連線。
db2 => attach to nde5f473 user [username] using [password]
例項連線資訊
例項伺服器 = db2/linux 9.5.0
授權標識 = db2inst1
本地例項別名 = nde5f473
2.獲取資料庫鎖定快照
連上例項伺服器之後,我們要獲取目標資料庫鎖定快照,然後找出是那個應用鏈結鎖定了目標表。
為了方便匯出快照檔案,我們先退出db2命令列。
db2 => quit
db20000i quit 命令成功完成。
然後,我們獲取目標資料庫快照檔案。
c:\documents and settings\administrator>db2 get snapshot for locks on [dbname] > lock.txt
開始分析快照檔案,找到鎖定表的應用。
db2 => get snapshot for locks on ***x
資料庫鎖定快照
資料庫名稱 = ***x
資料庫路徑 = /home/db2inst2/db2inst2/node0000/sql00
輸入資料庫別名 = ***x
掛起的鎖定 = 4
當前已連線的應用程式 = 13
當前正等待鎖定的**程式數 = 0
快照時間戳記 = 2011-03-31 13:21:53.285610
應用程式控制代碼 = 26773
應用程式標識 = c0a8013d.j805.110331005614
序號 = 00003
connect 授權標識 = db2inst1
應用程式狀態 = uow 正在等待
狀態更改時間 = 未收集
應用程式**頁 = 1208
掛起的鎖定 = 0
總計等待時間(毫秒) = 未收集
應用程式控制代碼 = 28266
應用程式標識 = 192.168.1.56.39691.110331051526
序號 = 00001
應用程式名 = db2bp.exe
connect 授權標識 = db2inst1
應用程式狀態 = 連線已完成
狀態更改時間 = 未收集
應用程式**頁 = 1386
掛起的鎖定 = 0
總計等待時間(毫秒) = 未收集
應用程式控制代碼 = 28292
應用程式標識 = 192.168.1.56.64523.110331052144
序號 = 00001
connect 授權標識 = db2inst1
應用程式狀態 = uow 正在等待
狀態更改時間 = 未收集
應用程式**頁 = 1208
掛起的鎖定 = 4
總計等待時間(毫秒) = 未收集
鎖定列表
鎖定名稱 = 0x0600030a1100a0ff0400000052
鎖定屬性 = 0x00000008
發行版標誌 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定物件名 = 21468545041
物件型別 = 行
表空間名 = tablespace_idx
表模式 = db2inst1
表名 = tablename
方式 = x
鎖定名稱 = 0x5359535348323030ddecef2841
鎖定屬性 = 0x00000000
發行版標誌 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定物件名 = 0
物件型別 = 內部方案鎖定
方式 = s
鎖定名稱 = 0x53514c4445464c5428dd630641
鎖定屬性 = 0x00000000
發行版標誌 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定物件名 = 0
物件型別 = 內部方案鎖定
方式 = s
鎖定名稱 = 0x0600030a000000000000000054
鎖定屬性 = 0x00000000
發行版標誌 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定物件名 = 2563
物件型別 = 表
表空間名 = tablespace_idx
表模式 = db2inst1
表名 = tablename
方式 = ix
3.強制結束鎖表的鏈結
db21024i 該命令為非同步的,可能不會立即生效。
db2鎖表後如何解鎖 db2 為什麼會鎖表
1級2014 06 27 回答 鎖是資料庫為了控制併發資料的完整性而引入的機制。鎖表只是鎖的一種。鎖表簡單來說就是乙個事務操作對錶a進行加鎖 排他鎖 但一直不釋放該鎖,a表處於鎖定狀態。其他事務無法會訪問該錶造成鎖等待。db2鎖表 db2支援的表級鎖定 1 in 無意圖鎖 intent node 不...
DB2鎖表問題
主要分兩步驟 獲取事物id及正在對該錶進行操作的sql 終止該事物。一 獲取事物id和sql 方法一 已知表名 獲取事物id db2 select distinct agent id from sysibmadm.snaplock where tabnme tabname with ur 檢視正在鎖...
DB2管理非預設 db2 例項
檢視db2所有例項 c documents and settings administrator db2ilist db2c documents and settings administrator db2 get instance 當前資料庫管理器例項是 db2 建立新例項 c documents...