监控和探测锁机制
Oracle锁机制特点
自动管理
高级别的数据并发性
DML事物需要行级别的锁
查询不需要锁
排他和共享锁模式
排他锁:修改资源的时候,排他锁释放之前,其他用户不能操作.
共享锁:当多个用户读取数据的时候,数据添加共享锁,防止排它锁的使用.
锁直到提交和回滚之前一致被锁住
主要的两种类型
DML或者数据锁(TM):
表级别的锁(共享锁):SELECT .... FOR UPDATE
行级别的锁(排他锁):INSERT,UPDATE,DELETE
DDL或者字典锁(TX)
相关的视图:
v$session
v$transaction
v$lock:
type:TM,TX,UL
lmode:锁类型.
select sid,type,id1,id2,lmode,request from v$lock;
request:不等于0表示,处于等待状态.
select object_id,object_name,object_type
from dba_objects where object_id=?
select sid,type,trunc(id1/power(2,16)) rbs,
bitand(id1,to_number('ffff','xxxx'))+0 slot,id2 req,request
from v$lock
where sid=?
v$mystat:
lock table table_name in share mode;
SRS模式
lock table table_name in row share mode;
lock table table_name in row exclusive mode;
lock table table_name in exclusive mode;
DDL锁
排他DDL锁:
Drop table语句
alter table语句
(DDL完成锁释放)
共享DDL锁:
create procedure语句
audit语句
(当DDL 解析完毕,锁释放)
breakable 解析锁:共享内存中已经解析的SQL使用的时候使用.
建议:在开发时候,不要手动改变锁的行为,及时提交事物的信息.
诊断工具
v$lock
v$locked_object
dba_waiters
dba_blockers
kill会话的方式
select sid,serial# from v$session;