查看解決Oracle對象鎖住的問題


在編譯的一個存儲過程的時候,對象可能由於被鎖住而處於假的卡死狀態,這個時候有的是因為,這個過程正在運行中,所以無法編譯;

上次我遇到一次,我很清楚的確定這個過程沒有運行,可以我就是無法編譯,對象一直被鎖。我糾結了好久,終於找到的解決的辦法。

select * FROM dba_ddl_locks where name = upper('p_sys_job_crtpartition_c10');

先從dba_ddl_locks中查詢對象被哪些進程鎖住,得到他們的SESSION_ID;
--alter system kill session 'sid ,SERIAL#';
select t.sid, t.serial#, 'alter system kill session ''' || sid || ' ,' || t.serial# || ''';'
from v$session t
where t.sid in (145, 143, 17, 137, 15, 139, 12, 133);

然后將SESSION_ID傳入v$session中,與sid關聯,可以在oracle中殺掉這些session;
--kill -9 spid;
select spid, osuser, s.program, 'kill -9 ' || spid || ''
from v$session s, v$process p
where s.paddr = p.addr
and s.sid in (145, 143, 17, 137, 15, 139, 12, 133);
第三步,也就是我一直糾結的,就是我發現這些session都是killed狀態的,卻依然鎖着對象不釋放,最后我就通過查詢得到spid,進入OS系統,用root用戶登錄,直接kill -9 XX這些進程,就可以釋放資源了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM