之前介绍了oracle几种锁,还没有完全介绍完,下面继续。
5号锁:SSX(SRX)
触发条件:LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
和3~6号锁都不兼容,可以理解为级别最高的表锁
6号锁:X
触发条件:LOCK TABLE table IN EXCLUSIVE MODE;
只允许select
汇总一下触发DML的条件:
Y*如果没有行锁的冲突,就是Y,如果有,那么wait。
这里DML就介绍完了,下面还有DDL锁
DDL锁分类:
DDL专有锁
DDL共享锁
DDL专有锁:用于阻止别的用户在DDL的对象上做定义修改,触发条件:alter table和drop table,DDL也获得DML锁,所以DML中不能操作DDL
DDL共享锁:有些DDL语句是可以并发执行的,在它所涉及的对象上会有DDL共享锁,保护对象的定义变更。、
举例:如果在一个T1表上同时多个用户建立过程或者包等等,就会加一个DDL共享锁,这个时候在T1表上的DML操作是可以的,但是不能更改表的定义,比如alter table add column这种类型。
触发条件:AUDIT, NOAUDIT
, COMMENT
, CREATE
[OR
REPLACE] VIEW
/ PROCEDURE
/PACKAGE/PACKAGE
BODY
/FUNCTION
/TRIGGER
, CREATE SYNONYM
, and CREATE
TABLE
DDL锁的兼容表:
Breakable Parse Locks(易破碎的解析锁)
锁在SQL/PLSQL关联的对象上,不阻塞任何操作。
这个锁是在SQL/PLSQL解释阶段获取,可以通过DBA_DDL_LOCKS查看session占有的破碎解析锁。
DDL锁在执行完自动提交结束后,就消失了。
Breakable Parse Locks,只要SQL/PLSQL在共享池,那么就一直保持。
好了,oracle的全部锁的介绍就到这里。