浅谈数据库恢复技术

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库系统在运行的过程中,数据库管理系统(DBMS)负责将所有的事务更新操作登记到日志文件中.例如,表2的事务T1,T2的更新操作在日志文件中登记的日志记录如表3所示.

2.2利用日志文件撤销事务(UNDO)或重做事务(REDO)

利用日志文件进行故障恢复是有两个基本操作:UNDO(Ti)或REDO(Ti).

UNDO(Ti):撤销事务Ti;REDO(Ti):重做事务Ti.UNDO(Ti)的具体步骤为:

反向扫描日志文件,找到需要撤销的事务的更新操作.对事务Ti的更新操作执行逆操作,即将日志文件中“更新前的值”写入数据库.如果日志记录中是插入操作,撤销时

就做删除操作;如果日志记录中是删除操作,撤销时就做插入操作;如果日志记录中是修改操作,撤销时就用修改前的值代替修改后的值.

继续反向查找该事务的其他更新操作,并执行相应的逆操作.

重复执行步骤(3),直至遇到该事务的开始记录.REDO(Ti)的具体步骤为:

(1)正向扫描日志文件,找到需要撤销的事务的更新操作.

(2)对事务Ti重新执行日志文件登记操作,即将日志文件中

“更新前的值”写入数据库.(3)继续正向查找该事务的其他更新操作,并重新执行,将日志文件中“更新前的值”写入数据库.

1

数据库系统的故障

1.1事务故障

事务故障是指由于事物内部的逻辑错误或系统错误所引起的使事物在未达到规定的终点以前就被迫中止的任何事件.其中逻辑错误是指运算溢出、数据输入出错、找不到记录等等;系统错误是指并发事物发生死锁而被选中撤销等等.1.2系统故障

系统故障是指有硬件故障、软件故障、停电等原因造成的使系统停止运转而必须重新启动的任何事件.如果发生了系统故障,那么计算机内存包括数据库缓冲区的信息就会丢失,而未完成的事物也被迫中止.其中软件故障是指例如操作系统故障或者是DBMS代码错误等等.1.3介质故障

介质故障是指用于存放数据库的磁盘在物理上受到了损坏,是的数据库中的数据无法读出二引发的事故.

在以上三种故障中,事务故障和系统故障都不会破坏外存中数据库的数据,二介质故障将破坏存放在外存的数据库中的部分或全部数据.因此,事务故障和系统故障可以由系统自动恢复,而介质故障必须借助于数据库管理员(DBA)的帮助和系统一起恢复.2基于日志文件的数据库恢复技术

2.1

日志文件

日志文件是记载每个事务对数据库的更新操作的文件.

日志文件由大量的日志记录组成.如有表示事务开始的事务开始记录、表示事务提交或中止的事务提交或中止记录,另外还有表示更新操作的更新日志记录等.如图1所示.浅谈数据库恢复技术

鲍晓娟

(赤峰学院

远程教育学院,内蒙古赤峰

024000)

摘要:数据库系统在运行的过程中可能会产生各种故障,使数据库处于不稳定的状态.所以DBMS 必须提供一种功能用以恢复数据库中的正确数据,使数据准确无误.这种功能就是数据库的恢复.数据库系统常见的故障有三种即事故故障、系统故障和介质故障.基于日志文件的数据库恢复技术用以恢复事务故障和系统故障.

关键词:数据库系统;故障;日志文件;数据库恢复技术中图分类号:TP311.32文献标识码:A 文章编号:1673-260X (2011)04-0045-03

Vol.27No.4

Apr.2011

第27卷第4期2011年4月赤峰学院学报(自然科学版)Journal of Chifeng University (Natural Science Edition )日志记录形式化表示

事务开始记录<TiBEGINTRANSATION>事务Ti开始执行

更新日志记录<Ti,Aj,V1,V2>事务Ti开始对数据对象Aj进行更新操作(对插入操作而言,此项为

空),更新前的值为V1更新后的值为V2(对删除操作而言,此项为空)事务提交记录<Ti,COMMIT>事务Ti执行提交操作事务中止记录

<Ti,ROLLBACK>

事务Ti中止执行

表1

日志文件

45--

时刻事务T1事务T2数据库中的值t1

t2

t3t4t5t6t7t8t9t10t11t12t13t14Read(A)

A:=A+10

Write(A)

Read(B)

B:=B+20

Write(B)

COMMIT

Read(A)

A:=A+20

