ORACLE锁表

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;



你可能感兴趣的:(ORACLE-TOP)