Oracle DML 锁类型
1. exclusive 排它锁:阻止其它会话加排它锁和共享锁.
2. share 共享锁:阻止其它会话加排它锁.
DML锁分为表级与行级
表级锁包括:
lock table t1 in exclusive mode; // 6
lock table t1 in share mode; // 4
行级锁包括:
lock table t1 in row share mode; //2 行级共享锁(共享更新锁)
lock table t1 in row exclusive mode; //3 行级排它锁
对于2:
行级共享锁的会话能阻止其它会话已被共享锁锁定的行数持有排它锁.
对于3:
行级排它锁的会话能更新锁定的行数,其它会话更新会被挂起.
对于4:
表级共享锁的会话能阻止其它会话持有排它锁.
对于6:
表级排它锁的会话能阻止其它会话持有排它锁和共享锁.
ORACLE 事务隔离级别:
隔离级别定义了事务与事务之间的隔离程度.隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。
1) read committed
这是ORACLE缺省的事务隔离级别.
2) serializable
允许在本事务中进行DML操作.
3) read-only
不允许在本事务中进行DML操作.
脏读 不可重复读 幻读
read committed 不可能 可能 可能
serializable 不可能 不可能 不可能
设置隔离级别:
设置事务的隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION READ ONLY;
设置会话的隔离级别
ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;
ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED;
查询死锁:
-- 查询死锁
SELECT S.USERNAME,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;
SELECt * FROM v$locked_object WHERE SESSION_ID = '14'; --SESSION_ID
-- 查询会话详细信息
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='11'; --SID
-- 结束会话
ALTER SYSTEM KILL SESSION '11, 21'; --SID, SERIAL#
-- 查询进程ID,Oracle 每个会话都会有一个进程对应
SELECT SPID FROM V$PROCESS WHERE ADDR='2F0830DC'; --PADDR
-- 结束进程
KILL -9 2964 --SPID