Oracle锁简朴引见

 滥觞:网海拾贝




ORACLE数据库是现今数据库范畴行使最普遍的,同时它也是一个严重的体系,单方面理解它、玩转它不光需求肯定的理论知识,更需求斥地经历与工程经历。自己是ORACLE一快乐喜爱者,以下是自己对ORACLE锁的一些经历,祈望能与年夜家配合分享。

筹备知识:
DDL(DATABASE DEFINITION LANGUAGE):数据库定义言语,如create table、drop table.....  
DML(DATABASE MODIFICATION LANGUAGE):数据库修正言语,如insert、delete、update......  
参考材料:Oracle8 Administrator"s Guide, Release 8.0  
Oracle8 Tuning, Release 8.0  
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首先必须失失这块内存地区的闩锁,才干向此块内存写入信息。



版权声明: 原创作品,容许转载,转载时请务必以超链接情势标明文章 原始出处 、作者信息和本声明。否则将清查执法责任。

posted @ 2011-03-07 21:33  蓝色的天空III  阅读(138)  评论(0编辑  收藏  举报