我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:金算盘高手论坛799222 > 排它锁 >

ORACLE里几种锁模式

归档日期:07-03       文本归类:排它锁      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

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

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

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

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

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

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

  LOCK TABLE显示的定义一个表级的共享锁(LOCK TABLE具体用法请参 考相关文档)。

  -死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就 出现死锁。

  如事务1在表A行记录#3中有一排它锁,并等待事务2在表A中记录#4 中排它锁的释放,而事务2在表A记录行#4中有一排它锁,并等待事务 1在表A中记录#3中排它锁的释放,事务1与事务2彼此等待,因此就造 成了死锁。死锁一般是因拙劣的事务设计而产生。

  或者使用相关操作系统kill进程的命令,如UNIX下kill -9 sid,或者 使用其它工具杀掉死锁进程。

  -排它DDL锁:创建、修改、删除一个数据库对象的DDL语句获得操作对象的 排它锁。

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

  -分析锁:ORACLE使用共享池存储分析与优化过的SQL语句及PL/SQL程序,使

  ORACLE使用它追踪共享池对象及它所引用数据库对象之间的依赖 关系。当一个事务修改或删除了共享池持有分析锁的数据库对象

  时,ORACLE使共享池中的对象作废,下次在引用这条SQL/PLSQL语 句时,ORACLE重新分析编译此语句。

  当事务需向缓冲区写入信息时,为了使用此块内存区域, ORACLE首先必须取得这块内存区域的闩锁,才能向此块内存写入

  很有用的内容. 1, 2 级别锁都有了 例子. 4:Share 共享锁(S):阻止其他DML操作 5:S/Row-X 共享行专用(SRX):阻止其他事务操作 6:exclusive 专用(X):独立访问使用 不知道 Oracle 有没有表级别的锁. 即,锁住整个数据表. ----------------- 测试过一些数据库, 发现 SQL Server 的锁模式和 Oracle是不同的. 从 Transaction Isolation Level (事务隔离级别)的表现可以看出来. Oracle 比较喜欢 Copy On Write (version control, 乐观锁). SQL Server 比较喜欢 Exclusive Access (悲观锁). 好象是这样.

本文链接:http://jdockfish.com/paitasuo/532.html