




免费预览已结束,剩余21页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章事务与并发控制,当用户建立与数据库的会话后,用户就可以对数据库的进行操作,而用户对数据库的操作是通过一个个事务来进行的。事务确保用户对数据库逻辑操作的完整性和一致性,这里的逻辑操作是指用户根据业务逻辑而进行的一系列操作。,本章学习目标:,事务的概念,主要了解事务的ACID特性、处理过程。在Oracle中设置事务的隔性层事务处理语句事务的并发控制最基本锁的作用和使用死锁的发生锁定的多粒度性Oracle中的多粒度意向锁,11.1了解事务,在介绍Oracle10g的事务处理之前,首先需要理解什么是数据库中的事务。事务其实是一个很简单的概念,用户每天都会遇到许多现实生活中类似事务的示例。例如,商业活动的中的交易,对于任何一笔交易来说,都涉及两个基本动作:一手交钱和一手交货。这两个动作构成了一个完整的商业交易,缺一不可。也就是说,这两个动作都成功发生,说明交易完成;如果只发生一个动作,则交易失败。所以,为了保证交易能够正常完成,需要某种方法来保证这些操作的整体性,即这些操作要么都成功,要么都失败。,11.2事务的ACID特性,一组SQL语句操作要成为事务,数据库管理系统必须保证这组操作的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),这就是事务的ACID特性。,11.2.1原子性(Atomicity),事务的原子性是指事务中包含的所有操作,要么全做,要么全不做;是一个最小和不可分割(原子)的操作,以确保数据库的一致性。例如:用户SCOTT在同一个银行有A,B两个帐号,分别存有2000元和1000元,这时候SCOTT使用A帐号转账500元到B帐号,转账的时候先从A帐号扣掉500,A的帐号现在只有1500,B帐号在同一时刻只有1000元,这时候必须在B帐号增加500元,帐号数据才是正确的,如果在B帐号增加500元的操作的不成功,那么必须在A帐号上的操作必须回滚,以确保帐号的数据的完整性。所以我们把这两个对数据库的操作(insert,delete,update)做为一个操作单元,它们是不能分割的,即事务的原子性。(注意:存储过程与触发器都是经过了原子处理。),11.2.2一致性(Consistency),所谓一致性是指数据库中事务操作前和事务处理后,其中的数据必须都满足业务规则约束。如上述的例子,转账前后的总金额必须相同。虽然在事务的过程会出现短暂的不一致,这也是暂时的,当事务提交时,数据库必须恢复到一致状态。,11.2.3隔离性(Isolation),隔离性是数据库允许多个并发事务同时对其中的数据进行读写和修改能力,隔离性可以防止多个事务在并发执行时,由于它们的操作命令交叉执行而导致数据的不一致状态。,11.2.4持久性(Durability),事务的持久性表示为:当事务处理结束后,该事务对数据的修改是永久的,即使是系统遇到故障的情况下也不会丢失的。,11.3事务控制语句,在Oracle中没有提供开始事务处理语句,所有的事务都是隐式开始的。也就是说,在Oracle中用户不可以显式使用命令来开始一个事务。Oracle认为第一条修改数据库的语句,或者一些要求事务处理的场合都是事务隐式的开始。但是,当用户想要终止一个事务处理时,必须显式使用COMMIT和ROLLBACK语句结束。针对事务的ACID特点,Oracle提供了如下语句对事务进行控制:SETTRANSACTION设置事务的属性SETCONSTRAINS在当前事务中设置约束模式SAVEPOINT在事务中建立一个存储点RELEASESAVEPOINTROLLBACKCOMMIT,11.3.1设置事务属性,SETTRANSACTION该语句可用来设置事务各种属性,而且是在事务处理中使用的第一个语句。它可以让用户对事务以下的属性进行设置:指定事务的隔离层规定事务回滚时所使用的存储空间命名事务(注意:SETTRANSACTION只对当前要处理的事务进行设置,当事务结束时,对事务的属性的设置也将失效),事务隔离层定义了一个事务与其他事务的隔离程度。在并发事务中会发生如下异常:错读错读就是事务A对数据进行修改,而另外事务B读取了修改后的数据,由于某种原因A取消了对数据的修改,使数据返回到原来的状态,而B原来读取的数据与数据库的数据不符。非重复读是指事务A读取了数据,而事务B随后更改了该数据,而A再次读取该数据时,就会发现数据已经变化,同一个事务前后两次读取的数据不相同。假读事务A基于某个条件查找数据后,事务B更新了同一个表中的数据,当A再次根据相同的搜索条件返回了不同的行。,上述三种异常的发生,都与事务的隔离层的设置有关。选择隔离层:READCOMMITTED这是Oracle默认的隔离层SERIALIZABLE序列化,事务与事务完全隔开READONLY和READWRITE当使用READONLY选项时,事务不能有任何修改数据库中数据的语句。它是SERIALIZABLE的子集。READWRITE是默认设置。,建立SETTRANSACTION语句SETTRANSACTIONREADONLYSETTRANSACTIONREADWRITESETTRANSACTIONISOLATIONLEVELCOMMITTEDSETTRANSACTIONISOLATIONLEVELSERIALIZABLE对于大部分应用来说,READCOMMITTED是最合适的隔离层。虽然也存在非重复读和假读现象,但是它能提供较高的并发性。,11.3.2结束事务,虽然Oracle采用隐式开始一个事务,在结束时必须使用相关的事务控制语句显式结束,下列情况Oracle会认为一个事务结束:COMMITROLLBACK如有事务中使用了存储点,则只取消存储点后的事务处理,而且事务并不会终止DDL执行时(意味着前面的DML操作已经COMMIT)用户断开连接时(disconn)用户进程意外,这时用户当前的事务被回滚,11.3.3存储点,在事务过程中,如果发生了错误并用rollback进行了回滚,则在整个事务处理中对数据所做的所有修改都将被撤销。这对一个较小的事务时并没有什么问题。但是事务非常庞大时,这将浪费大量的资源,解决这个问题的方法就是使用存储点。,11.4并发控制,对于多用户数据库系统而言,当多个用户并发地操作时,会产生多个事务同时操作同一数据的情况。若对并发操作不加控制就可能会发生读取和写入不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。因此,一个数据库管理系统性能的优劣,很大一部分取决于并发控制。所谓并发控制是指要用正确的方式实现事务的并发操作,避免造成数据的不一致性。为了维护事务的一致性,Oracle使用了锁机制防止其他用户修改另外一个未完成事务中的数据。,11.4.1锁,锁是一种控制共享资源并发访问的一种机制。比如事务T1要访问某个数据表,在它访问前需要对该数据表加锁。此时事务T2要访问该数据表时必须等到T1对该数据表解锁后才能访问。锁是Oracle自动管理的,也可由用户使用LOCKTABLE显式对要访问的资源加锁,事务的开始和结束决定了锁的持有和释放。Oracle中的锁可分成三类:DML锁DDL锁内部锁,11.4.2锁模式,事务对数据库的操作可以概括为读和写,当两个事务对同一个数据项进行操作时,可能的情况包括:读-读、写-读、读-写、写-写。除了读-读,其它都可能导致数据的不一致,因此要通过不同模式的锁来避免数据不一致的发生。,共享锁:locktableempinsharemode;排他锁:locktabledeptinexclusivemode;行级共享锁:locktablesalgradeinrowsharemode;行级排他锁:locktableempinrowexclusivemode;共享行级排他锁:locktableempinsharerowexclusivemode;,11.5锁粒度,锁粒度是指被锁定的数据对象的大小称为锁粒度。锁粒度与数据库系统的并发度和并发控制的开销密切相关。锁粒度越大,数据库中所能够使用的资源也就越少,并发度也就越小,系统开销也就越小;反之,锁的粒度越小,并发度也就越大,但系统的开销也就越大。一般来讲,数据库中锁的粒度可以分为4个级别:数据库级、表级、行级和列级,11.5.1TX锁(行级锁、事务锁),TX锁定本义是Transaction锁(行级锁、事务锁),当一个事务执行更新数据操作时,它即获得一个TX锁,直至该事务结束时才释放该锁。一个TX锁可以锁定该事务涉及的多行数据。TX锁是Oracle支持锁定的最低级别。在更新过程中,行级别锁会阻止这一行上的任何其他DML操作发生。,11.5.2TM锁(表级锁),Oracle的行级锁虽然只有一种(TX),但是TM(表级锁)类型共有5种锁模式:S锁X锁RS锁RX锁SRX锁由于表是由行组成的,所以向某个表加锁时,Oracle一方面需要检查锁与表上原有的表级锁是否相容,另一方面还要检查锁是否与表中的每一行的锁是否相容。,11.5.3数据库级锁,数据库级别的锁将锁定整个数据库,以禁止任何新会话和新事务。可以使用一下语句更改数据库的限制性(数据库级锁)模式中:altersyst
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025建筑工程劳务分包合同(桥梁施工)
- 2025年农村土地转让合同范本
- 2025合同条款优化策略
- 2025工程大学横向科技合同审批表
- 河北省邱县2024~2025学年 高一下册4月检测数学试卷附解析
- 基于人工智能的文化遗产修复技术研究-洞察阐释
- 社区大数据与社区信息化教育基础知识点归纳
- 2025年施工单位管理人员年度培训考核试题
- 变井径环空注水泥顶替流动及旋流扶正器的改善作用
- 广西柳州市2025届高三下学期高考前适应性练习测试十六物理试卷(含答案)
- 公司工会内控管理制度
- 食堂燃气培训试题及答案
- T/CEPPEA 5028-2023陆上风力发电机组预应力预制混凝土塔筒施工与质量验收规范
- 2025年大学英语四级真题试卷及答案
- 2025年大学生心理健康教育试题及答案
- 2025年商业模式创新能力考试卷及答案
- 2025山西太原化学工业集团有限公司所属企业社会招聘100人笔试参考题库附带答案详解
- 2025中考英语临考押题卷(广东卷)(原卷版)
- 河南省洛阳市2025年中招模拟考试(二)语文试题(含答案)
- 涉外投资协议书
- 研究生学术表达能力培养智慧树知到答案2024年西安建筑科技大学、清华大学、同济大学、山东大学、河北工程大学、《环境工程》英文版和《环境工程》编辑部
评论
0/150
提交评论