admin 管理员组文章数量: 1087652
[ORACLE] ORA
错误信息:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
关键词:ORA-00054 锁等待
原因:如错误信息提示,资源正忙(被占用),一般为有其他进程hold住了这个资源,如insert信息后没有提交,那么其他进程无法对该表做truncate操作。
举例:
A进程新建一张表,插入一行数据,但是没有提交(commit)。
那么B进程想要对此表做truncate,便会报ORA-00054错误。
只有当A进程提交后或资源被释放后,B进程的truncate才可以执行。
请注意,这个情况和两个进程同时对一个资源(如update同一行)进行操作还不同,两个进程同时对一个资源进行操作时,第二个操作会卡住,现象就是在等待,使用sqlplus测试的现象就是回车后卡住,但是truncate会报上图中的错误。
处理方式:可以找出hold住资源的进程,进行commit后释放资源。如无法进行提交的,确认后将其kill掉即可。
SQL> select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
请注意,使用上述语句后出现的所有信息并非全部是问题进程,因为正常的对表进行操作的只要在查询瞬时有hold住资源都会被select出来,所以可以多次使用该命令确认是否资源一直被hold住,并可以观察下面的表名来进行辅助确认。
查询出sid和serial#。
SQL> select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
Kill会话进程。
本文标签: Oracle ORA
版权声明:本文标题:[ORACLE] ORA 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1687147088a69274.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论