第8章 数据库事务管理.ppt_第1页
第8章 数据库事务管理.ppt_第2页
第8章 数据库事务管理.ppt_第3页
第8章 数据库事务管理.ppt_第4页
第8章 数据库事务管理.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、An Introduction to Database Systems,1 / 70,普通高等教育“十一五”国家级规划教材,数据库系统原理 SHUJUKU XITONG YUANLI (第二版) 陆慧娟 高波涌 何灵敏编著 中国电力出版社,第8章 数据库事务管理,本章内容概述,8.1事务与事务管理 8.2并发控制与封锁机制 8.3数据库恢复,8.1事务与事务管理,8.1.1 事务的概念 事务定义 事务是构成数据库处理逻辑单元的可执行程序,由用户定义的一组操作序列(包括插入、删除、修改或检索等操作)组成,序列中的操作要么全做,要么全不做,是一个不可分割的工作单位。,事务概念,事务特性(ACID)

2、 原子性(Atomicity) 事务中包含的所有操作要么全做,要么全不做 原子性由恢复机制实现 一致性(Consistency) 事务的隔离执行必须保证数据库的一致性 事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态 数据库的一致性状态由用户来负责,由并发控制机制实现 如银行转帐,转帐前后两个帐户金额之和应保持不变(意大利香肠),事务概念,隔离性(Isolation) 系统必须保证事务不受其它并发执行事务的影响 对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行 隔离性通过并发控制机制实现 持续性(Durability)

3、 一个事务一旦提交之后,它对数据库的影响必须是永久的 系统发生故障不能改变事务的持久性 持续性通过恢复机制实现,8.1.2可串行性理论,对于调度S中的每个事务T,如果T中所有的操作在调度中都是连续执行的,那么就称调度S是串行的;否则调度S是非串行的。 串行调度中不会发生不同事务的交替操作。 如果具有n个事务的调度S等价于某个具有相同n个事务的串行调度,那么S就是可串行化调度。 冲突操作是指不同的事务对同一个数据的”读写”操作和“写写”操作,其他操作时不冲突的。不同事务的冲突操作和同一事务的两个操作时不能交换的。,例 8.1 有两个调度:事务T1=R1(A)W1(A)R1(B)W1(B),事务T

4、2=R2(A)W2(A)R2(B)W2(B) 有调度S1= R1(A)W1(A)R2(A)W2(A)R1(B)W1(B)R2(B)W2(B) R2(A)W2(A) 与 R1(B)W1(B)这两组操作操作的对象不是同一对象,因此不是冲突操作,故把R2(A)W2(A) 与 R1(B)W1(B)交换得到: S2= R1(A)W1(A)R1(B)W1(B) R2(A)W2(A)R2(B)W2(B) S2等价于一个串行调度T1T2,所以S1是冲突可串行化调度。 注意:冲突可串行化调度是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。,8.1.3 事务基本操作与活动状态,1

5、.事务操作的组成 事务操作可以看做若干部分组成 (1)事务开始(BEGIN TRANSACTION):事务开始执行; (2)事务读写操作(READ/WRITE TRANSACTION):事务进行数据操作,8.1.3 事务基本操作与活动状态,(3)事务提交(COMMIT TRANSACTION ): 事务完成所有数据操作,同时保存操作结果,它标志着事务成功完成。 (4)事务回滚(ROLLBACK TRANSACTION ):事务未完成所有数据操作,重新返回到事务开始状态,标志着事务的撤销。,事务的活动状态,8.1.4 SQL对事务管理的支持,标准SQL规定事务的开始一般是隐含的,而事务的结束一般

6、使用COMMIT TRANSACTION ROLLBACK TRANSACTION 语句。其中,COMMIT TRANSACTION 表示提交事务,执行该语句后,事务对数据库的更新结果将被写入物理磁盘数据库;而ROLLBACK TRANSACTION 表示回滚事务,执行该语句后,DBMS 将撤消事务对数据库所作的全部操作,就像事务没有被执行一样。,8.2 并发控制与封锁,8.2.1 并发操作与数据的不一致性 并发操作可能带来的数据不一致性情况有三种 : 1.丢失修改 2.读过时数据 3.读“脏”数据,8.2.2封锁,排它锁和共享锁 封锁协议 活锁和死锁,封锁就是事务 T 在对某个数据对象如关系

