db2鎖表後如何解鎖 DB2解除鎖表

2021-10-13 07:58:16 字數 3165 閱讀 6150

背景

生產環境中,我幾乎沒有遇到過鎖表。多是在開發過程中遇到的,比如團隊開發中經常會遇到多個功能訪問同一張表的情況。如果有開發人員在這張表加了排它鎖,然後又忘記提交事務,那麼其他開發人員就要一直等待了。如開發人員在斷點除錯(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...