Ketika rekaman dikunci, bisakah kita tahu yang mana yang dikunci?
Bagaimana saya bisa mendapatkan record rowid atau info lainnya?
Saya bisa mendapatkan info dengan sql ini
SELECT c.ROW_WAIT_OBJ#,c.ROW_WAIT_FILE#,c.ROW_WAIT_BLOCK#,c.ROW_WAIT_ROW#
FROM v$locked_object a, dba_objects b, v$session c
WHERE a.object_id = b.object_id
AND a.SESSION_ID = c.sid(+)
Saya menemukan metode di web untuk mendapatkan rowid dengan menggunakan fungsi DBMS_ROWID.ROWID_CREATE()
Tapi sepertinya itu tidak berhasil.
V$LOCK
.Jawaban:
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:
Sesi 2 sekarang menunggu pada Sesi 1. Kita dapat menemukan deretan pemblokiran dengan:
Untuk bacaan lebih lanjut: deskripsi proses oleh Tom Kyte .
sumber
Anda dapat menemukan semua kunci tabel di database Oracle dengan menjalankan kueri berikut
sumber