作者:思念如此难受_351 | 来源:互联网 | 2014-07-09 16:02
解决oracle数据库ora-00054:resourcebusyandacquirewithNOWAITspecified错误本人在使用pl/sqldeveloper客户端调用存储过程进行操作时发现中途卡机然后强制终止pl/sqldeveloper之后,oracle就...Sy
解决oracle
数据库ora-00054:resource busy and acquire with NOWAIT specified错误
本人在使用pl/sql developer 客户端调用存储过程进行操作时发现中途卡机然后强制终止pl/sql developer 之后,oracle就一直出现锁相关的错误。
www.2cto.com
经分析认为在调用存储过程时对表进行了DDL语句操作时导致了悲观封锁。客户端卡机后oracle一直没有对这个锁进行释放且一直不会完成释放导致错误。
需要对此会话进行强制杀掉:
1. 查询当前被锁的对象
SELECT * FROM V$LOCKED_OBJECT WHERE ORACLE_USERNAME= 'ATHENA';
SQL> SELECT * FROM V$LOCKED_OBJECT WHERE ORACLE_USERNAME= 'ATHENA';
XIDUSN XIDSLOT XIDSQN OBJECT_ID SESSION_ID ORACLE_USERNAME OS_USER_NAME PROCESS LOCKED_MODE
---------- ---------- ---------- ---------- ---------- ------------------------------ ------------------------------ ------------ -----------
19 11 79134 76618 436 ATHENA Administrator 3512:1272 3
11 28 74487 76617 574 ATHENA Administrator 2412:3928 3
20 25 75512 76620 594 ATHENA Administrator 4064:4060 3
2. 查询session信息
SQL> SELECT v.sid,v.SERIAL#,v.USERNAME,v.ACTION FROM v$session v WHERE v.sid IN (SELECT session_id FROM v$locked_object WHERE ORACLE_USERNAME= 'ATHENA') AND V.MACHINE='NBCB\KJB-080701N';
SID SERIAL# USERNAME ACTION
---------- ---------- ------------------------------ --------------------------------
436 62365 ATHENA 测试窗口 - procedure PROC_HIS_AR
574 60824 ATHENA 测试窗口 - procedure PROC_HIS_AR
594 15217 ATHENA 测试窗口 - procedure PROC_HIS_AR
www.2cto.com
3. 杀会话
语法:
ALTER SYSTEM KILL SESSION 'SID,SERIAL#';
例如:
ALTER SYSTEM KILL SESSION '436,62365';
返回:ora-00031:session marked for kill. 此会话没有被杀掉,只是标记为要杀掉。
可查询
SELECT spid,osuser,s.PROGRAM FROM v$session s,v$process p WHERE s.PADDR=p.ADDR AND s.SID=436;
然后登陆到操作
系统上使用如下命令进行操作系统级别的杀进程
语法:orakill sid thread 或者 #kill -9 spid
例如: orakill 数据库实例名 ${spid};
实在不行只能重启数据库