数据库恢复技术
1.事务
所谓事务是用户定义的一个数据库操作序列,这些操作要全做,要不全都不做,是一个不可分割的工作单位。
事务通常以BEGIN TRANSACTION开始,以commit或者是rollback结束,
commit
表示提交,具体来说就是将所有对数据库的更新写会磁盘里。
rollback
指的是回滚操作,即在运行事务的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作进行撤销,回滚到最开始的状态。
2.事务的ACID特性
(1)原子性
事务是数据库逻辑工作单位,事务中包括诸多操作,要么全都做,要么全都不做。
(2)一致性
事务执行的结果务必是从一个一致的状态变到另外一个一致的状态。
(3)隔离性
一个事务的执行不能被其他事务干扰。(并发执行的各个事务之间不能相互干扰)
(4)持久性
持久性也成为永久性,指一个事务一旦提交,它对数据库的改变就应该是永久性的。
故障种类以及相应的恢复手段
1.事务内部故障
事务故障意味着事务没有达到预期的终点(COMMIT或者显式的ROLLBACK),因此,数据库可能会处于一个不正确的状态中。
恢复程序要在不影响其他事务运行的情况下,强行进行回滚该事务,即撤销该事务已经做出的任何对数据库的修改,使得该事务好像没有被启动过一样。这类的恢复叫做事务撤销。
2.系统故障
系统故障是指造成系统停止运作的任何事件,使得系统重新启动。
例如,硬件故障(CPU故障),操作系统故障,DBMS代码错误,系统断电等。
此时,一些尚未完成的事务可能已经被送入了物理数据库(对数据库进行了修改),或者是一些已经完成的事务(在日志上显示已经完成)没有对数据库进行修改。
恢复子系统必须在系统重新启动的时候让所有非正常终止的事务进行回滚,强行撤销所有未完成的事务。并且,将所有已经完成(提交)的事务进行重做。
3.介质故障
系统故障称作软故障,介质故障称作硬故障。这类故障会影响整个数据库或影响部分数据库,并影响正在存取这部分数据的所有事务。
计算机病毒
恢复原理:冗余
恢复的实现技术
建立冗余数据最常见的技术是数据转储和登记日志文件。
数据转储
所谓数据转储即数据库管理员定期地将整个数据库复制到磁带、硬盘或其他介质上保存的过程。这些备用数据称作后备副本或者后援副本。
数据库遭到破坏之后,可以将后备副本进行装入,但装入的副本只能将数据恢复到转储时的状态,想要恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务。
静态转储
静态转储是在系统运行的时候进行的转储操作。
在转储期间,不允许(或不存在)对数据库进行任何存取、修改活动。
动态转储
动态转储是指转储期间允许对数据库进行存取或修改。(转储和用户事务可以并发执行)。但是,转储结束后援副本上的数据不能保证每一次都有效。
为此,必须把转储期间各个事务对数据库进行的修改都登记下来,建立日志文件。
这样,后援副本加上日志就能把数据库恢复到某一时刻的正确状态。
数据转储方式有两种:海量转储或者是增量转储。
登记日志操作
日志文件是用来记录事务对数据的更新操作的文件。
日志文件需要记录的事包括:
- 各个事务的开始操作
- 各个事务的结束操作
- 各个事务的所有更新操作
每个日志记录的内容包括:
日志文件的作用
恢复策略
事务故障恢复
事务故障恢复是由系统自己完成的,对用户是透明的。系统恢复步骤:
(1) 反向扫描日志文件
(2) 对更新操作进行操作
系统故障的恢复
恢复操作试撤销故障发生时未完成的事务,重做已经完成的事务。(系统故障恢复是由系统自动完成的,不需要用户干预)
系统恢复步骤:
(1) 正向扫描日志文件,找出在故障前已经提交的事务
(2) 对撤销队列中的事务进行撤销处理
(3) 对重做队列中的事务进行重做处理
介质故障的恢复
恢复方法,重装数据库,然后重做已完成的事务。
(1) 装载最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态
对于动态转储的数据库副本还需要装入转储开始时刻的日志文件和副本。
(2) 装入相应的日志文件副本,重做已完成的事务。即首先扫描日志文件,找出故障时以提交的事务标记,将其计入重做标志。然后正向扫描日志文件,对重做队列进行重做处理。
(即将日志记录中“更新后的值”写入数据库中)
具有检查点的恢复技术
利用日志技术进行数据库恢复时,恢复子系统进行搜索日志,确定哪些事务需要重做,哪些事务需要撤销。一般来说,需要检查所有日志记录。
所以,发展出了一种新的记录----检查点记录,增加一个重新开始文件,并让恢复子系统在登录日志文件期间动态维护日志。
检查点记录包括:
1.建立检查点时刻所有正在执行的事务清单。
2.这些事务最近一个日志记录的地址。
动态维护日志文件的方法是,周期性地执行建立检查点、保存数据库状态的操作。 具体步骤是:
(1)将当前日志缓冲区中的所有日志记录写入磁盘的日志文件
(2)在日志文件中写入一个检查点记录
(3)将当前数据缓冲区的所有记录记录写入磁盘的数据库中
(4)把检查点记录在日志文件中的地址写入一个重新开始文件
数据库镜像
出现了介质故障:
可由镜像磁盘继续提供使用,同时数据库管理系统自动利用镜像磁盘数据进行数据库恢复,不需要关闭系统和重装数据库副本。
在没有出现故障时:
镜像可以用于并发操作,即当一个用户对数据加排他锁修改数据时,其他用户可以读镜像数据库上的数据,而不必等待用户释放锁。