甲骨文锁的机制介绍

  介绍

这篇文章主要讲解了“甲骨文锁的机制介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“甲骨文锁的机制介绍”吧!



数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性只

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作只

在数据库中有两种基本的锁类型:排它锁(独占锁,即X锁)和共享锁(分享   锁,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制只

甲骨文数据库的锁类型,

根据保护的对象不同,甲骨文数据库锁可以分为以下几大类:DML锁(数据   锁,数据锁),用于保护数据的完整性;DDL锁(字典   锁,字典锁),用于保护数据库对象的结构,如表,索引等的结构定义;内部锁和闩(内部锁和锁存器),保护   数据库的内部结构只

DML锁的目的在于保证并发情况下的数据完整性。在甲骨文数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁只

当甲骨文执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率.TM锁包括了党卫军,SX,年代,X   等多种模式,在数据库中用-来表示。不同的SQL操作产生不同类型的TM锁只

在数据行上只有X锁(排他锁)。在甲骨文数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行   DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁只

当甲骨文数据库发生TX锁等待时,如果不及时处理常常会引起甲骨文数据库挂起,或导致死锁的发生,产生ORA-60的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等只

一、悲观封锁,
锁在用户修改之前就发挥作用,,
选择. .更新(nowait),
Select * from tab1 update 
用户发出这条命令之后,甲骨文将会对返回集中的数据建立行级封锁,以防止其他用户的修改只
如果此时其他用户对上面返回结果集的数据进行dml或ddl操作都会返回一个错误信息或发生阻塞只

1:对返回结果集进行更新或删除操作会发生阻塞只
2:对该表进行ddl操作将会报:ora - 00054:资源忙和获取指定nowait只

原因分析,
此时甲骨文已经对返回的结果集上加了排它的行级锁,所有其他对这些数据进行的修改或删除操作都必须等待这个锁的释放,产生的外在现象就是其他的操作将发生阻塞,这个操作提交或回滚只
同样这个查询的事务将会对该表加表级锁,不允许对该表的任何ddl操作,否则将会报出ora - 00054错误::资源忙和获取指定nowait只

二,乐观封锁
乐观的认为数据在选择出来更新进到取并提交的这段时间数据不会被更改。这里面有一种潜在的危险就是由于被选出的结果集并没有被锁定,是存在一种可能被其他用户更改的可能。因此甲骨文仍然建议是用悲观封锁,因为这样会更安全只

阻塞:
当一个会话保持另一个会话正在请求的资源上的锁定时,就会发生阻塞。被阻塞的会话将一直挂起,直到持有锁的会话放弃锁定的资源为止。4个常见的dml语句会产生阻塞,
INSERT 
update 
DELETE 
选择…update 

插入:
插入发生阻塞的唯一情况就是用户拥有一个建有主键约束的表。当2个的会话同时试图向表中插入相同的数据时,其中的一个会话将被阻塞,直到另外一个会话提交或会滚。一个会话提交时,另一个会话将收到主键重复的错误。回滚时,被阻塞的会话将继续执行只

甲骨文锁的机制介绍