oracle數(shù)據(jù)表造成死鎖,解決方法
今天早上查看數(shù)據(jù)表的時候發(fā)現(xiàn),數(shù)據(jù)表中多了一條數(shù)據(jù)(這條數(shù)據(jù)不應(yīng)該存在),像往常一樣用delete where語句刪除這條語句,中間卡了一下,然后一直顯示正在執(zhí)行中

先前也遇到過類似的情況,但是那時是因為,我刪除數(shù)據(jù)沒有提交事務(wù),這次不一樣,刪除不了,一直卡在這里,點擊取消后,有沒有事務(wù)的提交與回滾。開 始懷疑是因為其它的人正在操作了這張數(shù)據(jù)表,造成了瑣表,就等了一段時間,后來發(fā)現(xiàn)還是這樣的情況,沒辦法只好百度找解決辦法,問題來了到底是瑣表造成的 原因,還是另有其它的原因呢?出現(xiàn)這種情況,大致可以分為幾種:
1.因為數(shù)據(jù)量過大,造成數(shù)據(jù)刪除緩慢
2.sql語句使用了for update,沒有提交事務(wù)
3.其它的人正在操作這張數(shù)據(jù)表,造成瑣表
排除1,2,解決辦法找到瑣表原因,結(jié)束進程。
一下來自百度-----------------------------
解決辦法
-- 查出被鎖的表,和鎖住這個表的會話ID
1. select a.session_id ,b.* from v$locked_object a,all_objects b
2. where a.object_id=b.object_id
-- 查出對應(yīng)的SQL語句
1. select vs.SQL_TEXT,vsess.sid,vsess.SERIAL#,vsess.MACHINE,vsess.OSUSER
2. ,vsess.TERMINAL,vsess.PROGRAM,vs.CPU_TIME,vs.DISK_READS
3. from v$sql vs,v$session vsess
4. where vs.ADDRESS=vsess.SQL_ADDRESS
5. and vsess.sid=(上面查出來的會話ID)
--查看是哪個session引起的
1. select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
--殺進程
1. ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#'; ---上面這條語句可以查到sid以及serial
ok,現(xiàn)在問題搞定了
本文僅代表作者觀點,版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請在文中注明來源及作者名字。
免責聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請及時與我們聯(lián)系進行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com





