0

我使用alter table disable table lock 子句错误地禁用了对表的锁定。现在我想启用它的锁定,因为我想使用以下语句更改表名:

SQL> alter table account.acctbk_payment_seq 启用表锁;alter table account.acctbk_payment_seq enable table lock * ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

有什么理想吗?

谢谢您的回复。ora 1120 例如:

create table scott.t8 (id number);
alter table scott.t8 disable table lock;
alter table scott.t8 enable table lock;

ORA-00054: 资源繁忙并使用指定的 NOWAIT 获取或超时已过期

4

1 回答 1

1

来自 Oracle 文档:

ENABLE TABLE LOCK 指定 ENABLE TABLE LOCK 以启用表锁,从而允许对表进行 DDL 操作。在 Oracle 数据库启用表锁之前,所有当前正在执行的事务必须提交或回滚。

请注意,这并不是说“所有当前正在执行的正在使用该表的事务”。我不确定这是否真的意味着在整个实例中不能有任何未完成的交易,但情况可能就是这样。

尝试摆脱所有访问数据库的会话,尤其是任何可能针对该表打开事务的会话。如果您仍然收到错误,重新启动实例可能会有所帮助。

更新:听起来您可能需要 Oracle Support 的帮助。但我在支持网站上进行了搜索,发现了一些关于可能原因的注释。可能有一个不确定的分布式事务接触表。查看这些查询是否返回任何内容,如果是,您需要解决这些待处理的事务:

SELECT * FROM DBA_2PC_PENDING;
SELECT * FROM DBA_2PC_NEIGHBORS;
于 2011-04-07T12:52:36.713 回答