ORACLE 锁

原创 2004年10月14日 22:36:00
  ORACLE数据库是现今数据库领域应用最广泛的,同时它也是一个庞大的系统,全面了解它、玩转它不但需要一定的理论知识,更需要开发经验与工程经验。本人是ORACLE一爱好者,以下是本人对ORACLE锁的一些经验,希望能与大家共同分享。

  ORACLE锁具体分为以下几类:

1.按用户与系统划分,可以分为自动锁与显示锁

  自动锁:当进行一项数据库操作时,缺省情况下,系统自动为此数据库操作获得所有有必要的锁。

  显示锁:某些情况下,需要用户显示的锁定数据库操作要用到的数据,才能使数据库操作执行得更好,显示锁是用户为数据库对象设定的。

2.按锁级别划分,可分为共享锁与排它锁

  共享锁:共享锁使一个事务对特定数据库资源进行共享访问——另一事务也可对此资源进行访问或获得相同共享锁。共享锁为事务提供高并发性,但如拙劣的事务设计+共享锁容易造成死锁或数据更新丢失。

  排它锁:事务设置排它锁后,该事务单独获得此资源,另一事务不能在此事务提交之前获得相同对象的共享锁或排它锁。

3.按操作划分,可分为DML锁、DDL锁

  +DML锁又可以分为,行锁、表锁、死锁

    -行锁:当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行的排它锁。

    -表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),以防止其它事务进行DDL语句影响记录行的更新。事务也可以在进行过程中获得共享锁或排它锁,只有当事务显示使用LOCK TABLE语句显示的定义一个排它锁时,事务才会获得表上的排它锁,也可使用LOCK TABLE显示的定义一个表级的共享锁(LOCK TABLE具体用法请参考相关文档)。

    -死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就出现死锁。
        如事务1在表A行记录#3中有一排它锁,并等待事务2在表A中记录#4中排它锁的释放,而事务2在表A记录行#4中有一排它锁,并等待事务; 1在表A中记录#3中排它锁的释放,事务1与事务2彼此等待,因此就造成了死锁。死锁一般是因拙劣的事务设计而产生。死锁只能使用SQL下:alter system kill session "sid,serial#";或者使用相关操作系统kill进程的命令,如UNIX下kill -9 sid,或者使用其它工具杀掉死锁进程。

  +DDL锁又可以分为:排它DDL锁、共享DDL锁、分析锁

    -排它DDL锁:创建、修改、删除一个数据库对象的DDL语句获得操作对象的 排它锁。如使用alter table语句时,为了维护数据的完成性、一致性、合法性,该事务获得一排它DDL锁。

    -共享DDL锁:需在数据库对象之间建立相互依赖关系的DDL语句通常需共享获得DDL锁。

如创建一个包,该包中的过程与函数引用了不同的数据库表,当编译此包时,该事务就获得了引用表的共享DDL锁。

    -分析锁:ORACLE使用共享池存储分析与优化过的SQL语句及PL/SQL程序,使运行相同语句的应用速度更快。一个在共享池中缓存的对象获得它所引用数据库对象的分析锁。分析锁是一种独特的DDL锁类型,ORACLE使用它追踪共享池对象及它所引用数据库对象之间的依赖关系。当一个事务修改或删除了共享池持有分析锁的数据库对象时,ORACLE使共享池中的对象作废,下次在引用这条SQL/PLSQL语句时,ORACLE重新分析编译此语句。

4.内部闩锁

  内部闩锁:这是ORACLE中的一种特殊锁,用于顺序访问内部系统结构。当事务需向缓冲区写入信息时,为了使用此块内存区域,ORACLE首先必须取得这块内存区域的闩锁,才能向此块内存写入信息。

  以上是 本人对ORACLE锁的一些总结,不足之处还望大家海涵,同时也希望大家多提出自己对ORACLE锁的一些看法。

ORACLE六大锁模式

ORACLE六大锁模式级别越高影响越多   ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-...
  • holandstone
  • holandstone
  • 2016年09月02日 11:00
  • 1177

详解ORACLE锁分类

看了网上一些资料,发现对Oracle中的锁有多种分类方法,从各个不同的角度对锁进行分析。预备知识: DDL(DATABASE DEFINITION LANGUAGE):数据库定义语言,如crea...
  • Hunterdiary
  • Hunterdiary
  • 2006年12月25日 16:08
  • 3558

oracle删除锁方法

--登录oracle sqlplus / as sysdba --查询锁信息 select t2.username,t2.sid,t2.serial# from v$locked_obj...
  • fellting
  • fellting
  • 2012年02月21日 11:01
  • 1793

ORACLE的TX锁和TM锁及解锁

数据库是一个并发访问的系统,所以说对一个数据库来说最大的问题就是并发控制的问题,这个并发控制所表现的不是在并发读上面,而是在并发写上面。对应并发写,就需要保证数据的一致性!那么什么是是数据一致性呢? ...
  • knuuy
  • knuuy
  • 2015年07月29日 19:01
  • 1182

Oracle中的锁(LOCK)机制

本文结合示例简要的介绍了一下Oracle中锁的机制。
  • renfengjun
  • renfengjun
  • 2014年01月27日 11:10
  • 5224

Oracle数据库锁的种类及研究

数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 在数据库中有...
  • liqfyiyi
  • liqfyiyi
  • 2012年03月20日 09:19
  • 5928

删除Oracle锁

问题:更新或删除某条记录的时候,无法操作,或被锁解决 1:查看记录是否被锁 SELECT a.object_id, a.session_id, b.object_name FR...
  • zhu7478848
  • zhu7478848
  • 2016年11月03日 08:09
  • 802

Oracle表锁或行锁问题解决办法

今天在调试业务问题的时候,刚开始Insert除了数据不对其他倒是没问题,经过不断修改代码,不断调试,最后悲剧发生了,当执行到某一条Insert语句的时候,一直执行不下去,将这条sql语句摘出来在PLS...
  • savsae
  • savsae
  • 2016年08月23日 13:33
  • 849

oracle行级锁和表级锁

http://blog.sina.com.cn/s/blog_9d12d07f0102xbln.html
  • u011897392
  • u011897392
  • 2017年05月18日 11:37
  • 510

oracle锁概念,阻塞

锁这东西是纯概念性的东西,但是作用又非常大。 以前整理过两篇文章,今天又看了点书,觉得还不是很清楚。 就重新整理了下。 在想要不要把以前的文章删掉,这样在blog里是比较简介的,但后来又一想。 这些连...
  • u012572955
  • u012572955
  • 2015年11月16日 14:23
  • 2637
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE 锁
举报原因:
原因补充:

(最多只允许输入30个字)