五门基础或专业课程的教学2016数据库系统原理db-chapter_第1页
五门基础或专业课程的教学2016数据库系统原理db-chapter_第2页
五门基础或专业课程的教学2016数据库系统原理db-chapter_第3页
五门基础或专业课程的教学2016数据库系统原理db-chapter_第4页
五门基础或专业课程的教学2016数据库系统原理db-chapter_第5页
已阅读5页,还剩45页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

数据库系统原理主讲:杨艳2023/4/2HD-ITR2第三篇实现篇2023/4/2HD-ITR3实现篇第八章物理存储结构第九章数据库管理系统的数据字典第十章关系代数操作的实现算法第十一章查询优化技术第十二章事务处理技术之一:并发控制技术第十三章事务处理技术之二:数据库恢复技术第十四章其他事务处理技术第十三章事务处理技术之二:数据库恢复技术2023/4/2HD-ITR4第十三章数据库恢复技术数据库恢复机制用来进行事务终止后的善后处理和系统故障恢复处理,确保系统发生故障以后,数据库能够恢复到正确的状态。2023/4/2HD-ITR513.1数据库恢复的必要性13.2使用日志的数据库恢复技术13.1数据库恢复的必要性第十三章数据库恢复技术2023/4/2HD-ITR613.1数据库恢复的必要性数据库系统的数据库恢复机制的目的有两个:第一个目的是保证事务的原子性,即确保一个事务被交付运行之后,要么该事务中的所有数据库操作都被成功地完成而且这些操作的结果被永久地存储到数据库中,要么这个事务对数据库没有任何影响。数据库管理系统绝不允许一个事务的部分数据库操作被成功地执行,而另一部分数据库操作失败或没有被执行。第二个目的是当系统发生故障以后,数据库能够恢复到正确状态。2023/4/2HD-ITR713.1数据库恢复的必要性破坏事务原子性和引起系统故障的原因:计算机系统故障在事务运行过程中发生的软硬件故障。事务或系统错误事务中的某些操作或错误参数可能引起事务的失败,如零做除数、数溢出等。用户也可以通过某种方式终止事务的运行。事务的强行终止事务经常具有测试某些特殊情况发生的功能。当测试的情况发生时,事务将被强行终止。如果一个事务违背了可串行性条件或几个事务处于死锁状态,相应的事务将被并发控制机制强行终止。磁盘故障在事务进行读写操作时,磁盘发生硬件故障。其他原因磁盘毁坏、电源故障、机房失火等意外情况。2023/4/2HD-ITR813.1数据库恢复的必要性数据库的存储设备按其存取速度、容量和故障可恢复性分为如下三种:(1)非永久存储器(2)永久存储器(3)永恒存储器2023/4/2HD-ITR913.1数据库恢复的必要性13.2使用日志的数据库恢复技术13.2使用日志的数据库恢复技术第十三章数据库恢复技术2023/4/2HD-ITR1013.2使用日志的数据库恢复技术银行数据库系统的例子:设事务T从帐号A向帐号B转50元钱,A与B的初值分别是1000和2000元。假设在事务T的执行期间,在WRITE(B)执行之前WRITE(A)执行之后发生系统故障。由于主存内容丢失了,所以不知道事务T的状况如何。于是,当系统恢复正常以后,可能选择如下的两个方法之一进行数据库恢复:(1)重新运行事务T。如此做法将使A的值变为900美元,而不是950,数据库进入错误状态。(2)不再运行事务T。这样,A和B的值分别是950和2000美元。数据库同样进入错误状态。2023/4/2HD-ITR1113.2使用日志的数据库恢复技术银行数据库系统的例子:显然上述两种简单的数据库恢复方法都不能保证数据库的正确性。问题的根源在于:没有等到事务真正提交就已经修改了数据库。正确的数据库恢复技术应该保证每个事务的原子性,即要么一个事务的所有操作结果都存入数据库,要么所有操作对数据库都无影响,决不允许部分操作的结果记入了数据库,而另一部分操作的结果却丢失了。2023/4/2HD-ITR12为了保证事务的原子性,在执行一个数据库更新操作时,可以首先把描述更新操作的信息写入永恒存储器,而不修改数据库本身。当事务提交时,再使用永恒存储器中存储的更新操作信息实现数据库的更新。13.2使用日志的数据库恢复技术2023/4/2HD-ITR13数据库系统日志记录有关事务的数据库操作信息的存储结构是数据库系统日志,简称日志。使用如下的表示法表示各种类型的日志记录:(1)<T,start>:事务T已经开始。(2)<T,X,V1,V2>:事务T在数据项X上执行写操作。X在执行写操作之前的值为V1,执行写操作之后的值为V2。(3)<T,commit>:事务T已经提交。为了保证日志在系统和磁盘发生故障时仍可使用,它必须存储在永恒存储器上。13.2使用日志的数据库恢复技术2023/4/2HD-ITR14无论什么时候,当一个事务执行完一个写操作WRITE(Q),就应该在数据库被修改之前建立起描述这个写操作的日志记录。需要时,既可以用日志记录中存储的Q的新值更新数据库中的Q,也可以根据日志记录中存储的Q的原始值把数据库中已经由WRITE(Q)操作改变的Q值恢复到WRITE(Q)执行之前的值。13.2使用日志的数据库恢复技术2023/4/2HD-ITR15使用日志的数据库恢复技术推迟更新技术(REDO日志技术)即时更新技术(UNDO/REDO日志)13.2使用日志的数据库恢复技术2023/4/2HD-ITR16推迟更新技术为了保证事务的原子性,在每个事务运行期间,推迟更新技术在日志中记录这个事务对数据库的所有更新操作,把所有数据库更新操作推迟到该事务提交时执行。推迟更新技术必须遵循下述推迟更新协议:(1)每个事务在到达提交点之前不能更新数据库。(2)在一个事务的所有更新操所作对应的日志记录写入永恒存储器之前,该事务不能到达提交点。13.2使用日志的数据库恢复技术2023/4/2HD-ITR17推迟更新技术当一个事务到达提交点时,称该事务进入部分提交状态。推迟更新协议保证当一个事务部分提交时,这个事务的所有更新操作的信息都已记录在日志中。当一个事务部分提交时,推迟更新技术可以使用日志中有关该事务的数据库更新操作的信息更新数据库。如果在一个事务部分提交之前异常结束或系统发生故障,日志中有关这个事务的信息将被删除。13.2使用日志的数据库恢复技术2023/4/2HD-ITR18事务T:从帐号A向帐号B转50元钱。A与B的初值分别是1000和2000元。13.2使用日志的数据库恢复技术2023/4/2HD-ITR19使用推迟更新技术执行事务T13.2使用日志的数据库恢复技术T开始执行时,如果T发出一个WRITE(X)操作,则当T部分提交时,然后,对于日志中每个型为<T,X,V1,V2>的记录,把数据库中数据项X的值更新为V2。在进行数据库更新过程中,系统可能发生故障。必须保证在数据库更新过程开始之前,所有的日志记录都已经被写到永恒存储器上。这一步工作完成之后,数据库真正的被事务T更新,T进入提交状态。显然,推迟更新技术只要求新的数据项值。于是,前面介绍的日志结构中的原始值域可以省略。在日志中写一个新记录<T,start>。在日志中写入一个新记录<T,X,V1,V2>,其中,V1是X的原始值,V2是WRITE(X)要写入X的值。在日志中写一个新记录<T,commit>。2023/4/2HD-ITR20考虑银行数据库系统:事务T0从帐号A向帐号B转储50元钱:T0:read(A);A:=A-50;write(A);read(B);B:=B+50;write(B)。事务T1从帐号C支出100元钱:T1:read(C);C:=C-100;write(C)。13.2使用日志的数据库恢复技术2023/4/2HD-ITR21考虑银行数据库系统:设A、B和C的初值分别是1000、2000、和700元,并且T0和T1按串行调度<T0,T1>执行。日志中包含的有关T0和T1的信息如下:13.2使用日志的数据库恢复技术2023/4/2HD-ITR22考虑银行数据库系统:按照推迟更新协议,T0和T1的执行结果写入数据库和日志的一种顺序:13.2使用日志的数据库恢复技术2023/4/2HD-ITR23使用日志,数据库恢复机制可以处理任何导致非永久存储器的信息丢失问题。数据库恢复机制需要下边的操作:redo(T):FOR日志中每个型为<T,X,V>的记录DO

