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