7、、元组等进行查询或更新操作以前 ,应先向系统发出对该数据对象进行加锁的请求,否则就不可以进行相应的操作,而事务在获得了对该数据对象的锁以后,其他的事务就不能查询或更新此数据对象,直到相应的锁被释放为止。,1)排它锁和共享锁,排它锁和共享锁是最基本的封锁方式。 如果事务 T 对数据对象 Y 加上了排它锁(记为 X 锁),那么 T 既可以读取 Y ,也可以更新 Y 。 如果事务 T 对数据对象 Y 加上了共享锁(记为 S 锁),那么 T 可以读取 Y,但不能更新 Y。 一次加锁锁住的数据单位大小被称为锁的粒度(granularity),如果数据单位比较小,我们说锁是细(fine)粒度的,否则就说锁

8、是粗(coarse)粒度的。,2)封锁协议,一级封锁协议 二级封锁协议 三级封锁协议,封锁协议就是在对数据对象加锁、持锁和释放锁时所约定的一些规则。不同的封锁规则形成了不同的封锁协议,(1)一级封锁协议,一级封锁协议规定事务 T 在更新数据对象以前,必须对该数据对象加排它锁,并且直到事务 T 结束时才可以释放该锁。 利用一级封锁协议可以防止丢失更新问题的发生。,(2)二级封锁协议,二级封锁协议规定事务 T 在更新数据对象以前必须对数据对象加 X 锁,且直到事务 T 结束时才可以释放该锁,还规定事务 T 在读取数据对象以前必须先对其加 S 锁,读完后即可释放 S 锁。 二级封锁协议可以防止丢失更

9、新问题,还可以防止未提交依赖问题,但却不能防止不一致性分析问题。,(3)三级封锁协议,三级封锁协议规定事务 T 在更新数据对象前,必须对数据对象加 X 锁,且直到事务 T 结束时才可以释放该锁,还规定事务 T 在读取数据对象以前必须先对其加 S 锁,该 S 锁也必须在事务 T 结束时才可释放。 三级封锁协议可以防止丢失更新和未提交依赖问题,还可以防止不一致性分析问题的发生。但却带来了其他的问题: 活锁和死锁。,3)活锁和死锁,(1)活锁 在多个事务并发执行的过程中,可能会存在某个尽管总有机会获得锁的事务却永远也没得到锁,这种现象称为活锁。,(2)死锁 多个并发事务处于相互等待的状态,其中的每一

10、个事务都在等待它们中的另一个事务释放封锁,这样才可以继续执行下去,但任何一个事务都没有释放自己已获得的锁,也无法获得其他事务已拥有的锁,所以只好相互等待下去,死锁的情形如图 8.10 所示。,(3)死锁的预防 数据库中预防死锁的方法有两种。 第一种方法是要求每个事务必须一次性地将所有要使用的数据加锁或必须按照一个预先约定的加锁顺序对使用到的数据加锁。 第二种方法是每当处于等待状态的事务有可能导致死锁时,就不再等待下去,强行回滚该事务。,(4)死锁检测 (5)死锁恢复 当系统中存在死锁时,一定要解除死锁。具体的方法是从发生死锁的事务中选择一个回滚代价最小的事务,将其彻底回滚,或回滚到可以解除死锁

11、处,释放该事务所持有的锁,使其他的事务可以获得相应的锁而得以继续运行下去。,8.2.3 基于时标的并发控制技术,事务 Ti 运行时,有惟一的时间标记,称为时戳,用 TS(Ti) 表示,时标技术的基本思想是: (1) 每个事务开始执行时,系统为这个事务赋予一个时标(一般为当前时间),称之为启动时间,用 TS(Ti) 标识。 (2) 每个事务所进行的每个读写操作,均具有时标属性。 (3) 系统标识并保存每个有数据项 Q 的最近读时标R_TM(Q)和写时标W_TM(Q)。,(4) 某个事务 T 执行到某一读写操作时,比较事务T的时标 TS(Ti) 与操作对象 Q的最近读写时标: 若是读操作,如果 T

