Oracle - ALTER表启用表锁定

bq8i3lrv  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(232)

我在一个表上执行了ALTER TABLE DISABLE TABLE LOCK,现在无法启用表锁回。当我在这个表上执行时:

ALTER TABLE x ENABLE TABLE LOCK;

我得到:
SQL错误:ORA-00054:资源忙碌,且已指定NOWAIT或逾时已过期
我检查到有一个来自其他用户的阻塞会话,但他终止了他的会话,现在我仍然无法启用表锁。有一个新的锁定会话,看起来像某个系统会话(OSUSER=SYSTEM,PROGRAM=ORACLE.EXE(DIA 0),TYPE=BACKGROUND)。
您能帮我启用表锁吗?
编辑:数据库重启后,我们能够启用表锁定。

jogvjijk

jogvjijk1#

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

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;放置锁来检查是否可以获取锁

相关问题