Bạn có thể không thực sự liệt kê tất cả các hàng đang được khóa bởi một phiên làm việc. Tuy nhiên, một khi phiên bị chặn bởi một phiên khác, bạn có thể tìm thấy phiên / hàng nào đang chặn phiên đó.
Oracle không duy trì một danh sách các khóa hàng riêng lẻ. Thay vào đó, các khóa được đăng ký trực tiếp bên trong các hàng - hãy nghĩ về nó như một cột phụ.
Bạn có thể tìm thấy phiên nào đã có được khóa trên một đối tượng thông qua V$LOCK
chế độ xem, nhưng điều này sẽ chỉ liệt kê thông tin chung, không phải ở cấp hàng.
Với chế độ xem này, bạn cũng có thể tìm thấy nếu một phiên bị chặn bởi một phiên khác. Trong trường hợp đó, nếu một phiên bị chặn bởi một phiên khác, thông tin hàng được hiển thị trong V$SESSION
thông tin.
Bạn có thể truy xuất rowid, hãy xây dựng một ví dụ với 2 phiên:
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 */
Phần 2 hiện đang chờ trong Phần 1. Chúng ta có thể khám phá hàng chặn với:
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
Để đọc thêm: một mô tả về quá trình của Tom Kyte .