2016-04-01 53 views
1

我想確定哪個進程鎖定了我的表TABLE1,以及鎖定時的時間戳。如何找到最後一個鎖的時間戳?

我想我應該使用像dba_locksgv$session這樣的表,但我是Oracle新手,對系統表我不太瞭解。

任何人都可以幫我解決這個問題嗎?

回答

2

使用此查詢找到最後一次會議上被阻塞等待訪問特定的表:

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

這未必是一回事「當是最後一次表被鎖」 。表格或表格中的一行可能被鎖定,但沒有會話在其上等待。有可能一個會話等待,但不是在樣本期間。

但是,如果某些事情沒有經常出現在會話歷史表中,那麼它通常不足以擔心。

+0

您的查詢爲我帶來了一些意想不到的結果。有10個不同的會話,其中SESSION_TYPE ='FOREGROUND',EVENT ='日誌文件同步',SESSION_STATE ='等待'和BLOCKING_SESSION = 465.我嘗試在v $ session中找到這個blocking_session,但沒有這個會話。所以,我不能確定阻塞會話 – Jdzel

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_HISTORYV$ACTIVE_SESSION_HISTORY以獲取有關鎖定會話但不鎖定表的信息。

+0

С我確定V $ ACTIVE_SESSION_HISTORY中的哪個會話使用我的表TABLE1? – Jdzel

相關問題