创建索引的时候报错ORA-00054: resource busy and acquire with NOWAIT specified
解决步骤:
1:等待其他会话释放资源
2:找出占用资源的会话,并删除
3:重启数据库
原理分析:
1:创建索引时会产生的锁
2:dml 语句会产生的锁
3:索引创建时加上关键字 online时产生的锁
找出占用资源的会话,并删除
1:找出所有被锁的对象,定位出哪个回话占用
select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o where l.object_id=o.object_id
结果:
session_id owner object_name
158 SA TEST_1
...
对比想要创建的索引,定位哪些会话需要被删除
2:找出所有照成锁的会话
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;
结果:
username sid serial# logon_time
SA 158 15184 2014/12/4 14:55:59
...
3:kill 所有占用资源的会话
命令形式:alter system kill session 'sid,serial#';
占用test_1的资源的会话:
alter system kill session '158,15184';
...
4.重启数据库
如果数据不重要的话,可以重启数据库回滚所有未提交事务,将资源释放出来。