oracle ORA-00054:资源正忙和ORA-00060:检测到死锁的解决办法

一、"ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法:

原因之一:在进行数据修改时somehow数据库 lock住了。

解决办法:

 

SQL> select session_id from v$locked_object;

 

SESSION_ID

----------

       X

 

SQL> SELECT sid, serial#, username, osuser FROM v$session where sid =X

 

       SID   SERIAL# USERNAME                       OSUSER

---------- ---------- ------------------------------------------------------------

      X        Y     SA                            fy

 

 

SQL> ALTER SYSTEM KILL SESSION 'X,Y';

 

三行语句搞定。

 

 

二、ORA-00060:等待资源的时候检测到死锁的解决办法


当ORACLE出现表锁死的情况,会导致其他人员无法编辑相关资料,严重的造成应用程式崩溃。

如何处理表死锁的问题?

 

1、查询锁死的表;
SELECT /*+ rule*/ a.sid, b.owner, object_name, object_type FROM v$lock a, all_objects b WHERE TYPE = 'TM' and a.id1 = b.object_id ;

2、根据SID查询SID和SERIAL#;
SELECT sid,serial# FROM v$session WHERE sid = &sid;

3、根据SID和SERIAL#,杀掉被锁死的表,使之可被编辑。
alter system kill session 'SID,SERIAL#';

 

若是有多个节点,以上SQL语句中,将“v$lock”修改为“gv$lock”,

“v$session ”修改為“gv$session ”,否则会遗漏信息。

 

 三、编译存储过程的时候数据库卡死

 select b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.status from v$lock a , v$session b
where a.SID = b.SID


alter system kill session 'SID,SERIAL#' immediate;

 

你可能感兴趣的:(oracle ORA-00054:资源正忙和ORA-00060:检测到死锁的解决办法)