由於各種原因,Oracle 中經常會出現表被鎖定的現象,使的操作無法進行。
第一、與表鎖有關的系統檢視表:
A : v$lock
SQL> desc v$lock;
Name Type Nullable Default Comments
------- ----------- -------- ------- --------
ADDR RAW(8) Y
KADDR RAW(8) Y
SID NUMBER Y
TYPE VARCHAR2(2) Y
ID1 NUMBER Y
ID2 NUMBER Y
LMODE NUMBER Y
REQUEST NUMBER Y
CTIME NUMBER Y
BLOCK NUMBER Y
該視圖說明當前鎖定的所有對象,鎖定都的SID號,鎖定類型等資訊;
B: v$locked_object
SQL> desc v$locked_object;
Name Type Nullable Default Comments
--------------- ------------ -------- ------- --------
XIDUSN NUMBER Y
XIDSLOT NUMBER Y
XIDSQN NUMBER Y
OBJECT_ID NUMBER Y
SESSION_ID NUMBER Y
ORACLE_USERNAME VARCHAR2(30) Y
OS_USER_NAME VARCHAR2(30) Y
PROCESS VARCHAR2(12) Y
LOCKED_MODE NUMBER Y
用以詳細的描述了當前鎖定對象的詳細資料,OBJECT_ID 為對象ID,SESSION_ID為當前登入使用者Session號,ORACLE_USERNAME 為Oracle的使用者名稱,OS_USER_NAME 為作業系統使用者名稱等等。
針對以上兩個系統檢視表,相應的有兩種查詢當前表鎖的方法:
SQL> select all_objects.object_name,
2 S.SID,
3 s.serial#,
4 s.osuser,
5 s.PROGRAM,
6 s.machine,
7 s.CLIENT_INFO
8 from v$lock k, v$session s, ALL_OBJECTS
9 where k.SID = s.SID
10 and k.TYPE IN ('TX', 'TM')
11 and k.id1 = all_objects.object_id;
OBJECT_NAME SID SERIAL# OSUSER PROGRAM MACHINE CLIENT_INFO
----------- ----- ------ ------- -------- -------- ------------
DL_PORT 153 2 Administrator mdiapp.exe WN-WHZ/GUANXIAN1 135.135.140.101
DL_LOCAL_PORT 153 2 Administrator mdiapp.exe WN-WHZ/GUANXIAN1 135.135.140.101
使用該種方法時,效率較低。
第二種:
SQL> select o.object_name,
2 l.session_id,
3 s.serial#,
4 s.program,
5 s.username,
6 s.command,
7 s.machine,
8 s.lockwait
9 from v$locked_object l, all_objects o, v$session s
10 where o.object_id = l.object_id
11 and s.sid = l.session_id
12 ;
OBJECT_NAME SESSION_ID SERIAL# PROGRAM USERNAME COMMAND MACHINE LOCKWAIT
---------- ---------- -------- --------- -------- ------- ------- ----------
DL_LOCAL_PORT 190 3 mdiapp.exe GSGIS 0 WORKGROUP/QYGIS19
DL_PORT 190 3 mdiapp.exe GSGIS 0 WORKGROUP/QYGIS19