alter table enable table lock;和ORA-00054

时间:2011-04-07 10:37:30

标签: sql oracle ora-00054

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

SQL> alter table account.acctbk_payment_seq enable table lock; alter table account.acctbk_payment_seq启用表锁 * 第1行的错误: ORA-00054:资源繁忙并在指定NOWAIT或超时过期时获取

任何理想?

谢谢你的回复。 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或超时过期时获取

1 个答案:

答案 0 :(得分:1)

来自Oracle docs:

  

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

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

尝试删除访问数据库的所有会话,尤其是可能针对此表打开事务的任何会话。如果仍然出现错误,重新启动实例可能会有所帮助。

更新:听起来您可能需要Oracle支持部门的帮助。但我在支持网站上进行了搜索,并找到了一些关于可能原因的说明。触摸桌面可能存在一个不确定的分布式交易。查看这些查询是否返回任何内容,如果是,则需要解决这些挂起的事务:

SELECT * FROM DBA_2PC_PENDING;
SELECT * FROM DBA_2PC_NEIGHBORS;