数据库恢复技术

数据库故障的种类

事务内部的故障
              事务故障是由于程序执行错误而引起事务非预期的、异常终止的故障。
              它发生在单个事务的局部范围内,实际上就是程序的故障。有的事务故障可以通过事务程序本身发现。
系统故障
               系统故障是计算机程序的语法错误或逻辑错误。
               系统故障是指系统在运行过程中,由于某种原因,以致事务在执行过程中以非正常的方式终止。
               按故障的部件可将故障分为硬件故障和软件故障。
               硬件故障是指故障因硬件系统失效。软件故障是指程序运行一些非法指令,如特权指令。
介质故障
       介质故障是指由于各种原因引起的数据库数据文件、控制文件或重做日志文件的损坏,导致系统无法正常运行。
       例如,磁盘损坏导致文件系统被破坏。这就需要管理员提前做好数据库的备份,否则将导致数据库无法恢复
计算机病毒
           计算机病毒是一种人为的故障和破坏,是一些恶作剧者研制的一种计算机程序,可以繁殖和传播,
           并造成对计算机系统包括数据库的危害。这类故障,轻则使部分数据不正确,重则使整个数据库遭到破坏。

恢复的实现技术

建立冗余数据的常用方法是数据库转储法和日志文件法。

数据库转储法

            数据库转储法:
             由DBA(数据库管理员)定期地把整个数据库复制到磁带、另一个磁盘或光盘上保存起来,
             作为数据库的后备副本(也称后援副本)
            原理: 
              数据库发生破坏时,可把后备副本重新装入以恢复数据库。
              但重装副本只能恢复到转储时的状态。
              自转储以后的所有更新事务必须重新运行,才能使数据库恢复到故障发生前的一致状态。
转储分为静态转储和动态转储两类。
静态转储
                   在系统中没有事务运行的情况下进行转储称为静态转储。
                   这可保证得到一个一致性的数据库副本,但在转储期间整个数据库不能使用。
动态转储
                   允许事务并发执行的转储称为动态转储。
                   动态转储克服了静态转储会降低数据库可用性的缺点,但不能保证转储后的副本是正确有效的。
注:必须建立日志文件,把转储期间任何事务对数据库的修改都记录下来。
转储分为海量转储和增量转储。
海量转储是指转储全部数据库。
增量转储是指只转储上次转储后更新过的数据。

日志文件法

日志文件的格式和内容
    日志文件时用来记录事务对数据库的更新操作的文件。
    一般分为两种格式:
                 以记录为单位的日志文件
                 以数据块为单位的日志文件

      日志文件需要登记的内容(以记录为单位):
         各个事务的开始(Start Transaction)标记
         各个事务的结束(Commit或Rollback)标记
         各个事务的所有更新操作
         每个事务的开始标记、结束标记和每个更新操作构成一个日志记录(Log Record)
      每个日志记录的内容主要内容(以数据块为单位):
         事务标识(标明是哪个事务)
         操作的类型(插入、删除或修改)
         操作对象(记录内部标识)
         更新前数据的旧值(对插入操作而言此项为空值)
         更新后数据的新值(对删除操作而言此项为空值)。
        (对以数据块为单位的日志文件,日志记录的内容包括事务标识和被更新的数据块。
         由于将更新前的整个块和更新后的整个块都放入日志文件中,因而操作的类型和操作对象等信息就不必放入日志记录中)
日志文件法必须遵循以下两条原则:
            (1)事务每一次对数据库的更新都必须写入日志文件。一次更新在日志文件中有一条记载更新工作的记录。
            (2)必须先把日志记录写到日志文件中,再执行更新操作,即日志先写原则。
曰志文件有三类记录:
     (1)每个事务开始时,必须在日志文件中登记一条该事务的开始记录;
     (2)每个事务结束时,必须在日志文件中登记一条结束该事务的记录(注明为(COMMIT或ROLLBACK);
     (3)任一事务的任一次对数据库的更新,都必须在日志文件中登入一条记录,其格式为
     (<事务标识>,<操作类型>,<更新前数据旧值>,<更新后数据的新值>)其中,<操作类型>有插入、删除和修改三种类型)

恢复策略

事务故障的恢复
    (1)反向扫描日志文件(即从最后向前扫描日志文件),查找该事务的更新操作。
    (2)对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
     (3)继续反向扫描日志文件,做同样处理。
     (4)如此处理下去,直至读到此事务的开始标记,该事务故障的恢复就完成了。
系统故障的恢复
    (1)正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。
    (2)对撤销队列中的各个事务进行UNDO处理。进行UNDO处理的方法是,反向扫描日志文件,
         对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
    (3)对重做队列中的各个事务进行REDO处理。进行REDO处理的方法是,正向扫描日志文件,
         对每个REDO事务重新执行日志文件登记的操作,即将日志记录中“更新后的值”写入数据库。   
介质故障恢复
       (1)DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态。
       (2)DBA装入转储结束时刻的日志文件副本。
       (3)DBA启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。

具有检查点的恢复技术

检查点记录的内容
      (1)建立检查点时刻所有正在执行的事务清单
      (2)这些事务最近一个日志记录的地址
动态维护日志文件的方法:
       周期性的执行建立检查点,保存数据库的状态操作
       (1)将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上
       (2)在日志文件中写入一个检查点记录
       (3)将当前数据缓冲去的所有数据写入磁盘的数据库中
       (4)把检查点记录在日志文件中的地址写入一个重新开始文件

数据库镜像

             原理:
                     数据库镜像是DBMS根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,
                     每当主数据库更新时,DBMS会自动把更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性。
             作用:
             (1)当出现介质故障时,可由镜像磁盘继续提供数据库的可用性,
                 同时DBMS自动利用镜像磁盘进行数据库的修复,不需要关闭系统和重装数据库副本。
             (2)没有出现故障时,数据库镜像还可以用于并发操作。
             即当一个用户对数据库加排他锁修改数据时,其他用户可以读镜像数据库,而不必等待该用户释放锁.
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值