把数据库中数据项X的值改为值V;ENDFOR。redo操作必须是幂等的,即执行多次和执行一次的效果相同。13.2使用日志的数据库恢复技术2023/4/2HD-ITR24下文中“系统故障发生后”是指“系统发生故障并被修复以后”。当系统故障发生后,数据库恢复机制将考察日志,确定需要重做的事务T。事务T需要重做当且仅当日志包含记录<T,starts>和<T,commits>。于是,如果系统在事务T成功完成之后发生故障,日志中有关T的信息将被用来将数据库恢复到正确状态。13.2使用日志的数据库恢复技术2023/4/2HD-ITR25事务T0和T1定义如前,而且按调度<T0,T1>运行。13.2使用日志的数据库恢复技术2023/4/2HD-ITR26假定系统在事务运行结束之前出现故障。设故障恰好发生在T0的write(B)操作的信息被写入日志之后。13.2使用日志的数据库恢复技术在这种情况下,数据库恢复机构不必采取任何恢复行动,因为日志中没有提交记录。A和B的值仍然保持为1000和2000元。2023/4/2HD-ITR27假定系统在事务运行结束之前出现故障。设故障恰好发生在write(C)执行之后。13.2使用日志的数据库恢复技术这种情况下,数据库恢复机构需要执行redo(T0)操作,因为记录<T0,commits>在日志中。当redo(T0)操作被执行之后,帐号A和B的值分别是950和2050元。帐号C的值仍然是700元。2023/4/2HD-ITR28假定系统在事务运行结束之前出现故障。设故障恰好发生在<T1,commits>执行之后。13.2使用日志的数据库恢复技术这种情况下,由于日志中包含两个提交记录<T0,commits>和<T1,commits>,数据库恢复机制必须执行redo(T0)和redo(T1)。这些操作执行完以后,帐号A、B和C的值分别是950、2050和600。2023/4/2HD-ITR29再考虑另一种情况:正在恢复时又发生了第二次系统故障。由于已经执行了一些redo操作,数据库发生了部分更新,但有可能并没将所有的数据库更新都记入数据库。当系统的第二次故障到来时,恢复工作与上面的例子相同,对于日志中的每个提交记录<Ti,commits>,执行redo(Ti)。13.2使用日志的数据库恢复技术2023/4/2HD-ITR30使用推迟更新技术的数据库恢复过程定义如下:(1)从后向前扫描日志记录,建立两个事务表:一个表称为提交事务表,包含全部具有日志记录<T,commits>的事务T,即已提交的事务;另一个表称为未提交事务表,包括全部具有日志记录<T,starts>,但不具有日志记录<T,commits>的事务T,即尚未提交的事务;(2)对于提交事务表中的每个事务T,执行REDO(T);(3)对于未提交事务表中的每个事务T,删除所有T的日志记录,放弃T,待以后重新启动执行。13.2使用日志的数据库恢复技术31

