ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
以上问题是我频繁操作公司测试机oracle数据库时发生的错误(因公司项目二期新需求得重新设计部分表结构,将原始表信息迁移到新表中,原始表与新表字段大多各不一致),据网上查询可能是因为对数据库表频繁操作后(新增数据,创建该列序列,删除
表列触发器)而没有进行事物提交commit,对!我的确没有进行commit提交。所以就出现了标题上面错误。因oracle中有事物锁
的机制,如对一个表中进行了事物操作(增删改)未提交commit,oracle可能就会自动锁定该表对象,(保证数据 的完整性),我
说的是可能,也分情况而定,数据量大或操作太过频繁时可能会出现这种操作,因为我在本地数据库创建简单测试表怎么测试(进
行增删改,不提交事物commit)都没出现公司测试机表被锁问题。在网上翻阅查询该问题的解决方案的确有效,故记录下来,已起
到让自己梳理思路加深记忆和提醒他人作用。
解决方法如下:
1.查找出已被锁定的数据库表及相关的sid、serial#及spid
select object_name as 对象名称,s.sid,s.serial#,p.spid as 系统进程号
from v$locked_object l , dba_objects o , v$session s , v$process p
where l.object_id=o.object_id and l.session_id=s.sid and s.paddr=p.addr;
2.在数据库中灭掉相关session
alter system kill session 'sid,serial';--sid及serial#为第一步查出来的数据。