Oracle之事务与并发控制课件_第1页
Oracle之事务与并发控制课件_第2页
Oracle之事务与并发控制课件_第3页
Oracle之事务与并发控制课件_第4页
Oracle之事务与并发控制课件_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十一章 事务与并发控制当用户建立与数据库的会话后,用户就可以对数据库的进行操作,而用户对数据库的操作是通过一个个事务来进行的。事务确保用户对数据库逻辑操作的完整性和一致性,这里的逻辑操作是指用户根据业务逻辑而进行的一系列操作。 第1页,共26页。本章学习目标:事务的概念,主要了解事务的ACID特性、处理过程。在Oracle中设置事务的隔性层事务处理语句事务的并发控制最基本锁的作用和使用死锁的发生锁定的多粒度性Oracle中的多粒度意向锁 第2页,共26页。11.1 了解事务 在介绍Oracle 10g的事务处理之前,首先需要理解什么是数据库中的事务。事务其实是一个很简单的概念,用户每天都会遇

2、到许多现实生活中类似事务的示例。例如,商业活动的中的交易,对于任何一笔交易来说,都涉及两个基本动作:一手交钱和一手交货。这两个动作构成了一个完整的商业交易,缺一不可。也就是说,这两个动作都成功发生,说明交易完成;如果只发生一个动作,则交易失败。所以,为了保证交易能够正常完成,需要某种方法来保证这些操作的整体性,即这些操作要么都成功,要么都失败。 第3页,共26页。11.2 事务的ACID特性一组SQL语句操作要成为事务,数据库管理系统必须保证这组操作的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),这就是事务的ACI

3、D特性。第4页,共26页。11.2.1 原子性(Atomicity)事务的原子性是指事务中包含的所有操作,要么全做,要么全不做;是一个最小和不可分割(原子)的操作,以确保数据库的一致性。例如:用户SCOTT在同一个银行有A,B两个帐号,分别存有2000元和1000元,这时候SCOTT使用A帐号转账500元到B帐号,转账的时候先从A帐号扣掉500,A的帐号现在只有1500,B帐号在同一时刻只有1000元,这时候必须在B帐号增加500元,帐号数据才是正确的,如果在B帐号增加500元的操作的不成功,那么必须在A帐号上的操作必须回滚,以确保帐号的数据的完整性。所以我们把这两个对数据库的操作(inser

4、t, delete, update)做为一个操作单元,它们是不能分割的,即事务的原子性。(注意:存储过程与触发器都是经过了原子处理。)第5页,共26页。11.2.2 一致性 (Consistency)所谓一致性是指数据库中事务操作前和事务处理后,其中的数据必须都满足业务规则约束。如上述的例子,转账前后的总金额必须相同。虽然在事务的过程会出现短暂的不一致,这也是暂时的,当事务提交时,数据库必须恢复到一致状态。第6页,共26页。11.2.3 隔离性(Isolation)隔离性是数据库允许多个并发事务同时对其中的数据进行读写和修改能力,隔离性可以防止多个事务在并发执行时,由于它们的操作命令交叉执行而

5、导致数据的不一致状态。第7页,共26页。11.2.4 持久性 (Durability)事务的持久性表示为:当事务处理结束后,该事务对数据的修改是永久的,即使是系统遇到故障的情况下也不会丢失的。第8页,共26页。11.3 事务控制语句 在Oracle中没有提供开始事务处理语句,所有的事务都是隐式开始的。也就是说,在Oracle中用户不可以显式使用命令来开始一个事务。Oracle认为第一条修改数据库的语句,或者一些要求事务处理的场合都是事务隐式的开始。但是,当用户想要终止一个事务处理时,必须显式使用COMMIT和ROLLBACK语句结束。针对事务的ACID特点,Oracle提供了如下语句对事务进行

6、控制:SET TRANSACTION 设置事务的属性SET CONSTRAINS 在当前事务中设置约束模式SAVEPOINT 在事务中建立一个存储点RELEASE SAVEPOINTROLLBACKCOMMIT第9页,共26页。11.3.1 设置事务属性SET TRANSACTION该语句可用来设置事务各种属性,而且是在事务处理中使用的第一个语句。它可以让用户对事务以下的属性进行设置: 指定事务的隔离层 规定事务回滚时所使用的存储空间 命名事务(注意:SET TRANSACTION 只对当前要处理的事务进行设置,当事务结束时,对事务的属性的设置也将失效)第10页,共26页。事务隔离层定义了一个

7、事务与其他事务的隔离程度。在并发事务中会发生如下异常: 错读错读就是事务A对数据进行修改,而另外事务B读取了修改后的数据,由于某种原因A取消了对数据的修改,使数据返回到原来的状态,而B原来读取的数据与数据库的数据不符。 非重复读是指事务A读取了数据,而事务B随后更改了该数据,而A再次读取该数据时,就会发现数据已经变化,同一个事务前后两次读取的数据不相同。 假读事务A基于某个条件查找数据后,事务B更新了同一个表中的数据,当A再次根据相同的搜索条件返回了不同的行。第11页,共26页。上述三种异常的发生,都与事务的隔离层的设置有关。选择隔离层: READ COMMITTED 这是Oracle默认的隔

