欢迎来到天天文库
浏览记录
ID:38364295
大小:29.02 KB
页数:4页
时间:2019-06-11
《Oracle数据库中的锁机制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Oracle数据库中的锁机制数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。在数据库中有两种基本的锁类型:排它锁(ExclusiveLocks,即X锁)和共享锁(ShareLocks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改。根据保护对象的不同,Oracle数据库锁可以分为以下几大类:(1)DMLlock(datalocks,数据锁):用于保护数据的完整
2、性;(2)DDLlock(dictionarylocks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义);(3)Internallocks和latches(内部锁与闩):保护内部数据库结构;(4)Distributedlocks(分布式锁):用于OPS(并行服务器)中;(5)PCMlocks(并行高速缓存管理锁):用于OPS(并行服务器)中。在Oracle中最主要的锁是DML(也可称为datalocks,数据锁)锁。DML锁的目的在于保证并发情况下的数据完整性。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX
3、锁称为事务锁或行级锁。意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中每行记录的锁标志位了,系统效率得以大大提高。TM锁(表级锁)类型共有5种,分别称为共享锁(S锁)、排它锁(X锁)、行级共享锁(RS锁)、行级排它锁(RX锁)、共享行级排它锁(SRX锁)当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际
4、锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。如表1所示。表1Oracle的TM锁类型锁模式锁描述解释SQL操作0none 1NULL空Select2SS(Row-S)行级共享锁,其他对象只能查询这些数据行Selectforupdate、Lockforupdate、Lockrowshare3SX(Row-X)行级排它锁,在提交前不允许做DML操作Insert
5、、Update、Delete、Lockrowshare4S(Share)共享锁Createindex、Lockshare5SSX(S/Row-X)共享行级排它锁Locksharerowexclusive6X(Exclusive)排它锁Altertable、Dropable、Dropindex、Truncatetable、Lockexclusive1.共享锁(ShareTableLock,S):加锁语法:LockTableTableNameInShareMode;允许的操作:一个共享锁由一个事务控制,仅允许其它事务查询被锁定的表。一个有效的共享锁明确地用Selec
6、t…Forupdate形式锁定行,或执行LockTableTableNameInShareMode语法锁定整个表,不允许被其它事务更新。禁止的操作:一个共享锁由一个事务来控制,防止其它事务更新该表或执行下面的语句:LOCKTABLETableNameINSHAREROWEXCLUSIVEMODE;LOCKTABLETableNameINROWEXCLUSIVEMODE;2.排它锁(ExclusiveTableLock,X):排它锁是在锁机制中限制最多的一种锁类型,允许加排它锁的事务独自控制对表的写权限。加锁语法:LockTableTableNameInExclu
7、siveMode;允许的操作:在一个表中只能有一个事务对该表实行排它锁,排它锁仅允许其它的事务查询该表。禁止的操作:拥有排外锁的事务禁止其它事务执行其它任何DML类型的语句或在该表上加任何其它类型的锁。定义排它锁的语法:LOCKTABLETableNameINEXCLUSIVEMODE;3.行级锁(RowShareTableLock,RS):一个行级锁(有时称为SubshareTableLock,简称SS,子共享锁)需要该事务在被锁定行的表上用update的形式加锁。当有下面语句被执行的时候行级锁自动加在操作的表上。SELECT...FROMTableName.
8、..FORUPDATEO
此文档下载收益归作者所有