在oracle中做增删改,或者修改表结构时,偶尔会会出现ora-00054:resource busy and acquire with nowait specified这样的错误。
主要是因为有事务正在执行(或者事务已经被锁),所有导致执行不成功。
解决方法如下:
1、用dba权限的用户查看数据库都有哪些锁
SELECT T2.USERNAME,T2.SID,T2.SERIAL#,T2.LOGON_TIME
FROM V$LOCKED_OBJECT T1,V$SESSION T2
WHERE T1.SESSION_ID=T2.SID ORDER BY T2.LOGON_TIME;
2、根据sid查看具体的sql语句,如果sql不重要,可以kill
SELECT SQL_TEXT FROM V$SESSION A,V$SQLTEXT_WITH_NEWLINES B
WHERE DECODE(A.SQL_HASH_VALUE, 0, PREV_HASH_VALUE, SQL_HASH_VALUE)=B.HASH_VALUE
AND A.SID=&SID ORDER BY PIECE;
3、kill该事务
ALTER SYSTEM KILL SESSION 'SID,SERIAL#';
即可释放被锁的表,继续进行表的增删改或者修改标结果。