数据库的备份和恢复
一个数据库系统总是避免不了故障的发生。在一些对数据可靠性要求很高的行业如银行、证券、电信等,如果发生意外停机或数据丢失,其损失将会十分惨重。为此需要安全的数据库系统,必须能在系统发生故障盾利用已有的数据备份,恢复数据库到原来的状态,并保持数据的完整性和一致性。数据库系统所采用的备份与恢复技术,对系统的安全性与可靠性起着重要作用,也对系统的运行效率有着重大影响。
(一)数据库故障及种类
数据库故障是指数据库运行过程中影响数据库正常使用的特殊事件。数据库故障有很多类型,最严重的是介质失败(如磁盘损坏),这种故障如不能恢复将导致数据库中数据的丢失。数据库故障类型如下:
1事务内部的故障
事务内部的故障有的是可以提供事务程序本身发现的,有的是非预期的,不能由事务程序处理的,如运算溢出、并发事务发生死锁而被选中撤销该事务、违反了某些完整性限制等。
事务故障意味着事务没有达到预期的终点,因此数据库可能处于不正确的状态。恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经做出的任何对数据库的修改,使得该事务好像根本没有启动一样,这类恢复操作称为撤销。
2.系统故障
系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。例如,特定类型的硬件错误(CPU故障)、操作系统故障、DBMS代码错误、突然停电等。这类故障影响正在运行的所有事务,但不破坏数据库。这时主存内容,尤其是数据库缓冲区中的内容都被丢失,所有运行事务都非正常终止。
一方面,发生故障时,一些尚未完成的事务的结果可能已送人物理数据库,从而造成数据库可能赴于不正确的状态。为保证数据一致性,需要清除这些事务对数据库的所有修改。另一方面,发生系统故障时,有些已经完成的事务可能有一部分甚至全部留在缓冲区中,尚未写回到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失,这也会使数据库处于不一致状态,因此应将这些事务已提交的结果重新写人数据库。所以系统重新启动后,恢复子系统除需要撤销所有未完成事务外,还需要重做( REDO)所有已提交的事
务,以将数据库真正恢复到一致状态。
3.介质故障
系统故障称为软故障,介质故障称为硬故障。硬故障指外存故障,如磁盘损坏、磁头碰撞、瞬时强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。这类故障比前两类故障发生的可能性小得多,但破坏性最大。
4.计算机病毒
计算机病毒是一种人为的故障或破坏,是一些恶意破坏者编制的一种计算机程序。这种程序与普通程序不同,它像病毒一样可以繁殖和传播,并造成对计算机系统包括数据库的危害。
由于计算机病毒的特点,它已成为计算机系统的主要威胁,自然也是数据库系统的主要威胁。数据库一旦被破坏仍然要用恢复技术把数据库加以恢复。
综上所述,各类故障对数据库的影响有两种,一是数据库本身被破坏;二是数据库没有破坏,但由于事务的运行被非正常终止造成数据的不正确。
无论何种故障,都需要进行数据恢复。由于故障的类型不同,通过装载备份来恢复数据库是常用的恢复手段。
(二)数据库备份
所谓备份就是把数据库复制到转储设备的过程。其中转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库副本成为原数据库的备份或转储。
常用的数据库备份的方法有如下三种:
1冷备份
冷备份是在没有终端用户访问数据库的情况下关闭数据库并将其备份,又称为“脱机备份”。这种方法在保持数据完整性方面显然最有保障,但是对于那些必须保持每天24小时、每周7天全天候运行的数据库服务器来说,较长时间地关闭数据库进行备份是不现实的。
2热备份
热备份是指当数据库正在运行时进行的备份,又称为“联机备份”。因为数据备份需要一段时
问,而且备份大容量的数据库还需要较长的时间,那么在此期间发生的数据更新就有可能使备份的数据不能保持完整性,这个问题的解决依赖于数据库日志文件。在备份时,日志文件将需要进行数据更新的指令记录下来,并不进行真正的物理更新,因此数据库能被完整地备份。备份结束后,系统再按照被日志文件记录下来的指令对数据库进行真正的物理更新。可见,被备份的数据保持了备份开始时刻前的数据一致性状态。
3.逻辑备份
逻辑备份是指使用软件技术从数据库中导出数据并写入一个输出文件,该文件的格式一般与原数据库的文件格式不同,而是原数据库中数据内容的一个映像。因此逻辑备份文件只能用来对数据库进行逻辑恢复,即数据导入,而不能按数据库原来的存储特征进行物理恢复。逻辑备份一般用于增量备份,即备份那些在上次备份以后改变的数据。
数据库故障恢复(三)数据库恢复
所谓恢复就是把数据库由存在故障的状态转变为无故障状态的过程,即在系统发生故障后,把数据库恢复到原来的某种一致性状态,其基本原理是利用“冗余”进行数据库恢复。问题的关键是如何建立“冗余”并利用“冗余”实施数据库恢复,即恢复策略。
数据库恢复技术一般有三种策略,即基于备份的恢复、基于运行时日志的恢复和基于镜像数据库的恢复。
1.基于备份的恢复
基于备份的恢复是指周期性地备份数据库。当数据库失效时,可取最近一次的数据库备份来恢复数据库,即把备份的数据拷贝到原数据库所在的位置上。用这种方法,数据库只能恢复到最近一次备份的状态,而从最近备份到故障发生期间的所有数据库更新将会丢失。备份的周期越长,丢失的更新数据越多。
2.基于运行时日志的恢复
运行时日志文件是用来记录对数据库每一次更新的文件。对日志的操作优先于对数据库的操作,以确保记录数据库的更改。当系统突然失效而导致事务中断时,可重新装人数据库的副本,把数据库恢复到上一次备份时的状态。然后系统自动正向扫描日志文件,将故障发生前所有提交的事务放到重做队列,将未提交的事务放到撤销队列执行,这样就可把数据库恢复到故障前菜一时刻的数据一致性状态。
3.基于镜像数据库的恢复
数据库镜像就是在另一个磁盘上复制数据库作为实时副本。当主数据库更新时,DBMS自动把更新后的数据复制到镜像数据,始终使镜像数据和主数据保持一致性。当主数据库出现故障时,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库恢复。镜像策略可以使数据库的可靠性大为提高,但由于数据镜像通过复制数据实现,频繁的复制会降低系统运行效率,因此一般在对效率要求满足的情况下可以使用。为兼顾可靠性和可用性,可有选择性地使用镜像关键数据。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。