首页 > 代码库 > oracle锁

oracle锁

分为排它锁和共享锁,当一个事务获得排它锁后,其它事务不能进行读或写操作,当一个事务获得共享锁后,其它事务可以进行读操作但不能写。

排它锁也叫写锁或x锁,共享锁叫读锁或s锁。

按保护内容来分:

dml锁,保护数据的完整和一致性,分tm锁(又称表级锁)和tx锁(又称行级锁或事务锁)

ddl锁,保护数据对象结构,比如table,index

内部锁,保护数据库内部结构,比如sga

当oracle进行insert、delete、update、select for update操作,oracle会自动申请tm锁,然后再申请tx锁,tx锁只能是排它锁,共享锁没有意义,oracle在表上面默认是共享锁。

TM锁包括了SS、SX、S、X等多种模式,在数据库中用1-6来表示。不同的SQL操作产生不同类型的TM锁。如下表:

1 Select,有时会在v$locked_object出现。
2 相应的sql有:Select for update ,Lock xxx in  Row Share mode,select for update当对
话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独
占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update
操作。
3 相应的sql有:Insert, Update, Delete, Lock xxx in Row Exclusive mode,没有commit
之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们
必须释放掉上一个才能继续工作。
4 相应的sql有:Create Index, Lock xxx in Share mode
5 相应的sql有:Lock xxx in Share Row Exclusive mode,当有主外键约束时update
/delete ... ; 可能会产生4,5的锁。
6 相应的sql有:Alter table, Drop table, Drop Index, Truncate table, Lock xxx in Exclusive
mode

oracle锁