暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

原创 jieguo 2023-07-13
491

在做DDL操作的时候,我们可能会遇到被阻塞的情况,此时如果必须快速完成DDL操作,那么可以参考如下办法处理:

思路:检查阻止当前会话DDL变更系统进程号,杀之。

以重命名表为例:

窗口1:
SQL> show parameter ddl;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout                     integer     0
enable_ddl_logging                   boolean     FALSE

SQL> alter table TEST rename to TEST_0712;--这个可以是其它DDL操作
alter table TEST rename to TEST_0712;
       *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
复制

窗口1查看自身会话ID:

SQL> select distinct sid from v$mystat;

       SID
----------
       110

复制

窗口2:
窗口2检查阻塞的会话:


SQL> select b.INST_ID,b.sid,b.paddr,b.sql_id,b.event,b.MACHINE,b.PROGRAM,'kill -9 '||c.spid from gv$session a,gv$session b ,gv$process c where a.sid=110 and a.FINAL_BLOCKING_INSTANCE=b.INST_ID and a.FINAL_BLOCKING_SESSION=b.sid and b.paddr=c.addr and  b.inst_id=c.inst_id;
例如结果返回了kill -9 8888

复制

窗口2根据输出的结果执行:

linux系统:
kill -9 8888
windows系统:
C:\Users\Administrator>orakill oradb 8888

复制

回到窗口1执行

SQL> alter session set ddl_lock_timeout=300;

Session altered.

SQL>
SQL>
SQL> alter table TEST rename to TEST_0712;

Table altered.
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论