Oracle - ALTER TABLE ENABLE TABLE LOCK

时间:2016-10-10 08:02:44

标签: oracle alter

我在其中一个表上执行了ALTER TABLE DISABLE TABLE LOCK,现在我无法启用表锁定。当我在这张桌子上执行时:

ALTER TABLE x ENABLE TABLE LOCK;

我得到了:

  

SQL错误:ORA-00054:资源繁忙且在指定NOWAIT或超时已过期时获取

我检查过来自其他用户的阻止会话,但他杀了他的会话,现在我仍然无法启用表锁。有一个新的锁定会话,看起来像一些系统会话(OSUSER = SYSTEM,PROGRAM = ORACLE.EXE(DIA0),TYPE = BACKGROUND)。

你能帮我解决这个启用表锁的问题吗?

编辑:数据库重启后,我们可以启用表锁。

1 个答案:

答案 0 :(得分:0)

运行此查询以识别锁定对象的会话:

select
   c.owner,
   c.object_name,
   c.object_type,
   b.sid,
   b.serial#,
   b.status,
   b.osuser,
   b.machine
from
   v$locked_object a ,
   v$session b,
   dba_objects c
where
   b.sid = a.session_id
and
   a.object_id = c.object_id;

使用此查询的结果,您可以运行应清除锁定的ALTER SYSTEM KILL SESSION 'sid,serial#';,然后重试获取锁定。

如果你有一个进程可以在你的会话之前重新生成并获取锁,你可以编写一个while循环来检查是否可以通过捕获ORA-00054错误来获取锁,然后重试直到锁可以使用LOCK TABLE x IN EXCLUSIVE MODE NOWAIT;

放置