首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle ORA-00054,但可能没有锁

Oracle ORA-00054,但可能没有锁
EN

Stack Overflow用户
提问于 2016-12-01 21:56:56
回答 1查看 456关注 0票数 4

我有一个遗留代码,它执行以下操作:

代码语言:javascript
复制
ALTER TABLE A RENAME TO B;
ALTER TABLE C RENAME TO A;
ALTER TABLE B RENAME TO C;

它正在交换两个表A和C。

问题:第三个alter table DDL抛出错误:

ORA-00054资源繁忙

我不明白在前两个DDL之后怎么会有锁?此时,每个事务都应该已经提交。

这种情况经常发生,但并不总是如此--有时有效,有时无效。

在交换过程中,不可能有其他会话更改了这些表的数据--首先是非常短的操作,其次--实际上只使用了一个表(表A),第二个更像是存档,所以没有人在上面执行任何DML。即使我们假设不太可能的情况下,有人确实设法连接并锁定了一些东西-这是如此短的时间,我可以理解如果它发生一次,但它发生在每2-3个交换之后。

毫无线索。有没有可能在重命名表后一些旧的锁仍然是活动的?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-10-17 14:23:55

在第二条语句运行之后,但在第三条语句运行之前,某个其他会话可能会锁定表B (或者可能是子表或父表,或者依赖的PL/SQL包,等等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40912519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档