教您如何檢查oracle死鎖
oracle死鎖問題一直困擾著我們,下面就教您一個(gè)oracle死鎖的檢查方法,如果您之前遇到過oracle死鎖方面的問題,不妨一看。
一、數(shù)據(jù)庫死鎖的現(xiàn)象
程序在執(zhí)行的過程中,點(diǎn)擊確定或保存按鈕,程序沒有響應(yīng),也沒有出現(xiàn)報(bào)錯(cuò)。
二、oracle死鎖的原理
當(dāng)對(duì)于數(shù)據(jù)庫某個(gè)表的某一列做更新或刪除等操作,執(zhí)行完畢后該條語句不提交,另一條對(duì)于這一列數(shù)據(jù)做更新操作的語句在執(zhí)行的時(shí)候就會(huì)處于等待狀態(tài),此時(shí)的現(xiàn)象是這條語句一直在執(zhí)行,但一直沒有執(zhí)行成功,也沒有報(bào)錯(cuò)。
三、oracle死鎖的定位方法
通過檢查數(shù)據(jù)庫表,能夠檢查出是哪一條語句被死鎖,產(chǎn)生死鎖的機(jī)器是哪一臺(tái)。
1)用dba用戶執(zhí)行以下語句
- select username,lockwait,status,machine,program from v$session where sid in
- (select session_id from v$locked_object)
如果有輸出的結(jié)果,則說明有死鎖,且能看到死鎖的機(jī)器是哪一臺(tái)。字段說明:
Username:死鎖語句所用的數(shù)據(jù)庫用戶;
Lockwait:死鎖的狀態(tài),如果有內(nèi)容表示被死鎖。
Status: 狀態(tài),active表示被死鎖
Machine: 死鎖語句所在的機(jī)器。
Program: 產(chǎn)生死鎖的語句主要來自哪個(gè)應(yīng)用程序。
2)用dba用戶執(zhí)行以下語句,可以查看到被死鎖的語句。
- select sql_text from v$sql where hash_value in
- (select sql_hash_value from v$session where sid in
- (select session_id from v$locked_object))
【編輯推薦】