1. 锁模式:0(None),1(null),2(row share), 3(row exclusive),4 (share),5(share row exclusive),6(exclusive)
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁,sub share
3:Row-X 行独占(RX):用于行的修改,sub exclusive
4:Share 共享锁(S):阻止其他DML操作,share
5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive
6:exclusive 独占(X):独立访问使用,exclusive
2.v$locked_object视图字段说明
字段名称 |
类型 |
说明 |
XIDUSN |
NUMBER |
回滚段号; |
XIDSLOT |
NUMBER |
槽号; |
XIDSQN |
NUMBER |
序列号; |
OBJECT_ID |
NUMBER |
被锁对象标识; |
SESSION_ID |
NUMBER |
持有锁的会话(SESSION)标识; |
ORACLE_USERNAME |
VARCHAR2(30) |
持有该锁的用户的Oracle用户名; |
OS_USER_NAME |
VARCHAR2(15) |
持有该锁的用户的操作系统用户名; |
PROCESS |
VARCHAR2(9) |
操作系统的进程号; |
LOCKED_MODE |
NUMBER |
锁模式; |
3.v$lock视图字段说明
字段名称 |
类型 |
说明 |
SID |
NUMBER |
会话(SESSION)标识; |
TYPE |
VARCHAR(2) |
区分该锁保护对象的类型; |
ID1 |
NUMBER |
锁标识1; |
ID2 |
NUMBER |
锁标识2; |
LMODE |
NUMBER |
锁模式:0(None),1(null),2(row share), 3(row exclusive),4 (share),5(share row exclusive),6(exclusive) |
REQUEST |
NUMBER |
申请的锁模式:具体值同上面的LMODE |
CTIME |
NUMBER |
已持有或等待锁的时间; |
BLOCK |
NUMBER |
是否阻塞其它锁申请; |
4.死锁相关的查询语句
(1)查询死锁占用的时间
SELECT decode(request, 0, 'holder:', 'waiter:') || sid sid,
id1,
id2,
lmode,
request,
TYPE,
ctime / 60 锁定时间
FROM v$lock
WHERE (id1, id2, TYPE) IN
(SELECT id1, id2, TYPE FROM v$lock WHERE request > 0)
ORDER BY id1, request
(2)查询以下语句得到 SID和SERIAL#,使用 ALTER SYSTEM KILL SESSION '查出的SID,查处的SERIAL#' 杀死进程。
例如:ALTER SYSTEM KILL SESSION '30,819';
SELECT sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
FROM v$locked_object lo, dba_objects ao, v$session sess
WHERE ao.object_id = lo.object_id
AND lo.session_id = sess.sid
(3)如果在ORACLE中不能杀死进程,我们只能到操作系统中,使用操作系统命令杀死进程。
查询一下语句得到SPID,使用 KILL -9 "查出的SPID"
SELECT a.username,
a.machine,
a.program,
b.spid,
a.sid,
a.serial#,
a.status,
c.piece,
c.sql_text
FROM v$locked_object lo,
v$session a, v$process b, v$sqltext c
WHERE lo.session_id = a.sid
AND b.addr = a.paddr
AND a.sql_address = c.address(+)
ORDER BY c.piece;