干货 | oracle数据库有把TX锁,如何定位锁在哪? - 游侠安全网

网络空间安全:行业资讯、技术分享、法规研讨、趋势分析……

“游侠安全网”创建了网络安全从业者的2000人超级QQ大群(群号:1255197) ,欢迎各位同仁加入!有其它问题如合作等,请联系站长“网路游侠”,QQ:55984512


干货 | oracle数据库有把TX锁,如何定位锁在哪?

2017-09-11 11:10 推荐: 浏览: 40 views 字号:

摘要: 数据库是一个多用户使用的共享资源,为了保证数据的一致性,加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁,加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操...

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

数据库包含排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)两种基本的锁类型,利用这两种基本的锁类型来对数据库的事务进行并发控制。ORACLE数据库根据保护的对象不同,将Oracle数据库锁分为以下几大类:DML锁(data locks,数据锁),用于保证并发情况下的数据完整性;DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(internal locks and latches),保护数据库的内部结构。

这里我们只讨论DML锁。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。当Oracle 执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。

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

当Oracle数据库发生TX锁等待时,若处理不及时常会引起Oracle数据库挂起或死锁,产生ORA-00060的错误,导致应用出现长时间未响应、大量事务失败等问题。

 

 

联系站长租广告位!

中国首席信息安全官


关闭


关闭