0
点赞
收藏
分享

微信扫一扫

恢复的实现技术

yundejia 2022-01-22 阅读 68

恢复机制涉及的关键问题

1.如何建立冗余数据
数据转储(backup)
登记日志文件(logging)
2. 如何利用这些冗余数据实施数据库恢复

数据转储

什么是数据转储

转储是指数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程
备用的数据文本称为后备副本(backup)或后援副本
数据库遭到破坏后可以将后备副本重新装入
重装后备副本只能将数据库恢复到转储时的状态
要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务
在这里插入图片描述

上图中:
系统在Ta时刻停止运行事务,进行数据库转储
在Tb时刻转储完毕,得到Tb时刻的数据库一致性副本
系统运行到Tf时刻发生故障
为恢复数据库,首先由数据库管理员重装数据库后备副本,将数据库恢复至Tb时刻的状态
重新运行自Tb~Tf时刻的所有更新事务,把数据库恢复到故障发生前的一致状态

转储方法

静态转储
在系统中无运行事务时进行的转储操作
转储开始时数据库处于一致性状态
转储期间不允许对数据库的任何存取、修改活动
得到的一定是一个数据一致性的副本
优点:实现简单
缺点:降低了数据库的可用性
转储必须等待正运行的用户事务结束
新的事务必须等转储结束
动态转储
转储操作与用户事务并发进行
转储期间允许对数据库进行存取或修改
优点
不用等待正在运行的用户事务结束
不会影响新事务的运行
动态转储的缺点
不能保证副本中的数据正确有效
例在转储期间的某时刻Tc,系统把数据A=100转储到磁带上,而在下一时刻Td,某一事务将A改为200。
后备副本上的A过时了
利用动态转储得到的副本进行故障恢复
需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件
后备副本加上日志文件就能把数据库恢复到某一时刻的正确状态
海量转储: 每次转储全部数据库
增量转储: 只转储上次转储后更新过的数据
海量转储与增量转储比较
从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便
如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效
转储方法分类
在这里插入图片描述

登记日志文件

日志文件的格式和内容

什么是日志文件
日志文件(log file)是用来记录事务对数据库的更新操作的文件
日志文件的格式
以记录为单位的日志文件
以数据块为单位的日志文件
以记录为单位的日志文件内容
各个事务的开始标记(BEGIN TRANSACTION)
各个事务的结束标记(COMMIT或ROLLBACK)
各个事务的所有更新操作
以上均作为日志文件中的一个日志记录 (log record)
以记录为单位的日志文件,每条日志记录的内容
事务标识(标明是哪个事务)
操作类型(插入、删除或修改)
操作对象(记录ID、Block NO.)
更新前数据的旧值(对插入操作而言,此项为空值)
更新后数据的新值(对删除操作而言, 此项为空值)
以数据块为单位的日志文件,每条日志记录的内容
事务标识
被更新的数据块

日志文件的作用

用途
进行事务故障恢复
进行系统故障恢复
协助后备副本进行介质故障恢复
具体作用
事务故障恢复和系统故障恢复必须用日志文件。
在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库。
在静态转储方式中,也可以建立日志文件。
当数据库毁坏后可重新装入后援副本把数据库恢复到转储结束时刻的正确状态
利用日志文件,把已完成的事务进行重做处理
对故障发生时尚未完成的事务进行撤销处理
不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态
在这里插入图片描述

登记日志文件

为保证数据库是可恢复的,登记日志文件时必须遵循两条原则
登记的次序严格按并发事务执行的时间次序
必须先写日志文件,后写数据库
写日志文件操作:把表示这个修改的日志记录写到日志文件中
写数据库操作:把对数据的修改写到数据库中
为什么要先写日志文件
写数据库和写日志文件是两个不同的操作
在这两个操作之间可能发生故障
如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了
如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性
欢迎大家加我微信交流讨论(请备注csdn上添加)
在这里插入图片描述

举报

相关推荐

数据恢复技术

0 条评论