12、S(Ti ) W_TM(Q),则拒绝进行读操作,并将 T 的时标赋一个新值(一般为当前时间),重新启动T;否则执行读操作,并修改Q的读时标,使得 R_TM(Q)=max(t,R_TM(Q)。 若是写操作,如果 TS(Ti)R_TM(Q) 或 TS(Ti)W_TM(Q),则拒绝读操作,并将T 的时标赋一个新值(一般为当前时间),重新启动T; 否则执行读操作,并修改 Q 的写时标,使得 W_TM(Q)=TS(Ti)。,8.2.4 SQL Server 事务和封锁机制,1.事务 事务的类型 在 Microsoft SQL Server 系统中,可以把事务分成两种类型。一种是系统提供的事务,另一种是用

13、户定义的事务。,事务的工作原理,2.封锁机制, 封锁类型 (1) 共享锁 (2) 修改锁 (3) 独占锁 (4) 意向锁,(1)共享锁,共享锁是非独占的,允许多个并发事务读取其锁定的资源。通常情况下,数据被读取后,SQL Server 立即释放共享锁。例如,执行查询 SELECT 命令时,首先锁定第一页,读取之后释放对第一页的锁定,然后锁定第二页。这样,就允许在读操作过程中修改未被锁定的第一页。,(2)修改锁,修改锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。因为使用共享锁时,修改数据的操作分为两步,首先获得一个共享锁读取数据,然后将共享锁升级为独占

14、锁再执行修改操作。这样如果同时有两个或多个事务对一个事务申请了共享锁,在修改数据的时候,这些事务都要将共享锁升级为独占锁。这时 ,这些事务都不会释放共享锁而是一直等待对方释放,这样就造成了死锁。如果一个数据在修改前直接申请修改锁 ,在数据修改的时候再升级为独占锁 ,就可以避免死锁。修改锁与共享锁是兼容的 ,也就是说一个资源用共享锁锁定后,允许再用修改锁定。,(3) 独占锁 独占锁是为修改数据而保留的。它所锁定的资源,其他事务不能读取也不能修改。 (4) 意向锁 意向锁说明SQL Server有在资源的低层获得共享锁或独占锁的意向。, 锁冲突及其防止办法,在SQL Server中 ,系统能够自动

15、定期搜索和处理死锁问题。系统在每次搜索中标识所有等待锁定请求的进程会话,如果在下一次搜索中该被标识的进程仍处于等待状态 ,SQL Server 就开始递归死锁搜索。当搜索检测到锁定请求环时,系统将根据各进程会话的死锁优先级别来结束一个优先级最低的事务,此后,系统“回滚”该事务,这样,其他事务就有可能继续运行了。, 手工加锁,SQL Server 系统中建议让系统自动管理锁,但在 SQL Server 中,封锁操作可以通过SELECT、INSERT、 DELETE、 UPDATE支持显式加锁。 这些语句中进行显示设置封锁时,在指定选择表的同时指定对表所实施的封锁(在FROM 子句中),并且保持到

16、事务结束时再释放封锁。,8.3 数据库恢复,尽管数据库系统中采取了各种保护措施来保证数据库的安全性和完整性,保证并发事务能够正确执行,但硬件的故障、系统软件和应用软件的错误、操作员的失误以及恶意的破坏仍然是不可避免的。这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中数据部分或全部丢失。因此,DBMS必须具有把数据库从错误状态恢复到某种逻辑一致的状态(也称为正确状态或完整状态)的功能,这就是数据库的恢复功能。各种现有数据库系统运行情况表明,数据库系统所来用的恢复技术是否行之有效,不仅对系统的可靠程度起着决定性作用,而且对系统的运行效率也有很大影响,是衡量系

17、统性能优劣的重要指标。,8.3.1数据库恢复的原理及其实现技术,恢复系统应该提供两种类型的功能:一种是生成冗余数据,即对可能发生的故障作某些准备;另一种是冗余重建,即利用这些冗余数据恢复数据库。 生成冗余数据最常用的技术是数据备份和登记日志文件,在实际应用中,这两种方法常结合起来一起使用。,1.数据备份,备份也称作转储。数据备份(Data Dump)是指定期地将整个数据库复制到多个存储设备(如磁带、磁盘)上保存起来的过程,它是数据库恢复中采用的基本手段。 备份的数据称为后备副本或后援副本,当数据库遭到破坏后就可利用后援副本把数据库有效地加以恢复。备份是十分耗费时间和资源的,不能频繁地进行,应该

18、根据数据库的使用情况确定一个适当的备份周期。,1)备份的类型,全备份:即完整的备份整个数据库; 增量备份:增量数据库备份只备份自上次数据库备份后发生更改的数据; 文件和文件组备份:备份数据库文件或文件组,而不是备份数据库; 事务日志备份:只备份事务日志。,2)动态备份和静态备份,动态备份也称作在线备份,即在做备份时不中断数据库的运行,不中断数据库上的应用程序和事务处理。 静态备份也称作离线或脱机备份,这意味着在做备份时没有任何数据库事务在运行,这种备份方式应是首选的备份方式。,2.登记日志文件,日志文件(Logging)是用来记录事务对数据库的更新操作的文件。对数据库的每次修改,都将被修改项目

