oracle锁的概念-1
oracle锁的概念-1
一、锁(lock)
1、锁的概念:
数据库是一个多用户使用的共享资源。当多个用户并发的存取数据时,在数据库中就存在多个事务同时存取同一数据的情况。如果对这种并发操作不加以控制就可能会读取和存储不正确的数据,破坏数据的一致性。
加锁是实现数据库并发控制的一个非常重要的技术,当事务在对某个数据对象进行操作前,先向系统发送请求,对其加锁,加锁后事务就对该对象有了一定的控制,在该事务释放锁之前,其他事务不能对数据对象进行操作。
在oracle数据库中,它并不是对某个表加上锁或者某几行加上锁,锁是以数据块的一个属性存在,也就是说,每个数据块就存储着自己数据块中数据的信息,这个地方叫ITL(Interested Transaction List),凡是在这个数据块上有活动的事务,它的信息就就会记录在里面供后续的操作查询,以保证事务的一致性。
2、锁的分类:
按照用户来分
a)、自动锁(Automatic Locks):当进行一项数据库操作时,在缺省情况下,系统自动为此数据库操作获得所有必要的锁。自动锁分DML锁,DDL锁,system locks。
b)、显示锁(Manual Locks):在某些情况下,用户需要显示的锁定数据库操作用到的数据,才能使数据库操作更好的执行,显示锁是用户为数据库对象设定的。
按照锁级别来分
a)、共享锁(S):共享锁使一个事务对特定数据库资源进行共享访问——另一个事务也可以对此资源进行访问或获得相同的共享锁,共享锁为事务提高并发性。
b)、排他锁(X):事务设置排他锁后,该事务单独的获取资源,另一个事务不能在此事务提交之前获得相同对象的共享锁或排他锁。
按照操纵来分
a)、DML锁:用于控制并发事务中的数据操纵,保证数据的一致性和完整性
,DML锁主要用于保护并易做图况下数据的完整性。它又分为:
TX锁(事务锁或行级锁):
TX锁主要对一个表中一行记录进行加锁,当进行Insert 、update、delete、merge和select ……for update 时,系统会自动获取TX锁,直到此事务commit或rollback,才能事务该锁。
当一个事务获得了行级锁(TX锁)时,同时此事务也会获取该行对应表级锁,表级锁可以阻止DDL的操作,以保证数据的完整性。
TM锁(表级锁):
当一个事务在进行Insert、update、delete、merge和select ……for update时,系统会自动为该事务分配一个表级锁(TM锁)