db2資料庫鎖
A. DB2資料庫發生死鎖了怎麼辦
先定位一下是哪個程序句柄導致的死鎖。方法一、查看db2diag.log文件找到DeadLockorLocktimeout死鎖或鎖超時信息db2forceapplication(句柄ID)直接結束進程即可。方法二、DB2快照信息1、看一下DB2快照信息可以得到類似信息:資料庫鎖定快照資料庫名稱=SAMPLE資料庫路徑=D:\IBM\DB2\NODE0000\SQL00001\輸入資料庫別名=SAMPLE掛起的鎖定=8當前已連接的應用程序=2當前正等待鎖定的代理程序數=1應用程序句柄=54應用程序標識=*LOCAL.DB2.140304192925序號=00001應用程序名=db2bp.exeCONNECT授權標識=DB2ADMIN應用程序狀態=鎖定等待應用程序代碼頁=1208掛起的鎖定=4總計等待時間(毫秒)=247867鎖定列表鎖定名稱=0x5359534C564C3031DDECEF2841鎖定屬性=0x00000000發行版標志=0x40000000鎖定計數=1掛起計數=0鎖定對象名=2312對象類型=行表空間名=IBMDB2SAMPLEREL表模式=DB2ADMIN表名=TEST方式=IX查看鎖定的詳細信息:----(1728是句柄ID)3、觀察命令db2listapplications的輸出查看應用程序的狀態是否有鎖定等待(Lock-wait)狀態出現。執行命令;4、db2forceapplication(句柄ID)直接結束進程即可。
B. db2資料庫裡面的一張表被鎖定,怎麼解鎖
請教各位:DB2資料庫里如何判斷一個表被鎖
1、執行命令打開鎖的監視開光
UPDATE MONITOR SWITCHES USING lock on==>;>;
2、查看資料庫的鎖的情況
get snapshot for locks on tberp
3、某一個用戶的鎖的情況
get snapshot for application applid C0A8084A.040A.031015144751
4、如果表被鎖可以關閉該應用連接
force application ID1
5、看正在運行的程序有沒有處於鎖等待狀態的
list applications for db tberp show detail
C. db2如何解決死鎖
先定位一下是哪個程序句柄導致的死鎖。
方法一、查看db2diag.log文件
找到DeadLock or Lock timeout 死鎖或鎖超時信息
db2 force application(句柄ID)
直接結束進程即可。
方法二、DB2快照信息
1、看一下DB2快照信息
db2 get snapshot for locks on sample
可以得到類似信息:
資料庫鎖定快照
資料庫名稱 = SAMPLE
資料庫路徑 = D:\IBM\DB2\NODE0000\SQL00001\
輸入資料庫別名 = SAMPLE
掛起的鎖定 = 8
當前已連接的應用程序 = 2
當前正等待鎖定的代理程序數 = 1
應用程序句柄 = 54
應用程序標識 = *LOCAL.DB2.140304192925
序號 = 00001
應用程序名 = db2bp.exe CONNECT
授權標識 = DB2ADMIN
應用程序狀態 = 鎖定等待
應用程序代碼頁 = 1208
掛起的鎖定 = 4
總計等待時間(毫秒) = 247867
鎖定列表
鎖定名稱 = 0x5359534C564C3031DDECEF2841
鎖定屬性 = 0x00000000
發行版標志 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 2312
對象類型 = 行
表空間名 = IBMDB2SAMPLEREL
表模式 = DB2ADMIN
表名 = TEST
方式 = IX
查看鎖定的詳細信息:db2 get snapshot for locks for application agentid 1728
----(1728是句柄ID)
3、觀察命令db2 list applications的輸出
查看應用程序的狀態是否有鎖定等待(Lock-wait)狀態出現。
執行命令 list applications for db sample show detail;
4、db2 force application(句柄ID)
直接結束進程即可。
D. 北大青鳥java培訓:在Java程序中處理資料庫超時與死鎖
每個使用關系型資料庫的程序都可能遇到數據死鎖或不可用的情況,而這些情況需要在代碼中編程來解決;本文主要介紹與資料庫事務死鎖等情況相關的重試邏輯概念,此外,還會探討如何避免死鎖等問題,文章以DB2(版本9)與為例進行講解。
什麼是資料庫鎖定與死鎖鎖定(Locking)發生在當一個事務獲得對某一資源的「鎖」時,這時,其他的事務就不能更改這個資源了,這種機制的存在是為了保證數據一致性;在設計與資料庫交互的程序時,必須處理鎖與資源不可用的情況。
鎖定是個比較復雜的概念,仔細說起來可能又需要一大篇,所以在本文中,只把鎖定看作是一個臨時事件,這意味著如果一個資源被鎖定,它總會在以後某個時間被釋放。
而死鎖發生在當多個進程訪問同一資料庫時,其中每個進程擁有的鎖都是其他進程所需的,由此造成每個進程都無法繼續下去。
如何避免鎖我們可利用事務型資料庫中的隔離級別機制來避免鎖的創建,正確地使用隔離級別可使程序處理更多的並發事件(如允許多個用戶訪問數據),還能預防像丟失修改(LostUpdate)、讀「臟」數據(DirtyRead)、不可重復讀(NonrepeatableRead)及「虛」(Phantom)等問題。
隔離級別問題現象丟失修改讀「臟」數據不可重復讀「虛」可重復讀取NoNoNoNo讀取穩定性NoNoNoYes游標穩定性NoNoYesYes未提交的讀NoYesYesYes表1:DB2的隔離級別與其對應的問題現象在只讀模式中,就可以防止鎖定發生,而不用那些未提交只讀隔離級別的含糊語句。
湖北電腦培訓http://www.kmbdqn.cn/發現一條SQL語句當使用了下列命令之一時,就應該考慮只讀模式了