Oracle - 更改表启用表锁

问题描述 投票:0回答:1

我在我们的一张桌子上做了

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

ALTER TABLE x ENABLE TABLE LOCK;

我得到:

SQL 错误:ORA-00054:资源繁忙并在指定 NOWAIT 的情况下获取或超时已过期

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

您能帮我启用表锁吗?

编辑:数据库重新启动后,我们能够启用表锁定。

oracle alter
1个回答
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;

© www.soinside.com 2019 - 2024. All rights reserved.