我想確定哪個進程鎖定了我的表TABLE1,以及鎖定時的時間戳。如何找到最後一個鎖的時間戳?
我想我應該使用像dba_locks
和gv$session
這樣的表,但我是Oracle新手,對系統表我不太瞭解。
任何人都可以幫我解決這個問題嗎?
我想確定哪個進程鎖定了我的表TABLE1,以及鎖定時的時間戳。如何找到最後一個鎖的時間戳?
我想我應該使用像dba_locks
和gv$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_HISTORY
和V$ACTIVE_SESSION_HISTORY
以獲取有關鎖定會話但不鎖定表的信息。
С我確定V $ ACTIVE_SESSION_HISTORY中的哪個會話使用我的表TABLE1? – Jdzel
您的查詢爲我帶來了一些意想不到的結果。有10個不同的會話,其中SESSION_TYPE ='FOREGROUND',EVENT ='日誌文件同步',SESSION_STATE ='等待'和BLOCKING_SESSION = 465.我嘗試在v $ session中找到這個blocking_session,但沒有這個會話。所以,我不能確定阻塞會話 – Jdzel