版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章 锁务、并发访问控制与事务,本章所介绍的内容: 常见锁定问题及其解决方案; 锁的分类; 事务隔离级别; 事务控制语句; 事务管理。,8.1 锁,在多用户环境中,Oracle使用各种类型的锁、事务和多版本一致性模型保持数据的一致性,数据库中锁用于管理对共享资源的并发访问,防止访问相同资源的两个事务出现破坏性交互的一种机制。 在Oracle中,数据查询不需要锁。 Oracle数据库中的资源可分为两种: 用户对象(结构和数据) 系统对象(内存结构、数据字典数据等)。,8.2 数据库应用问题及解决办法,丢失更新:数据库应用程序设计中一个常见问题是丢失更新,即一个会话的更新结果被其后的其他会话所覆
2、盖,而造成丢失。这一问题可以通过以下两种锁定策略来解决: 悲观锁定:检索数据,用户要求先锁定数据,再执行修改。只能用于有状态或者有连接的环境; 乐观锁定:把锁定推迟到更新之前才由系统锁定数据,这种锁定适用于所有环境。乐观锁定的实现方法有四种:建立“前”映像、表中创建版本列、使用检验和或散列值、使用伪列ORA_ROWSCN。,8.3 锁定问题及解决办法,锁定问题 阻塞:一个会话请求锁定另一个会话锁定的资源。要避免出现阻塞,要针对不同的DML操作,选择不同的解决办法。并尽量避免更新主键、为外键创建索引、合理使用位图索引; 死锁:对于两个会话,各自都请求锁定另一个会话锁定的资源。Oracle能够自动
3、检测到死锁,并通过回滚死锁所涉及的一条语句来解决死锁。这时,语句级回滚的事务会收到一条相应的死锁错误消息(ORA-00060)。产生死锁的主要原因是外键未加索引。,检测和解决锁冲突,检测冲突:从v$session视图查询受到阻塞的会话。 Select sid,serial# ,username from v$session where sid in (select blocking_session from v$session ); 解决方法:关闭冲突会话。 ALTER SYSTEM KILL SESSION sid,serial# IMMEDIATE;,8.4 锁的类型,Oracle中的锁主
4、要分为以下三类,它们在事务结束时被释放: DML锁:也称作数据锁,它锁定DML语句操作的特定数据行(行锁)或表中的所有数据行(表锁); DDL锁:保护模式对象的结构(如表或视图的定义), 也被称作数据字典锁; 内部锁和闩(Latch):保护内部数据结构,如数据库缓冲区缓存、共享池中的库缓存或数据文件。内部锁和闩完全是自动的。,8.4.1. DML锁,DML锁保护多用户并发访问数据的完整性,它分为以下两种: 行锁(TX锁):事务需要修改行时得到TX锁,从而防止两个事务修改相同的数据行; 表锁(TM锁):确保一个会话在修改数据期间,表的结构不会改变,也就是禁止其他会话在该表上执行DROP或ALTE
5、R语句。,1. 行锁,一条语句或一个事务所具有的行锁的数量没有限制,行锁是最小粒度的锁,它提供最佳的并发性。 对于INSERT、UPDATE、DELETE和SELECTFOR UPDATE语句修改的每行数据,事务自动获得一个排他行锁。 事务获得行锁的同时,也会在相应表上获得表锁。,2. 表锁,表锁确保在修改数据时,表的结构不会改变。在表上执行DDL或DML( INSERT、UPDATE、DELETE、SELECTFOR UPDATE 和LOCK TABLE )语句时,事务获得表锁。 表锁有以下几种模式:row share (RS)、row exclusive (RX)、share (S)、sh
6、are row exclusive (SRX)、exclusive (X)。,3. 表锁模式,表锁有以下几种模式: row share (RS):允许其他事务在同一个表上并发执行查询、插入、修改、删除和锁定行,因此其他事务可以获得同一个表上的RS、RX、S、SRX锁。 禁止其他事务在同一个表上用LOCK TABLE table IN EXCLUSIVE MODE语句执行排他写入操作。 row exclusive (RX):获得该锁通常说明事务对表中的一行或多行进行了修改。它允许其他事务在同一个表上并发执行查询、插入、修改、删除和锁定行,因此其他事务可以获得同一个表上的RX、RS锁。 禁止其他事
7、务手工锁定表进行排他读、入操作。,3. 表锁模式,share (S):共享表锁只允许其他事务查询表、用SELECT . FOR UPDATE锁定指定的数据行、或者运行LOCK TABLE . IN SHARE MODE语句,不允许其他事务修改表。具有S锁的事务只有在表上没有持有共享表锁的其他事务时才能修改该表。,3. 表锁模式,share row exclusive (SRX):一次只有一个事务可以在指定的表上获得SRX表锁。它允许其他事务执行查询,或使用SELECT . FOR UPDATE锁定指定的数据行,但不能更新表。禁止其他事务获得RX、S、SRX和X表锁。 exclusive (X)
8、:只有一个事务获得表的X表锁,其他事务只能在该表上执行查询操作。它禁止其他事务执行任何类型的DML语句或放置任何类型的表锁。,8.4.2 . DDL锁,DDL锁保护模式对象的定义。 DDL语句执行期间获得DDL锁。由于DDL语句执行后会隐含提交,所以DDL语句执行后会立即释放DDL锁。 DML语句执行期间,未提交的事务会一直保持表锁,以防该表被删除,或者结构被修改。,1. DDL锁的分类,DDL锁分为以下三类: 排他DDL锁:防止其他会话得到DDL锁或TM锁。这使其他事务可以查询该表,但无法以任何方式修改这个表; 共享DDL锁:保护对象结构不被其他事务修改,但其他事务仍可以修改其中的数据; 可
9、中断解析锁:解析一条语句时,该语句引用的每个对象上都会加一个解析锁。如果这些对象被删除或修改,共享池内已解析的SQL语句被置为无效。,8.5 并发访问与多版本,多用户环境下,常见的三种现象: 脏读:一个事务读取到其他事务未提交的数据; 不可重复读:同一事务重新读取同一行数据得到不同的结果。说明行数据已被其他事务修改或删除; 幻影读:一个事务重新读取时,发现已读取的数据没有改变,但满足条件的数据行增加了。说明其他事务已经插入了新的数据行。,1. SQL标准定义的事务隔离级别,SQL92标准定义了四种事务隔离级别: READ UNCOMMITTED:允许读取未提交的数据,Oracle不支持该级别;
10、 READ COMMITTED:只能读取其他事务已提交的数据,这是Oracle的默认事务隔离级别; REPEATABLE READ:保证重复读时得到一致的结果,这样能够避免出现丢失更新。Oracle用多版本模型提供读一致性,其他大多数据库采用读共享锁实现可重复读; SERIALIZABLE:能保证在事务执行期间所读取的结果总是一致的。,2. 事务隔离级别与三种事务现象,SQL92标准定义了四种事务隔离级别:,3. Oracle支持的事务隔离级别,Oracle支持以下三种事务隔离级别: READ COMMITTED; SERIALIZABLE; READ ONLY:对事务的隔离与SERIALIZ
11、ABLE类似,惟一的区别是它不允许修改。,8.6 事务,事务是包含一条或多条SQL语句的最小(原子)逻辑工作单元,其中的SQL语句要么被全部提交(应用到数据库),要么被全部回滚(从数据库还原)。 事务从第一条DML语句的执行开始,到事务被提交或全部回滚后结束。,8.6 事务,事务的目的是确保数据库从一种一致状态转变为另一种一致状态。它的特性体现在以下四个方面(即ACID): 原子性(atomicity); 一致性(consistency); 隔离性(isolation); 持久性(durability)。,8.7 事务控制语句,COMMIT:提交事务; ROLLBACK:回滚事务; SAVEP
12、OINT savepoint:设置标记点; ROLLBACK TO :回滚部分事务; SET TRANSACTION:设置事务名称、隔离级别、读写特性等。,1. 提交事务,提交事务指把事务内SQL语句所做的修改永久写入数据库。提交事务可采用以下方式: 显式提交:调用COMMIT语句提交事务; 隐含提交:不显式调用COMMIT语句,而是在执行语句时隐含提交。如,执行DDL语句,或者正常退出SQL*Plus时都会隐含提交事务; 自动提交:如果把AUTOCOMMIT选项设置为ON或一定的数字,则在执行每条或指定数量的SQL DML语句后,自动提交事务。,2. 回滚事务,回滚事务指撤销未提交事务所做的
13、修改,它分为以下两种类型: 显式回滚:调用ROLLBACK语句全部或部分还原事务。部分还原时,所还原到的事务保存点由SAVEPOINT语句指定,其语法格式为: SAVEPOINT savepoint; 隐含回滚:用户进程异常中断或系统发生故障时当前事务被自动回滚。,3. 事务结束前的数据状态,数据的以前状态保存在回滚段或还原段内,它们可以恢复; 当前用户可以查询DML的处理结果; 其他用户不能查看当前用户所执行DML语句的处理结果; DML语句所影响的行被锁定,其他用户不能修改当前用户所影响行的数据。,。,4. 事务结束后的数据状态,数据修改被永久保存到数据库; 以前的数据状态永久丢失; 其他
14、用户可以看到新的修改结果; 受影响行上的锁被释放,其他用户可以处理这些行; 所有事务存储点被释放。,8.8 事务的原子性,事务的原子性体现在: 语句级原子性:SQL语句执行期间,任何时候出现错误,该语句所产生的所有影响都将被回滚; 过程级原子性; 事务级原子性。,8.9 自治事务(Autonomous transaction),自治事务也被称作“事务内的事务”,它能独立于其父事务进行提交或回滚,而不影响其父事务的状态。自治事务可用于: 本地过程或函数; 存储过程或函数; 包; 顶级匿名块; 触发器。,8.10 分布式事务,实现途径:数据库链接。 实现手段:2PC。 在分布式事务环境下,有一台服务器充当事务协调器的作用,它询问其他站点是否已经准备好提交,如果有任何一个站点未准备好,则通知所有站点回滚事务,否则通知所有站点提交事务。,本章参考文献,1. Oracle. Oracle Database Concepts,第四、十三章,实验八:事务与并发访问控制,实验目的:熟悉Oracle的事务管理方式,掌握Oracle并发访问控
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中数学生活说课稿202说课稿
- 2026年纲要式说课稿
- 初中生物显微镜使用2025
- Lesson 11 An old man and a wolf说课稿-2025-2026学年小学英语六年级下册冀教版(一起)
- 初中生2025积极心理塑造说课稿
- 2025山东东营金茂铝业高科技有限公司招聘22人笔试历年参考题库附带答案详解
- 2025安徽皖信人力资源管理有限公司招聘心理健康教育服务人员笔试历年参考题库附带答案详解
- 2025四川绵阳市绵投置地有限公司招聘安装工程师岗位测试笔试历年参考题库附带答案详解
- 2025四川泸州纳溪城乡建设发展集团有限公司招聘笔试历年参考题库附带答案详解
- 2025四川华丰科技股份有限公司招聘产品经理(研发信息系统)等岗位测试笔试历年参考题库附带答案详解
- BIQS-LPA分层审核检查表
- DB11-T 1382-2022 空气源热泵系统应用技术规程
- 安全月培训内容
- GB/Z 17626.1-2024电磁兼容试验和测量技术第1部分:抗扰度试验总论
- 2024年湖北省新高考地理试卷(选择性)
- 2020部编版六年级下道德与法治全册知识要点归纳考点背诵资料
- 班级建设方案(中等职业学校班主任能力大赛)
- 西方经济学的奇妙世界智慧树知到期末考试答案2024年
- 无缝钢管生产工艺及设备全套
- 山东科大大学英语期末复习题及参考答案
- 竞价采购文件示范文本
评论
0/150
提交评论