Anda tidak dapat benar-benar daftar semua baris yang dikunci oleh sesi. Namun, begitu suatu sesi diblokir oleh orang lain, Anda dapat menemukan sesi / baris mana yang memblokirnya.
Oracle tidak memelihara daftar kunci baris individual. Sebaliknya, kunci terdaftar langsung di dalam baris itu sendiri - anggap saja sebagai kolom tambahan.
Anda dapat menemukan sesi mana yang telah mendapatkan kunci pada objek melalui V$LOCK
tampilan, tetapi ini hanya akan mencantumkan informasi umum, bukan pada tingkat baris.
Dengan tampilan ini Anda juga dapat menemukan apakah suatu sesi diblokir oleh orang lain. Dalam hal itu, jika suatu sesi diblokir oleh sesi lain, informasi baris ditampilkan dalam V$SESSION
informasi.
Anda dapat mengambil rowid, mari kita buat contoh dengan 2 sesi:
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 */
Sesi 2 sekarang menunggu pada Sesi 1. Kita dapat menemukan deretan pemblokiran dengan:
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
Untuk bacaan lebih lanjut: deskripsi proses oleh Tom Kyte .