Oracle的TM锁类型 |
|||
锁模式 |
锁描述 |
解释 |
SQL操作 |
0 |
none |
|
|
1 |
NULL |
空 |
Select |
2 |
SS(Row-S) |
行级共享锁,其他对象只能查询这些数据行 |
Select for update、Lock for update、Lock row share |
3 |
SX(Row-X) |
行级排它锁,在提交前不允许做DML操作 |
Insert、Update、Delete、Lock row share |
4 |
S(Share) |
共享锁 |
Create index、Lock share |
5 |
SSX(S/Row-X) |
共享行级排它锁 |
Lock share row exclusive |
6 |
X(Exclusive) |
排它锁 |
Alter table、Drop able、Drop index、Truncate table 、Lock exclusive |
锁定类型:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁
3:Row-X 行专用(RX):用于行的修改
4:Share 共享锁(S):阻止其他DML操作
5:S/Row-X 共享行专用(SRX):阻止其他事务操作
6:exclusive 专用(X):独立访问使用
数字越大锁级别越高, 影响的操作越多。
如果DML没有提交情况下,另一个session提交针对同一资源的DLL,系统报错。
如果DML没有提交情况下,另一个session提交针对同一资源的DML,第二个session会hang住,等待第一个session。
死锁:
系统会系统自动处理,处理方式提出形成死锁的人,错误是ORA-00060
命令行模式处理行级锁
查看锁:
select sid,lock_id from dba_locks where blocking_others='Blocking';
sid列:占用资源sid
select sid from v$lock where type='TX';
block列>0:占用资源sid
block列=0:等待资源sid
SELECT * FROM V$SESSION WHERE BLOCKING_SESSION IS NOT NULL;
sid列:等待资源sid
blocking_session列:占用资源sid
oracle级处理:
杀掉占用资源的session
1. 查询sid和serial#
select sid, serial#
from v$session
where sid = (select blocking_session
from v$session
where blocking_session is not null)
2. 杀进程
alter system kill session 'sid, serial#' immediate;
杀掉等待资源的session
1. 查询sid和serial#
select sid, serial# from v$session where blocking_session is not null;
2. 杀进程
alter system kill session 'sid, serial#' immediate;
系统级处理:
1. 查询系统pid
select s.sid, p.spid
from v$session s, v$process p
where s.paddr = p.addr
and s.sid = 146
2. 杀进程
kill -9 pid