Write(A)

Read(B)

B:=B+40

Write(B)

COMMIT

A=50

A=60

B=100

B=120

A=60

A=80

B=120

B=160表2事务T1和事务T2

日志记录

<T1BEGINTRANSATION>

<T1,A,50,60>

<T1,B,100,120>

<T1COMMIT>

<T2BEGINTRANSATION>

<T2,A,60,80>

<T2,B,120,160>

<T2COMMIT>

表3日志记录

(4)重复执行步骤(3),直至遇到该事务的提交记录.2.3事务故障和系统故障的恢复

事务故障是指某事物在运行过程中由于内部的逻辑错误或系统错误而在未完成其所有操作以前就被迫中止了,此时该事务中的部分操作己完成,部分操作未完成.但是事务中的所有操作是一个整体,要么全做,要么全部不做,否则就会使数据库处于不一致的状态,因此对发生事务故障的事务必须撤消.对某个事务(如Ti)的撤消操作只要利用前面介绍的UNDO(Ti)就可以了.

与事务故障相比,系统故障时受影响的可能不止一个事务,而是发生系统故障时正在运行的所有事务.在这些事务中,有的未完成事务内规定的操作,这些事务在日志文件中有<BEGINTRANSACTION>记录,而没有<COMMIT>记录,这些事务应撤消;而有的事务已完成了其中所有的操作,但事务对数据库的更新结果可能还留在缓冲区中,未写入物理数据库,这些事务在日志文件中既有<BEGINTRANSACTION>记录,也有<COMMIT>记录,这些事务应重做.

例如,对于表2中的事务T1和T2,如果t5时刻发生系统故障,那么事务T1在日志文件中的记录如表3所示,只有<T1BEGINTRANSACTION>记录,没有<T1COM-MIT>记录,所以事务T1必须重做;如果该事务在t11时刻

发生系统故障,日志文件中的记录如表5所示,那么事务T1必须重做,T2必须撤消.

系统故障的恢复比事务故瘴要夏杂一些,具体步骤如下:(1)正向扫描日志文件,找出系统故障发生前未完成的事务,将它们的事务标志记入撤消(UNDO)队列;找出系统故障发生前己完成的事务,将它们的事务标志记入重做(RE-DO)队列.

(2)对UNDO队列中的各事务实行撤消(UNDO)操作.

(3)对REDO队列中的各事务实行重做(REDO)操作.

3数据转储及介质故障的恢复

3.1数据转储

所谓数据转储就是由DBA定期地将物理数据库中的数据复制到另外的磁盘或磁带保存起来的过程.被保存的后备数据文本称为后备副本或后援副本.

数据转储分为静态转储和动态转储两种.所谓静态转储是指在系统中无任何运行事务时所进行的数据转储;而动态转储是指可以与并发事务同时进行的数据转储.

静态转储和动态转储各有利弊.静态转储的优点是简单,且得到的一定是一个正确的后备副本.因为转储开始时数据库处于一致性的状态,而静态转储期间没有任何事务在运行,故绝对不存在对数据库的更新操作,所以静态转储得到的一定是一个一致性的后备副本.但是,静态转储不能与事务同时进行,影响了系统的可用性.动态转储虽然可以与并发事务同时进行,但却不能保证得到一个正确的后备副本,这是因为在动态转储时数据库可以被并行运行的事务更新,转储到后备副本中的数据可能是过时的数据.例如,系统在转储期间的某时刻ti将数据X(X=200)转储到了另外的磁盘,可是却有事务在ti后的另一时刻tj将数据X改为600,这样转储结束数据X已是过时的数据了.因此,在进行动态转储时,必须将转储期间事务对数据库的更新操作登记在日志文件中,以备将来发生故障时用该日志文件和后备副本将数据库恢复到某一一致性状态.

3.2介质故障的恢复

与事务故障和系统故障相比,有时系统故障对数据库的破坏性可能最大,因为介质故障破坏的是磁盘上的部分(或全部)物理数据库,甚至会破坏日志文件,而且也会影响正在存取被破坏的物理数据的所有事务.利用数据转储后产日志记录

<T1BEGINTRANSATION>

<T1,A,50,60>

表4日志记录

日志记录

<T1BEGINTRANSATION>

<T1,A,50,60>

<T1,B,100,120>

<T1COMMIT>

<T2BEGINTRANSATION>

<T2,A,60,80>

表5日志记录

46--

相关文档
最新文档