数据库恢复技术
事务的基本概念
事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
事务和程序是两个概念
在关系数据库中,一个事务可以是一条SQL语句,一组SQL语另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。
0100101000001010**********
转储方法-静态转储
在系统中无运行事务时进行转储
转储开始时数据库处于一致性状态,转储期间不允许对数据库的任何存取、修改活动
优点:实现简单
缺点:降低了数据库的可用性
转储必须等用户事务结束
新的事务必须等转储结束
动态转储
转储操作与用户事务并发进行
转储期间允许对数据库进行存取或修改
优点
不用等待正在运行的用户事务结束
不会影响新事务的运行
缺点
不能保证副本中的数据正确有效
动态转储
利用动态转储得到的副本进行故障恢复
需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件
后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态
海量转储与增量转储
海量转储: 每次转储全部数据库
增量转储: 只转储上次转储后更新过的数据
海量转储与增量转储比较
从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便
但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效
1001000110**********
1001000110**********
0010000
1001000110**********
0010000
0010000
恢复的实现技术
建立冗余数据
数据转储
转储状态
动态转储
静态转储
转储方式
海量转储
动态海量转储
静态海量转储
增量转储
动态增量转储
静态增量转储
转储策略
应定期进行数据转储,制作后备副本。
但转储又是十分耗费时间和资源的,不能频繁进行。
DBA应该根据数据库使用情况确定适当的转储周期和转储方法。
例:
每天晚上进行动态增量转储
每周进行一次动态海量转储
每月进行一次静态海量转储
日志文件
日志文件日志文件(log)是用来记录事务对数据库的更新操作的文件
日志文件的格式
以记录为单位的日志文件
以数据块为单位的日志文件
日志文件内容
各个事务的开始标记(BEGIN TRANSACTION)
各个事务的结束标记(COMMIT或ROLLBACK)
各个事务的所有更新操作
与事务有关的内部更新操作
日志文件中的一个日志记录 (log record)
基于记录的日志文件
每条日志记录的内容
事务标识
操作类型(插入、删除或修改)
操作对象(记录ID、Block NO.)
更新前数据的旧值(对插入操作而言,此项为空值)
更新后数据的新值(对删除操作而言, 此项为空值)
基于数据块的日志文件
每条日志记录的内容
事务标识(标明是哪个事务)
操作对象(记录ID、Block NO.)
更新前数据所在的整个数据块的值(对插入操作而言,此项为空值)
更新后整个数据块的值(对删除操作而言, 此项为空值)
日志文件的用途
用途
进行事务故障恢复
进行系统故障恢复
协助后备副本进行介质故障恢复
与静态转储后备副本配合进行介质故障恢复
静态转储的数据已是一致性的数据
如果静态转储完成后,仍能定期转储日志文件,则在出现介质故障重装数据副本后,可以利用这些日志文件副本对已完成的事务进行重做处理
这样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态
日志文件的用途
介质故障恢复:日志文件 + 动态转储后备副本
动态转储数据库:同时转储同一时点的日志文件
后备副本与该日志文件结合起来才能将数据库恢复到一致性状态。
利用这些日志文件副本进一步恢复事务,避免重新运行事务程序。
登记日志文件的原则
为保证数据库是可恢复的,登记日志文件时必须遵循两条原则
登记的次序严格按并行事务执行的时间次序
必须先写日志文件,后写数据库
写日志文件操作:把表示这个修改的日志记录写到日志文件
写数据库操作:把对数据的修改写到数据库中
登记日志文件的原则
为什么要先写日志文件
写数据库和写日志文件是两个不同的操作,在这两个操作之间可能发生故障
如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了
如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性
恢复策略-事务故障
事务故障:事务在运行至正常终止点前被中止
恢复方法由恢复子系统应利用日志文件撤消(UNDO)此事务已对数
数据库恢复技术-【PPT课件】 来自淘豆网m.daumloan.com转载请标明出处.