Bir oturum tarafından kilitlenen tüm satırları gerçekten listeleyemezsiniz . Ancak, bir oturum başka biri tarafından engellendiğinde , hangi oturumun / satırın onu engellediğini bulabilirsiniz.
Oracle, tek tek satır kilitlerinin listesini tutmaz. Daha ziyade, kilitler doğrudan satırların içine kaydedilir - bunu ekstra bir sütun olarak düşünün.
Hangi oturumun bir nesne üzerinde kilit elde ettiğini V$LOCK
görünüm yoluyla bulabilirsiniz , ancak bu satır düzeyinde değil, yalnızca genel bilgileri listeler.
Bu görünümle, bir oturumun başka biri tarafından engellenip engellenmediğini de bulabilirsiniz. Bu durumda, bir oturum başka bir oturum tarafından engellenirse , satır bilgileri bilgide görüntülenir V$SESSION
.
Rowid'i alabilirsiniz, 2 oturumla bir örnek oluşturalım:
SESSION1> create table test as select * from all_objects;
Table created
SESSION1> select rowid from test where object_name = 'TEST' for update;
ROWID
------------------
AAMnFEAAaAAALTDAAz
/* setting identifiers to help with identifying this session later */
SESSION2> exec dbms_application_info.set_client_info('012345');
PL/SQL procedure successfully completed
SESSION2> select 1 from test where object_name = 'TEST' for update;
/* this will block */
2. Oturum şimdi 1. Oturumda bekliyor. Engelleme satırını aşağıdakilerle keşfedebiliriz :
SESSION1> SELECT o.object_name,
2 dbms_rowid.ROWID_CREATE (1,
3 s.ROW_WAIT_OBJ#,
4 s.ROW_WAIT_FILE#,
5 s.ROW_WAIT_BLOCK#,
6 s.ROW_WAIT_ROW#) rid
7 FROM dba_objects o, v$session s
8 WHERE o.object_id = s.row_wait_obj#
9 AND s.client_info = '012345';
OBJECT_NAME RID
--------------- ------------------
TEST AAMnFEAAaAAALTDAAz
Daha fazla okuma için: Tom Kyte'nin sürecinin açıklaması .