ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle的锁

Oracle的锁

原创 Linux操作系统 作者:abstractcyj 时间:2013-08-29 17:14:54 0 删除 编辑
   在数据库中有两种基本的锁类型:排他锁(Exclusive Lock, 即X锁)和共享锁(Share Lock, 即S锁)。当数据对象被加上排他锁时,其他事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。
   根据保护对象的不同,Oracle数据库锁可以分为以下几大类:DML锁(data locks,数据锁), 用于保护数据的完整性;DDL锁(dictionary lock, 即字典锁), 用于保护数据库对象的结构,如表,索引等的结构定义;内部锁和闩(internal locks and latches),保护数据库的内部结构。
   DML锁的目的在于保护并发情况下的数据完整性。在Oracle中,DML锁包括TM和TX锁,其中TM锁被称为表级锁,TX锁称为事务锁或行级锁。
  当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS,SX, S,X等多种模式,在数据库中用 0-6来表示。不同的SQL操作类型产生不同类型的TM锁。
   在Oracle里面,并不存在真正意义上的属于某个x对象或者数据的锁,那样需要一个锁管理器,无形中锁管理器自身又产生了另一个申请锁的等待,就是等待锁管理器来分配和释放锁。在Oracle中,它并不会对某个表上加上锁或者某几行上加上锁,锁是作为一个数据块的属性存在的。也就是说,每个数据块本身就存储着自己数据块中数据的信息,这个地方叫ITL(Interested Transaction List), 凡是在这个数据块上有活动的事务,它的信息就会记录在这里供后续的操作查询,以保证事务的一致性。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8520577/viewspace-769622/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    563
  • 访问量
    865236