下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九章 数据库恢复技术,事务的基本概念 数据库恢复概述 故障的种类 恢复的实现技术 恢复策略 具有检查点的恢复技术 数据库镜像,一、事务的基本概念,什么是事务 如何定义事务 事务的特性,什么是事务,事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位 事务和程序是两个概念 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序 一个应用程序通常包含多个事务 事务是恢复和并发控制的基本单位,数据库必须保证事务的一致性,如何定义事务,显式定义方式 BEGIN TRANSACTION BEGIN TRANSACTION
2、SQL 语句1 SQL 语句1 SQL 语句2 SQL 语句2 。 。 COMMIT ROLLBACK 隐式方式 当用户没有显式地定义事务时, DBMS按缺省规定自动划分事务,事务结束,COMMIT 事务正常结束 提交事务的所有操作(读+更新) 事务中所有对数据库的更新永久生效 ROLLBACK 事务异常终止 事务运行的过程中发生了故障,不能继续执行 回滚事务的所有更新操作 事务滚回到开始时的状态,事务的特性(ACID),原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持续性(Durability ),原子性,事务是数据库的逻辑工作单位 事务中包括
3、的诸操作要么都做,要么都不做,事务的一致性,事务执行的结果必须是使数据库从一个 一致性状态变到另一个一致性状态 一致性状态: 数据库中只包含成功事务提交的结果 不一致状态: 数据库中包含失败事务的结果,一致性与原子性,银行转帐:从帐号A中取出一万元,存入帐号B。 定义一个事务,该事务包括两个操作 这两个操作要么全做,要么全不做 全做或者全不做,数据库都处于一致性状态。 如果只做一个操作,数据库就处于不一致性状态。,隔离性,对并发执行而言一个事务的执行不能被其他事务干扰 一个事务内部的操作及使用的数据对其他并发事务是隔离的 并发执行的各个事务之间不能互相干扰,T1的修改被T2覆盖了!,检验隔离性
4、的方法之一是看数据库是否对相同的初始数据集重复执行一组特定的事务时,每次都能得到相同的结果。 假设事务T1在更新100行数据时,事务T2读取T1修改的一行数据,如果读取成功,则说明事务没有完全隔离。,持续性,持续性也称永久性(Permanence) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 接下来的其他操作或故障不应该对其执行结果有任何影响。(保证任何故障都不会引起更新后数据的丢失。),假设计算机系统导致内存数据丢失,但已写入磁盘的数据不会丢失。可以通过下面两点保证事务持久性的实现: 事务的更新应在事务完成之前写入磁盘。 事务的更新和写入磁盘的两个操作应保存足够的信息,以使数
5、据库系统在遇到故障后重启时重新构造更新。,保证事务ACID特性是事务处理的任务 破坏事务ACID特性的因素 多个事务并行运行时,不同事务的操作交叉执行 事务在运行过程中被强行停止,数据库的访问通常由以下操作完成,假设数据库永久驻留在磁盘中,而某些操作临时驻留在内存中。,数据库的访问通常由以下两个操作完成: read(x):从数据库传送数据项X到执行read操作的事务的一个局部缓冲区。 write(x):从执行write的事务的局部缓冲区把数据项x传回数据库。,若考虑到输入和输出操作的话分成以下几步: Input(x):从磁盘将x输入到缓冲区 output(x):把x从缓冲区输出到磁盘 read
6、(x,t):将数据项x传送到事务变量t write(x,t):将事务变量t传送回X,例如: AB 事务T1:AA*2 BB*2,例如:假设银行数据库中有一转帐事务Ti,从帐号A转$50到帐号B,其操作如下: Ti: read(A); A:=A-50; write(A); read(B); B:=B+50; write(B);,一致性:要求事务的执行不能改变A、B之和。否则A的值改变而B值不变,会造成数据不一致。 原子性:所有操作为一个整体。事务Ti的执行不能只修改A而未修改B值。 由于系统的故障,系统的状态不再反映数据库应当描述的现实世界的真实状态,这种状态称为不一致状态。 必须保证这种不一致
7、性在数据库中是不可见的。但在某一时刻会处于不一致状态。 保证原子性:对于事务要执行写操作的数据项,数据库系统在磁盘上已记录旧值,如果事务没能完成应恢复旧值。,隔离性: 假设事务Ti在执行过程中,即A至B转帐事务执行中,若数据库处于暂时不一致的状态时,另一个并发运行的事务在此时读取A和B并计算A+B会得到不一致的值。 因此要解决事务并发执行的问题 隔离性即要确保几个事务并发执行,他们的操作不是以交叉方式执行。,事务的状态,在不出现故障的情况下,所有事务都能成功完成。但并非事务总能顺利完成,这种事务称为中止事务。 成功完成执行的事务称为已提交事务。 一旦事务已提交,不能通过中止它来撤销其造成的影响
8、。,一个事务成功完成,必须处于以下状态之一: 活动状态。初始状态,事务执行时处于此状态。 部分提交状态。最后一条语句被执行后。 失败状态。处于活动状态的事务还没到达最后一个语句就中止执行。 中止状态。事务回滚并且数据库已恢复到事务开始执行前的状态后。,系统判定事务不能继续正常执行后(如由于硬件或逻辑错误),事务就进入了失败状态,这种事务必须回滚。,事务进入中止状态后,系统有两种选择: 重启事务:仅当引起事务中止的是软硬件错误而不是事务内部逻辑引起的。 取消事务:事务的内部逻辑有错。则要重写程序。,事务状态图,活动,begin transaction,部分提交,提交,失败,中止,end tran
9、saction,commit,rollback,abort,abort,二、数据库恢复,故障是不可避免的 计算机硬件故障 系统软件和应用软件的错误 操作员的失误 恶意的破坏 故障的影响 运行事务非正常中断 破坏数据库,数据库管理系统对故障的对策 DBMS提供恢复子系统 所谓数据库的恢复即:故障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态 保证事务ACID特性 恢复技术是衡量系统优劣的重要指标,三、故障分类,什么是事务故障(非预期的故障) 某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了 事务故障的常见原因 输入数据有误 运算溢出 违反了某些完整性限制 某些应用程序出错
10、 并行事务发生死锁,逻辑错误,系统错误,事务内部的故障有的是可以通过事务程序本身发现的,有的则是非预期的,不能由事务程序处理。 例如: Begin transaction read(A); A:=A-50; if(A0) then print余额不足,不能转帐 rollback; else write(A); read(B); B=B+50; write(B); commit;,发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘 事务故障的恢复: 撤消事务(UNDO) 强行回滚(ROLLBACK)该事务 清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样,系统故障,什么是
11、系统故障 整个系统的正常运行突然被破坏(硬件故障或软件) 所有正在运行的事务都非正常终止 内存中数据库缓冲区的信息全部丢失 外部存储设备上的数据未受影响,清除尚未完成的事务对数据库的所有修改 系统重新启动时,恢复程序要强行撤消(UNDO)所有未完成事务 将缓冲区中已完成事务提交的结果写入数据库 系统重新启动时,恢复程序需要重做(REDO)所有已提交的事务,介质故障,硬件故障使存储在外存中的数据部分丢失或全部丢失 介质故障比前两类故障的可能性小得多,但破坏性大得多,介质故障的常见原因,硬件故障 磁盘损坏 磁头碰撞 操作系统的某种潜在错误 瞬时强磁场干扰,介质故障的恢复,装入数据库发生介质故障前某
12、个时刻的数据副本 重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库,计算机病毒,人为的故障或破坏,四、恢复的实现技术,数据转储 登录日志文件,转储分为静态转储和动态转储两种状态 静态转储即转储过程中没有事务处于活动状态。得到是数据一致性的副本。 动态转储是转储期间允许对数据库进行存取或修改,此时数据库可能不一致,因此必须建立日志文件。(需要日志恢复方法redoundo来恢复数据库的一致性状态),转储还可分为海量转储和增量转储两种方式。 海量转储每次转储全部数据库 增量转储每次只转储上一次转储后更新过的数据。,基于日志的恢复,日志:是日志记录的序列,记录了数据库中的所有更新活动,
13、各种类型的日志记录为: 事务Ti开始。 Ti对数据项X执行写操作,更新前的旧值为V1,更新后的值为V2。 事务Ti提交,成功完成 事务Ti终止,没成功完成。 每次事务执行写操作之前,必须在数据库修改前生成该次写操作的日志记录。 日志必须放在稳定的存储器上,撤销日志(Undo操作,立即的数据库修改),发生故障时,系统使用undo操作来进行数据项的恢复。事务故障的恢复可利用undo操作撤销事务对数据库所作的修改。 在事务Ti开始执行以前,日志中写入记录。 执行过程中,Ti执行任何write(X)操作前要先向日志中写入适当的更新记录。 在被记录到日志之前,所有的output(x)操作必须已经执行完。
14、,Undo恢复的原则,undo(Ti)将事务Ti所更新的所有数据项的值恢复成旧值。其原则为: 如果日志既包含记录,又包含记录则什么都不做。 如果日志包含记录,但不包含记录,对日志中的每一个,以相反的顺序(最晚-最早),将x值恢复成旧值v1。,例:T0为从账户A转账50到账户B的事务。该事务定义如下: T0: read(A) A=A-50 write(A) read(B) B=B+50 write(B) T1为从账户C取出100.定义如下: read(C) C=C-100 write(C),考虑银行系统,事务T0和T1以先T0后T1的次序串行执行,则其日志和数据库系统输出时采纳的顺序为: 日志
15、数据库 A=950 B=2050 C=600 ,例如:考虑银行系统的三种情况: (事务T0和T1以先后的顺序串行执行),a中假设对应于事务T0中的write(B)的日志记录刚刚写入稳定存储器后就发生系统故障:则事务T0必须取消,帐户A和B分别恢复为1000和2000,b中事务T1执行undo操作,c的值为700 C中事务T0和T1都不需要执行undo操作。,重做日志(redo操作,延迟的数据库修改),当事务部分提交时,日志上有关事务的信息被用来执行延迟写。 事务Ti的执行过程如下: Ti开始执行前,向日志中写入记录. 修改磁盘上数据项x之前,所有的日志记录包括都被写到磁盘上。,必须保证在更新开
16、始前所有的日志已经写到了磁盘上。此时开始更新,并且事务进入提交状态。 延迟更新只需要数据项的新值,因此可以将旧值字段省去。,考虑之前的银行系统,假设事务串行执行,先执行T0后执行T1,执行前账户A、B、C的值分别为1000、2000、700。则数据库日志中事务相关信息为: ,可能采纳的日志及数据库输出顺序如下: 日志 数据库 A=950 B=2050 C=600,Redo恢复原则,该恢复机制的过程为: redo(Ti)将事务Ti更新的所有数据项的值置为新值。 故障发生后,检查日志。若日志记录中既包含又包含则事务Ti需要重新执行。 redo操作正向扫描日志文件,从最早的日志文件开始。,例如:考虑
17、银行系统的三种情况:,对于a中,事务T0中的write(B)的日志记录刚刚写入磁盘后就发生系统故障:系统重启后,不必做任何redo操作因为日志中没有出现提交记录。未完成的T0记录可以删除,b中假设对应于事务T1中的write(C)的日志记录刚写入磁盘(如b所示),则需要执行redo(T0),事务T1的日志可以删除 c中假设日志记录刚写入磁盘发生系统崩溃(如图c),则两个事务都要执行redo操作,Undo logging: System forced to update disk at the end of transactions (may increase disk I/O) cannot
18、redo recent updates to refresh a backup copy of the DB Redo logging: need to keep all modified blocks in memory until commit (may lead to shortage of buffer pool),Undo/Redo恢复策略,若从故障中恢复 任何commit事务都要进行redo更新(按正序扫描日志,最早的先做) 任何未完成的事务进行undo更新(按逆序扫描日志,最后的先做),故障发生后,恢复机制检查日志,决定事务的处理: 事务Ti需要undo,如果日志包含记录,但不包
19、含记录,将事务Ti所更新的所有数据库项的值恢复成旧值 事务Ti需要redo,如果日志记录既包含记录又包含记录,将事务Ti所更新的所有数据项的值置为新值。,例如:考虑银行系统的三种情况:,假设对应于事务T0中的write(B)的日志记录刚刚写入稳定存储器后就发生系统故障:则事务T0必须取消,执行undo(T0) 假设对应于事务T1中的write(C)的日志记录刚写入磁盘,系统发生故障则执行两个恢复动作: 执行操作undo(T1), 执行操作redo(T0) 假设日志记录刚写入磁盘发生系统崩溃,则两个事务都要执行redo操作,Sqlserver的日志序列,1.数据库开始状态 2.数据修改命令 3.
20、记录事务日志:所有更新首先写到事务日志,然后在确认后写入数据文件 4.提交事务 5.更新数据文件 6.事务结束 7.回滚事务日志,Sqlserver的故障恢复,如果sqlserver出现故障,恢复后将自动检查事务日志。 如果事务日志有尚未提交的DML操作的记录,这些操作将被回滚。此时关掉数据库服务器的电源,能完成该项回滚工作 事务日志记录的已提交但没有写入数据文件的DML操作,将被写入数据文件。,五、恢复策略,事务故障的恢复 UNDO操作 系统故障的恢复 未完成事务对数据库的更新可能已写入数据库 已提交事务对数据库的更新还留在缓冲区 已经commit或有begin transaction的进行
21、REDO,只有begin transaction 的进行undo,介质故障的恢复 装入最新的数据库后备副本。 对于动态转储的副本还需利用日志副本进行系统故障恢复的方法。 装入相应的日志文件副本,重做已完成的事务,缺点,对于以上两种恢复技术需要搜索整个日志来决定使用redo或undo,困难: 搜索过程太耗时。 大所属需要redo的事务都将其更新写入了数据库中。会使恢复过程变得更长。,检查点恢复技术,为了降低以上开销,在日志中增加新的记录检查点记录,系统周期性地执行检查点,具体动作为: 将当前日志缓冲中的所有日志记录写入日志文件上(日志文件都存储在稳定存储器上)。 把所有修改了的数据记录写入到磁盘的数据库中。 将检查点记录写入到日志文件上。 检查点在执行过程中,不允许事务执行任何更新动作,如写缓冲块或写日志记录。等待所有的事务都完成。,使用检查点可以提高恢复过程效率 当事务T在检查点之前提交,则T对数据库所做的修改已写入数据库,此时恢复时不必再对T进行redo操作。,检查点恢复机
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息技术(信创版)(微课版)课件全套 徐丽 项目1-6 计算机基础 - 其他常用软件的应用-1
- 十八项医疗核心制度解读
- 2026年剧本杀运营公司员工晋升与调岗管理制度
- 2026年及未来5年中国金融软件行业市场竞争格局及投资前景展望报告
- 2025年社区智慧健康管理服务平台技术创新与市场前景研究报告
- 体检科各检查室制度
- 产科护理与跨学科合作
- 人事四项制度
- 机动车检测站培训内容课件
- 中国科学院空间应用工程与技术中心2025年校园招聘备考题库及1套完整答案详解
- 医疗器械胰岛素泵市场可行性分析报告
- 地铁施工现场防台风措施
- 种植业合作社账务处理
- 【丽江玉龙旅游薪酬制度的创新研究6100字】
- 公司两权分离管理制度
- 车辆叉车日常检查记录表
- 广东高校毕业生“三支一扶”计划招募考试真题2024
- 胶带机硫化工艺.课件
- 种鸡免疫工作总结
- 河南省商丘市柘城县2024-2025学年八年级上学期期末数学试题(含答案)
- 河南省信阳市2024-2025学年高二上学期1月期末英语试题(含答案无听力原文及音频)
评论
0/150
提交评论