如何查找最后一个锁的时间戳



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

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

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

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

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.
    );

这与"上一次锁定桌子是什么时候"不一定是一回事。可能是表或表中的一行被锁定,但没有会话在上面等待。也可能是会话确实在上面等待,但在采样期间没有。

然而,如果某件事发生的频率不足以出现在会话历史记录表中,那么它通常就不那么重要了。

您可以查询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_HISTORYV$ACTIVE_SESSION_HISTORY来获得关于锁定会话的信息,但不能查询锁定的表。

最新更新