SQL> drop table lba$test;
drop table lba$test
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified –某些操作被上锁了或者其它用户正在执行该表的相关操作!
当某个数据库用户在数据库中插入、更新、删除一个表的数据,或者增加一个表的主键时或者表的索引时,常常会出现ora-00054:resource busy and acquire with nowait specified这样的错误。
主要是因为有事务正在执行(或者事务已经被锁),所有导致执行不成功。
1)用dba权限的用户查看数据库都有哪些锁
SQL> select t2.username, t2.sid, t2.serial#, t2.logon_time from v$locked_object t1, v$session t2
2 where t1.session_id=t2.sid order by t2.logon_time;
USERNAME SID SERIAL# LOGON_TIME
—————————— ———- ———- ———–
SYS 1094 3 2011/6/20 1
2)级联查出是哪个操作导致 根据sid查看具体的sql语句,如果sql不重要,可以kill
SQL> select sql_text from v$session a, v$sqltext_with_newlines b
2 where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value) = b.hash_value and a.sid=&sid order by piece;
SQL_TEXT
—————————————————————-
update lba$test2 set name ='sdfsdf' where id=2 –原来对这个操作枷锁了!
– &sid = 1094;
3)kill该事务
SQL> alter system kill session '1094, 3'; — 'SID, SERIAL#'
System altered
4)这样就可以执行其他的事务sql语句了
SQL> drop table lba$test;
Table dropped