redo日志的检查点redo日志的非静止检查点的步骤如下:写入日志记录<STARTCKPT(T1,T2,…,Tk)>,其中T1,T2,…,Tk是所有活跃(即未提交的)事务,并刷新日志将<STARTCKPT>记录写入日志时所有提交事务已经写到缓冲区但还没有写到磁盘的数据库元素写到磁盘写入日志记录<ENDCKPT>,并刷新日志13.2使用日志的数据库恢复技术32

图8-8给出了一个可能的redo日志,其中发生了一个检查点。当我们开始检查点时,只有T2是活跃的,但T1所写的A值可能已经到达磁盘。如果没有,那么我们必须在检查点结束前,将A拷贝到磁盘。检查点的结尾出现在几个其他的事件发生后,T2为数据库元素C写入一个值,一个新事务T3开始并为D写入一个值,在检查点结束后发生的唯一的事情是T2和T3提交。33

使用带检查点的redo日志的恢复假设在崩溃发生前日志中的最后一条检查点记录是<ENDCKPT>在对应的<STARTCKPT(T1,T2,…,Tk)>前提交的事务已经将其修改写到了磁盘,因此我们不必关心如何恢复这些事务的影响只关心最后一个<STARTCKPT(T1,T2,…,Tk)>中提到的事务Ti,以及该日志记录在日志中出现后开始的事务在搜索日志时.我们在找到最早的<STARTTi>记录后就不必继续向后看了13.2使用日志的数据库恢复技术34