8、离层 SERIALIZABLE 序列化,事务与事务完全隔开 READ ONLY 和 READ WRITE当使用READ ONLY选项时,事务不能有任何修改数据库中数据的语句。它是SERIALIZABLE的子集。READ WRITE是默认设置。第12页,共26页。建立SET TRANSACTION 语句SET TRANSACTION READ ONLYSET TRANSACTION READ WRITESET TRANSACTION ISOLATION LEVEL COMMITTEDSET TRANSACTION ISOLATION LEVEL SERIALIZABLE对于大部分应用来说,REA

9、D COMMITTED 是最合适的隔离层。虽然也存在非重复读和假读现象,但是它能提供较高的并发性。第13页,共26页。11.3.2 结束事务虽然Oracle采用隐式开始一个事务,在结束时必须使用相关的事务控制语句显式结束,下列情况Oracle会认为一个事务结束: COMMIT ROLLBACK 如有事务中使用了存储点,则只取消存储点后的事务处理,而且事务并不会终止 DDL 执行时(意味着前面的DML操作已经COMMIT) 用户断开连接时(disconn) 用户进程意外,这时用户当前的事务被回滚第14页,共26页。11.3.3 存储点在事务过程中,如果发生了错误并用rollback进行了回滚,则

10、在整个事务处理中对数据所做的所有修改都将被撤销。 这对一个较小的事务时并没有什么问题。但是事务非常庞大时,这将浪费大量的资源,解决这个问题的方法就是使用存储点。第15页,共26页。11.4 并发控制 对于多用户数据库系统而言,当多个用户并发地操作时,会产生多个事务同时操作同一数据的情况。若对并发操作不加控制就可能会发生读取和写入不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。因此,一个数据库管理系统性能的优劣,很大一部分取决于并发控制。所谓并发控制是指要用正确的方式实现事务的并发操作,避免造成数据的不一致性。为了维护事务的一致性,Oracle使用了锁机制防止其他用户修

11、改另外一个未完成事务中的数据。第16页,共26页。11.4.1 锁锁是一种控制共享资源并发访问的一种机制。比如事务T1要访问某个数据表,在它访问前需要对该数据表加锁。此时事务T2要访问该数据表时必须等到T1对该数据表解锁后才能访问。锁是Oracle自动管理的,也可由用户使用LOCK TABLE显式对要访问的资源加锁,事务的开始和结束决定了锁的持有和释放。Oracle中的锁可分成三类:DML锁DDL锁内部锁第17页,共26页。11.4.2 锁模式事务对数据库的操作可以概括为读和写,当两个事务对同一个数据项进行操作时,可能的情况包括:读-读、写-读、读-写、写-写。除了读-读,其它都可能导致数据的

12、不一致,因此要通过不同模式的锁来避免数据不一致的发生。第18页,共26页。锁模式说明共享锁(Share, S)S锁称为共享锁,某个事务使用S锁锁定了表,则允许其他事务使用S锁锁定该表,不允许对该表进行任何更新。排他锁(Exclusive,X)X锁又称写锁,某个事务对表加了X锁,则不允许其他事务锁定该表。行级共享锁(Row Share, RS)如果事务更新表,使用RS锁定相应的行,则表中的其他行可以让其他事务锁定。行级排他锁(Row Exclusive,RX)如果事务更新表,使用RX锁定相应的行,则不允许其他事务再锁定该表。共享行级排他锁(Share Row Exclusive, SRX)如果某

13、个事务对表加SRX锁,则表示对该表加RS所,而对要进行更新的行加RX锁。第19页,共26页。 共享锁:lock table emp in share mode; 排他锁:lock table dept in exclusive mode; 行级共享锁:lock table salgrade in row share mode; 行级排他锁:lock table emp in row exclusive mode; 共享行级排他锁:lock table emp in share row exclusive mode;第20页,共26页。11.5 锁粒度 锁粒度是指被锁定的数据对象的大小称为锁粒度

14、。锁粒度与数据库系统的并发度和并发控制的开销密切相关。锁粒度越大,数据库中所能够使用的资源也就越少,并发度也就越小,系统开销也就越小;反之,锁的粒度越小,并发度也就越大,但系统的开销也就越大。一般来讲,数据库中锁的粒度可以分为4个级别:数据库级、表级、行级和列级第21页,共26页。11.5.1 TX锁(行级锁、事务锁)TX锁定本义是Transaction锁(行级锁、事务锁),当一个事务执行更新数据操作时,它即获得一个TX锁,直至该事务结束时才释放该锁。一个TX锁可以锁定该事务涉及的多行数据。TX锁是Oracle支持锁定的最低级别。在更新过程中,行级别锁会阻止这一行上的任何其他DML操作发生。第22页,共26页。11.5.2 TM锁(表级锁)Oracle的行级锁虽然只有一种(TX),但是TM(表级锁) 类型共有5种锁模式:S锁X锁RS锁RX锁SRX锁由于表是由行组成的,所以向某个表加锁时,Oracle一方面需要检查锁与表上原有的表级锁是否相容,另一方面还要检查锁是否与表中的每一行的锁是否相容。第23页,共26页。11.5.3 数据库级锁数据库级别的锁将锁定整个数据库,以禁止任何新会话和新事务。可以使用一下语句更改数据库的限制性(数据库级锁)模式中:alter syste

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论