19、的原始值和新值写在一个叫做运行日志的文件中,目的是为数据库的恢复保留详细的数据。,在日志文件中需要登记以下内容: (1)各个事务的开始标记(BEGIN TRANSACTION) ; (2)各个事务的结束标记(COMMIT或ROLLBACK) ; (3)各个事务的所有更新操作。 这里每个事务开始的标记、每个事务的结束标记和每个更新操作均作为日志文件中的一个日志记录(Logrecord)。,登记日志文件必须遵循两条原则: (1)至少要等到相应运行记录的撤销部分已经写入日志文件中以后,才允许该事务向数据库中写入记录。 (2)直到事务的所有运行记录的撤销和重做两部分都已写入日志文件中以后,才允许事务完

20、成提交处理。 这两条原则称为日志文件的先写原则。,8.3.2数据库的故障和恢复策略,数据库运行过程中可能发生的故障主要有三类: 事务故障 系统故障 介质故障 不同的故障其恢复方法也不一样。,1. 事务故障(Transaction Failure)及其恢复,事务故障表示由非预期的、不正常的程序结束所造成的故障。 恢复的具体做法: (1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。 (2)对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据库。这样,如果记录中是插入操作,则相当于做删除操作(因为此时“更新前的值”为空)。若记录中是删除操作,则做插入操作(因为此

21、时“更新后的值”为空);若是修改操作,则相当于用修改前的值代替修改后的值。 (3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。 (4)如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。,2. 系统故障(System Failure)及其恢复,系统故障是指系统在运行过程中,由于某种原因,造成系统停止运转,致使所有正在运行的事务都以非正常方式终止,要求系统重新启动。 恢复的具体做法: (1)正向扫描日志文件(即从头扫描日志文件),找出在故障发生前已经提交事务,将其事务标识记入重做(REDO)队列。同时还要找出故障发生时尚未完成的事务,将其事务标识记入撤销(UNDO)队

22、列。 (2)对撤销队列中的各个事务进行撤销(UNDO)处理。进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。 (3)对重做队列中的各个事务进行重做(REDO)处理。进行REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行登记的操作。即将日志记录中“更新后的值”写入数据库。,3. 介质故障(Media Failure)及其恢复,介质故障是指系统在运行过程中,由于辅助存储器介质受到破坏,使存储在外存中的数据部分丢失或全部丢失。 恢复的具体做法: 1)装入最新的数据库副本,使数据库恢复到最近一次转储的可用状态。

23、 2)装入最新的日志文件副本,根据日志文件中的内容重做已完成的事务。,8.3.3 SQL Server 2005中数据的备份与恢复,SQL Server 2005 可以将数据库备份到很安全的地方,当数据库被破坏时,就可以利用备份好的数据恢复数据库。SQL Server 2005提供了四种数据库备份与恢复的方式: (1)全库备份:备份整个数据库。 (2)日志备份:备份日志文件。 (3)差异备份:仅备份自上次全库备份后被修改过的数据页。 (4)文件或文件组备份:对组成数据库的文件或文件组进行单独的备份。,小结,本章详细介绍了数据库的事务及事务管理、并发控制和数据库恢复技术。 事务是数据库的逻辑工作单位,由用户定义的一组操作序列组成,序列中的操作要么全做要么全不做,是一个不可分割的工作单位。 事务和程序是两个概念,一般而言,一个数据库应用程序由若干个事务组成,每个事务可以看做是数据库的一个状态,形成了某种一致性,而整个应用程序的操作过程则是通过不同事务使得数据库由某种一致性不断转换到新的一致性的过程。,并发控制是为了防止多个用户同时存取同一数据,造成数据库的不一致性。事务是数据

温馨提示

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

最新文档

评论

0/150

提交评论