如何判断一个Oracle表是否被锁定?

Sel*_*tin 34 oracle-11g-r2 business-intelligence locking

我们一直在使用安装在 Oracle Enterprise 11gR2 上的 BI 软件和存储库数据库。

其中一些批处理报告将尝试访问可能仍被锁定的数据库表。如何确定 Oracle 表是否已锁定?是否有任何 SQL 语句显示像历史详细信息以供分析?

小智 48

以下查询提供了所有锁的详细信息。

SELECT B.Owner, B.Object_Name, A.Oracle_Username, A.OS_User_Name  
FROM V$Locked_Object A, All_Objects B
WHERE A.Object_ID = B.Object_ID
Run Code Online (Sandbox Code Playgroud)


小智 16

可以使用以下脚本来快速识别 Oracle 系统中的所有锁定对象。

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;
Run Code Online (Sandbox Code Playgroud)

参考:-Burleson Consulting 的 Oracle Tips http://www.dba-oracle.com/t_find_oracle_locked_objects.htm


Bal*_*app 2

您可以从V$LOCKED_OBJECT查询当前锁定的对象。

不过,没有锁的历史记录,记录所有锁会导致巨大的性能开销并需要存储大量数据。

数据库最接近的是活动会话历史记录V$ACTIVE_SESSION_HISTORYDBA_HIST_ACTIVE_SESS_HISTORY(如果您有适当的许可证来使用它),您可以在其中查看阻塞会话、语句和其他信息,但不能查看锁定的表。否则,您可以尝试查询适当的视图并使用您自己的自定义脚本保存所需的数据。