如何查找上次锁定的时间戳?

时间:2016-04-01 10:08:54

标签: sql oracle locking

我想确定哪个进程锁定了我的表TABLE1,以及锁定它时的时间戳。

我想我应该使用像dba_locksgv$session这样的表,但我是Oracle的新手,我对系统表不太了解。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

使用此查询查找上次阻止会话等待访问特定表的时间:

select max(sample_time) last_block_time
from gv$active_session_history
--Or use this table for further back.
--from dba_hist_active_sess_history
where blocking_session is not null
    and current_obj# =
    (
        select object_id
        from dba_objects
        where owner = 'JHELLER'       --Enter the object owner here.
            and object_name = 'TEST1' --Enter the object name here.
    );

这与&#34不一样;最后一次锁定表时是什么时候#34;。可能表格或表格中的一行被锁定但没有会话等待它。并且会话确实可以等待它,但不是在样本期间。

但是,如果某些事情发生的频率不足以出现在会话历史记录表中,那么它通常不够重要而无法担心。

答案 1 :(得分:1)

您可以查询V$LOCKED_OBJECT以获取有关当前锁定对象的信息。

SQL> desc v$locked_object;
 Name                  Null?    Type
 -------------------- -------- ----------------------------
 XIDUSN                         NUMBER
 XIDSLOT                        NUMBER
 XIDSQN                         NUMBER
 OBJECT_ID                      NUMBER
 SESSION_ID                     NUMBER
 ORACLE_USERNAME                    VARCHAR2(30)
 OS_USER_NAME                       VARCHAR2(30)
 PROCESS                        VARCHAR2(24)
 LOCKED_MODE                        NUMBER

Oracle不会保留锁定历史记录。但是,您可以查询DBA_HIST_ACTIVE_SESS_HISTORY amd V$ACTIVE_SESSION_HISTORY以获取有关锁定会话的信息,但不能获取锁定的表格。