使用带检查点的redo日志的恢复假设日志中的最后一条检查点记录是<STARTCKPT(T1,T2,…,Tk)>我们不能确定在此检查点开始前提交的事务是否已经将其修改写到磁盘上因此,我们必须搜索到前一<ENDCKPT>记录,找到与之匹配的<STARTCKPT(S1,S2,…,Sm)>记录,并重做这些已经提交的、要么在STARTCKPT后开始要么在Si中的事务13.2使用日志的数据库恢复技术35发生故障发生故障发生故障2023/4/2HD-ITR36使用日志的数据库恢复技术推迟更新技术即时更新技术13.2使用日志的数据库恢复技术2023/4/2HD-ITR37即时更新技术

即时更新技术允许事务直接更新数据库。处于活动状态的事务直接在数据库上实施的更新称为非提交更新。任何即时更新技术都必须遵循如下的即时更新协议:(1)所有<T,X,V1,V2>型日志记录安全地存储到永恒存储器之前,事务T不能更新数据库。(2)所有<T,X,V1,V2>型日志记录安全地存储到永恒存储器之前,不允许事务T提交。13.2使用日志的数据库恢复技术2023/4/2HD-ITR38即时更新协议保证在系统故障发生时,每个运行事务的更新操作的描述信息都安全地记录在日志中。一旦系统故障导致事务T失败,即时更新技术将根据<T,X,V1,V2>型日志记录,把数据项X的值恢复为它的原始值V1。13.2使用日志的数据库恢复技术2023/4/2HD-ITR39即时更新协议T开始执行时,记录<T,starts>被写到日志。在T运行期间,当T发出一个write(X)操作时,记录<T,X,V1,V2>首先被写入日志,然后直接在数据库上执行write(X)。当T部分提交时,记录<T,commits>被写到日志。为了满足即时更新协议的要求,在WRITE(X)操作直接应用到数据库之前,有关这个操作的日志记录必须安全地写入永恒存储器。13.2使用日志的数据库恢复技术2023/4/2HD-ITR40仍以事务T0和T1为例说明即时更新技术。设事务T0和T1按调度<T0,T1>顺序执行。日志中有关这两个事务的记录如下:13.2使用日志的数据库恢复技术2023/4/2HD-ITR41当T0和T1运行时,数据库和日志按照即时更新协议变化过程:13.2使用日志的数据库恢复技术2023/4/2HD-ITR42即时更新技术需要如下两个操作:(1)undo(T):

FOR日志中每个型为<T,X,V1,V2>的记录DO

把数据库中数据项X的值改为V1;ENDFOR。(2)redo(T):

FOR日志中每个型为<T,X,V1,V2>的记录DO

把数据库中数据项X的值改为V2;ENDFOR。undo和redo操作必须是幂等的,即执行多次和执行一次的效果相同。13.2使用日志的数据库恢复技术2023/4/2HD-ITR43系统发生故障后,即时更新技术将调用如下的过程进行数据库的恢复处理:(1)从后向前扫描日志记录,建立两个事务表:一个表称为提交事务表,包含全部具有日志记录<T,commits>的事务T,即已提交的事务;另一个表称为未提交事务表,包括全部具有日志记录<T,starts>,但不具有日志记录<T,commits>的事务T,即尚未提交的事务;(2)对于未提交事务表中的每个事务T,执行UNDO(T),从日志种删除T的信息;(3)对于提交事务表中的每个事务T,执行REDO(T)。13.2使用日志的数据库恢复技术2023/4/2HD-ITR44仍然假定事务T0和T1按照调度<T0,T1>顺序运行。日志中有关这两个事务的记录如下:13.2使用日志的数据库恢复技术2023/4/2HD-ITR45假定系统在事务运行结束之前出现故障。设故障发生在T0的write(B)的日志记录已被写到永恒存储器后,在<T0,commits>记录写入日志之前。13.2使用日志的数据库恢复技术在这种情况下,数据库恢复机制必须执行undo(T0)操作。结果,数据库中帐号A和B的值被恢复成为1000和2000元。

2023/4/2HD-ITR46假定系统在事务运行结束之前出现故障。设故障恰好发生在T1的write

温馨提示

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

评论

0/150

提交评论