


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、概述锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据 对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对 象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进 行更新操作。在数据库中有两种基木的锁类型:排它锁(exclusive locks,即x锁)和 共享锁(share locks,即s锁)。当数据对象被加上排它锁吋,其他的事务不 能对它修改。加了共享锁的数据对象可以被其他事务读取,也不能修改。根据保护的对象不同,oracle数据库锁可以分为以下几大类:dml锁(data locks,数据锁),用于保护数据的完整性ddl锁(dictionary l
2、ocks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义z内部锁和円(internal locks and latches),保护数掘席的内部结构oracle使用系统变化号(scn)实现事务级的读写一致性dml锁dml锁的0的在于保证并发情况下的数据完整性,在oracle数据库中,dml锁主要包括tm锁和tx锁,其屮tm锁称为表级锁,tx锁称为事务锁 或行级锁。1. 行级锁当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中 操作行的排它锁,行级没有共享锁;:select * from emp where deptno=20 for update 卜-不允许其他用户对雇员
3、表的所有数据进行修改;:select * from emp for update:-如果己经被锁定,就不用等待:select * from emp for update nowait夂-如果己经被锁定,更新的时候等待5秒:;select * from emp for update wait 5;-查看锁可以通过dba身份用户访问v$locked_object;select * from v$locked_object;2. 表-禱:_ -当事务获得行锁后,此事务也将自动获得该行的表锁(行排他锁),以防止 其它事务进行ddl语句影响记录行的更新行共享锁(rs锁2)允许其他用户进行任何操作,禁止其
4、他用户添加 排他锁当前用户执行dml操作时,rs锁会转为rx锁,如果其他用户同时 操作该行,将无法执行,如果操作不同行,正常执行。:lock table emp in row share mode_梦_止_其他用p礎力i排他鳞和两亨行排他鸽lock table emp in row exclusive modez共享锁(r锁4)其他用户只能看,不能修改,不能加任何冇关排他的 锁。如果当前用户执行dml,共享锁转化为共享行排他锁srx 通常用在创建索引上实用。如create index:lock table emp in share mode痕他锸(x< 6)/限制最强的表锁?仅允许其他用
5、卢查询该表的衧, 禁止其他修改和加锁,通常用在修改表结构如:alter table、drop table、drop index:lock table emp in exclusive mode的行,禁止修改,只可以加rs锁:lock table emp in share row exclusive mode其屮share, exclusive用于表封锁,其他用于行封锁。1.锁兼容性sxrsrxsrxn/asynynnyxnnnnnyrsynyyyyrxnnyynysrxnnynnyn/yyyyyyy表8-1 oracle的tm锬类型钱换式钱描迷sol掠作0none1null空select2ss
6、(row-s)行鈸共莩锁is他对象只能查询这驻数据行select for update. lock for update. lockrow share3sx(rjow-x)行级择他锬,在提交前不允许做insert、update. delete. lock row share4s(shaw)共享谈create index、lock share5srx(s/row-x)共莩行级排他锁lock share row exclusive6x(exclusive)祥他谈alter table. drop table, drop index、truncate table s lock exclusive2.
7、死锁当两个事务需要一组有冲突的锁,而不能将事务继续i去的话,就出现 死锁。1)用户a修改a表,事务不提交2)用户b修改b表,事务不提交3)用户a修改b表,阻塞4)用户b修改a表,阻塞如果出现了死锁,需要牺牲一方让另外一方执行,通常我们可以查询出 当前出现的session锁,并结束。select 'alter system kill session ”| |sid| |,| |serial#| from v$sessionwhere sid in (select sid from v$lock where block = 1);-将生成解锁语句 例如:alter system khi s
8、ession '15,26:将产生的语句执行,京尤可角军锁3. 悲观锁和乐观锁数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁 z悲观锁:就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据幵始读取的时候就把数据锁定住。z乐观锁:就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现 冲突了,则让用户返冋错误的信息,让用户决定如何去做。三、ddl锁1. 排它ddl锁创建、修改、删除一个数据库对象的ddl语句获得操作对象的排它锁。2. 共享ddl锁需在数据库对象之间建立相互依赖关系的ddl语句通常需共享获得ddl 锁3. 分析锁分析锁是一种独特的ddl锁类型,oracle使用它追踪共享池对象及它 所引用数据库对象之间的依赖关系四、内部锁和闩这是oracle屮的一种特殊锁,用于顺序访问內部系统结构。当事务需 向缓冲区写入信息时,为了使用此块内存区域,oracle首先必须取得这块 内存区域的闩锁,才能向此块内存写入信息。总结:1系统性能上考虑,应该尽可能减少资源竞争,增大吞吐量,因此用户在给并 发操作加锁时,应注意以下几点:1、对于update和delete操作,应只封锁要做改动的行,在完成修改后 立即提交。【行级排他锁】2、当多个事务正利用共享更新
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家具拆卸搬运合同范本
- 点火系统:点火开关竞争策略分析报告
- 中医护理质量自查报告
- 个人股份协议书
- 个人租房合同简易版
- 厦门运输合同范例
- 卖煤提成合同范例
- 丑小鸭阅读心得体会
- 厂房装修材料合同范本
- 厨房橱柜合同范本
- 胸膜疾病课件
- 公路施工技术全套课件
- 胸痹心痛中医诊疗方案及临床路径
- 泛读2unit2-music
- 中学生防溺水安全教育课件(PPT 44页)
- 2019版外研社高中英语选择性必修二Unit 1 Growing up 单词表
- 有机金属化学1
- JIT标准作业作业指导书
- 安徽省2020-2021学年七年级语文下学期期末测试卷[含答案]
- 人教版三年级数学下册各单元教材分析(全册共九个单元)
- 公司驾驶员承诺书
评论
0/150
提交评论