- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
11.事务与并发控制概论
第十一章 事务与并发控制 当用户建立与数据库的会话后,用户就可以对数据库的进行操作,而用户对数据库的操作是通过一个个事务来进行的。事务确保用户对数据库逻辑操作的完整性和一致性,这里的逻辑操作是指用户根据业务逻辑而进行的一系列操作。 本章学习目标: 事务的概念,主要了解事务的ACID特性、处理过程。 在Oracle中设置事务的隔性层 事务处理语句 事务的并发控制 最基本锁的作用和使用 死锁的发生 锁定的多粒度性 Oracle中的多粒度意向锁 11.1 了解事务 在介绍Oracle 10g的事务处理之前,首先需要理解什么是数据库中的事务。事务其实是一个很简单的概念,用户每天都会遇到许多现实生活中类似事务的示例。例如,商业活动的中的交易,对于任何一笔交易来说,都涉及两个基本动作:一手交钱和一手交货。这两个动作构成了一个完整的商业交易,缺一不可。也就是说,这两个动作都成功发生,说明交易完成;如果只发生一个动作,则交易失败。所以,为了保证交易能够正常完成,需要某种方法来保证这些操作的整体性,即这些操作要么都成功,要么都失败。 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提供了如下语句对事务进行控制: SET TRANSACTION 设置事务的属性 SET CONSTRAINS 在当前事务中设置约束模式 SAVEPOINT 在事务中建立一个存储点 RELEASE SAVEPOINT ROLLBACK COMMIT 11.3.1 设置事务属性 SET TRANSACTION该语句可用来设置事务各种属性,而且是在事务处理中使用的第一个语句。它可以让用户对事务以下的属性进行设置: 指定事务的隔离层 规定事务回滚时所使用的存储空间 命名事务 (注意:SET TRANSACTION 只对当前要处理的事务进行设置,当事务结束时,对事务的属性的设置也将失效) 事务隔离层定义了一个事务与其他事务的隔离程度。在并发事务中会发生如下异常: 错读错读就是事务A对数据进行修改,而另外事务B读取了修改后的数据,由于某种原因A取消了对数据的修改,使数据返回到原来的状态,而B原来读取的数据与数据库的数据不符。 非重复读是指事务A读取了数据,而事务B随后更改了该数据,而A再次读取该数据时,就会发现数据已经变化,同一个事务前后两次读取的数据不相同。 假读事务A基于某个条件查找数据后,事务B更新了同一个表中的数据,当
文档评论(0)