2016-04-01 6 views
1

Ich möchte feststellen, welcher Prozess meine Tabelle TABLE1 und den Zeitstempel sperrt, wenn sie gesperrt wurde.Wie finde ich den Zeitstempel der letzten Sperre?

Ich nehme an, dass ich Tabellen wie dba_locks und gv$session verwenden sollte, aber ich bin neu auf Oracle und ich weiß nicht viel über Systemtabellen.

Kann mir jemand mit dieser Frage helfen?

Antwort

2

Verwenden Sie diese Abfrage das letzte Mal finden eine Sitzung gesperrt wurde für den Zugriff auf eine bestimmte Tabelle warten:

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

Dies ist nicht unbedingt dasselbe wie „wann war das letzte Mal, wenn die Tabelle gesperrt wurde“ . Es ist möglich, dass die Tabelle oder eine Zeile in der Tabelle gesperrt wurde, aber keine Sitzungen darauf gewartet haben. Und es ist möglich, dass eine Sitzung darauf gewartet hat, aber nicht während der Probe.

Wenn jedoch etwas nicht oft genug geschieht, um in den Sitzungsverlaufstabellen angezeigt zu werden, ist es normalerweise nicht wichtig genug, um sich Sorgen zu machen.

+0

Ihre Abfrage bringt mir einige unerwartete Ergebnisse. Es gibt 10 verschiedene Sessions, die SESSION_TYPE = 'FOREGROUND', EVENT = 'Protokolldateisynchronisation', SESSION_STATE = 'WAITING' und BLOCKING_SESSION = 465 haben. Ich versuche diese blocking_session in v $ Session zu finden, aber es gibt keine Session. Also kann ich die Blockierungssitzung noch nicht bestimmen – Jdzel

1

Sie können V$LOCKED_OBJECT abfragen, um Informationen über aktuell gesperrte Objekte abzurufen.

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 behält die Geschichte der Sperren nicht bei. Sie können jedoch DBA_HIST_ACTIVE_SESS_HISTORY und V$ACTIVE_SESSION_HISTORY abfragen, um Informationen zur Sperrsitzung, aber nicht zu den gesperrten Tabellen abzurufen.

+0

Kann ich feststellen, welche Sitzung in V $ ACTIVE_SESSION_HISTORY meine Tabelle TABLE1 verwendet? – Jdzel