คุณไม่สามารถแสดงรายการทุกแถวที่ถูกล็อคโดยเซสชัน อย่างไรก็ตามเมื่อเซสชันถูกบล็อกโดยอีกคุณสามารถค้นหาเซสชัน / แถวที่ถูกบล็อก
Oracle ไม่เก็บรายการล็อคแถวแต่ละรายการ ค่อนข้างล็อคถูกลงทะเบียนโดยตรงภายในแถว - คิดว่ามันเป็นคอลัมน์พิเศษ
คุณสามารถค้นหาเซสชันที่ได้รับการล็อกบนวัตถุผ่านV$LOCK
มุมมอง แต่จะแสดงเฉพาะข้อมูลทั่วไปไม่ใช่ระดับแถว
ด้วยมุมมองนี้คุณสามารถค้นหาได้ว่าเซสชันถูกบล็อกโดยอีกเซสชันหนึ่งหรือไม่ ในกรณีนั้นหากเซสชันถูกบล็อกโดยเซสชันอื่นข้อมูลแถวจะปรากฏในV$SESSION
ข้อมูล
คุณสามารถดึง rowid มาสร้างตัวอย่างด้วย 2 เซสชัน:
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 กำลังรอเซสชัน 1 เราสามารถค้นพบแถวการบล็อกด้วย:
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
สำหรับการอ่านเพิ่มเติมที่: รายละเอียดของกระบวนการโดยทอม Kyte