db2鎖表後如何解鎖 db2 為什麼會鎖表

2021-10-13 07:58:16 字數 1597 閱讀 5237

匿名使用者

1級2014-06-27 回答

鎖是資料庫為了控制併發資料的完整性而引入的機制。鎖表只是鎖的一種。

鎖表簡單來說就是乙個事務操作對錶a進行加鎖(排他鎖),但一直不釋放該鎖,a表處於鎖定狀態。其他事務無法會訪問該錶造成鎖等待。

db2鎖表

db2支援的表級鎖定

1、in 無意圖鎖(intent node),不需要行鎖,擁有者可以讀取包括其他事務未提交資料在內的所有資料,但不能對錶中的資料作出修改。

2、is意圖共享鎖(intent share),需要行鎖配合擁有者可以在擁有相應行上的s鎖時可以讀取該行的資料,但不能修改資料。

3、ix意圖排他鎖(intent exclusive),需要行鎖配合擁有者可以在擁有相應行上的x鎖時可以修改該行的資料

4、six共享並且意圖排他鎖(share with intent exclusive),需要行鎖配合擁有者可以讀取表中的任何資料,如果在相應的行上可以獲得x鎖,可以修改該行。six的獲取比較特殊,當程式擁有ix鎖時請求s鎖,或者在已經擁有s鎖的時候請求ix鎖時產生

5、s共享鎖(share),不需要行鎖配合可以讀取表上的任何資料,如果表上被加了s鎖,表上的資料只能被讀取而不能做出任何修改

6、u 更新鎖(update),不需要行鎖配合擁有者可以讀取表中的任何資料,如果公升級為x鎖,則可以更改表中的任何資料,該鎖是等待對資料進行修改的一種中間狀態

7、x排他鎖(exclusive),不需要行鎖配合擁有者可以讀取或者修改表中的任意資料,如果加上了x鎖,除了未提交讀事務外,其他程式都不能對錶進行任何讀取或者修改

8、z超級排他鎖(super exclusive),不需要行鎖配合該鎖一般不是由dml產生,而是由drop,alter或者建立刪除索引時產生的,加上z鎖後,所有程式(包括未提交讀程式)都不能對錶進行讀取或者修改

具體來說,is,ix,six用於表一級並且需要行鎖配合,用於阻止其他程式對錶加上排他鎖。區別如下:

· 如果乙個程式獲得表的is鎖,程式可以獲得某一行上的s鎖用於唯讀操作,其他程式也可以讀取該行,或者對錶中其他行作出修改。

· 如果乙個程式獲得表的ix鎖,程式可以獲得某一行的x鎖用於更改操作,其他程式可以更改或者讀取表中其他的行。

· 如果乙個程式獲得表的six鎖,程式可以獲得某一行的x鎖用於更改操作,其他程式只能對錶中的其他行進行唯讀操作。

s,u,x,z用於表一級,不需要行鎖的配合。區別如下:

· 如果程式得到表的s鎖,則程式可以讀表中的任意資料,同時允許其他程式獲得表上的唯讀鎖請求,如果有程式需要更改表上的資料,必須等到s鎖釋放。

· 如果程式得到u鎖,程式可以讀取表中任意資料,最終可以通過獲得x鎖得到對錶中任意資料的修改權,其他程式只能讀取表中的資料,u鎖與s鎖的區別在於修改意圖,u鎖的設計主要是為了避免兩個程式在擁有s鎖的情況下同時申請x鎖導致死鎖。

· 如果程式得到表上的x鎖,程式可以讀或者修改表上任意資料,其他程式無法讀或者修改表上的資料。

· 如果程式獲得z鎖,程式可以讀或者修改表中任意資料,其他程式包括未提交讀程式在內不能對錶執行讀或者修改操作。

in鎖用於表上以允許未提交讀這一概念。

預設情況下,db2總是嘗試獲取行鎖,但可以使用alter table語句修改為總是獲取表鎖,也可以使用lock table語句獲取表鎖。

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

背景 生產環境中,我幾乎沒有遇到過鎖表。多是在開發過程中遇到的,比如團隊開發中經常會遇到多個功能訪問同一張表的情況。如果有開發人員在這張表加了排它鎖,然後又忘記提交事務,那麼其他開發人員就要一直等待了。如開發人員在斷點除錯 debug 忘記點通過 資料庫客戶端中修改資料忘記commit 當我們在辦公...

DB2鎖表問題

主要分兩步驟 獲取事物id及正在對該錶進行操作的sql 終止該事物。一 獲取事物id和sql 方法一 已知表名 獲取事物id db2 select distinct agent id from sysibmadm.snaplock where tabnme tabname with ur 檢視正在鎖...

db2檢查什麼表被鎖住了,如何解鎖

出自 1。看鎖表的情況 db2的命令中 db2 get snapshot for locks on databasename 可以看到什麼表被鎖住了。或者看看應用程式執行的情況 2。斷掉連線 通過將所有的程序全部清除 或者 more 出自 1。看鎖表的情況 db2的命令中 db2 get snaps...