1.前言
数据库恢复技术是一种事务处理技术,谈到事务,这里可以先介绍一下事务的概念。
事务是指用户定义的一个不可分割的操作序列,什么意思,就是这些操作要么全做,要么全不做,其可以是一条、一组SQL语句甚至整个程序。其定义语句如下:
BEGIN TRANSACTION//开始标志 COMMIT|ROLLBACK//结束标志(分别代表正常结束|撤销)
事务有四个特性,我们称为ACID,即原子性、一致性、隔离性、持续性。
原子性指事务要么做要么不做
一致性是指事务处于要么做了要么没做的状态
隔离性保证事务并发执行不受其他事务的干扰
持续性也称永久性,即他对数据库数据的改变是永久的。
介绍完事务,再来接着了解数据库恢复技术,数据库恢复技术具有能够把数据库从错误状态恢复到某一已知正确状态的功能,这些错误由故障产生,常见故障分类有:
事务故障:指事务未正常终止时被终止。影响事务。
系统故障:软故障,指造成系统停止运转的任何事件。影响事务。
介质故障:硬故障,破坏数据库并影响正在运行的事务。
计算机病毒;破坏数据库。
可见这么故障要么破坏数据库本身,要么影响事务造成数据错误,这些错误,需要用到数据库恢复技术来恢复。
2.数据库恢复技术
数据库恢复技术原理即冗余,即建立冗余数据,再利用冗余对数据库进行恢复。下面是建立冗余数据的两个方法。
数据转储:
所谓转储即DBA(数据库管理员)定期将各个数据库复制保存的过程,这些备用数据称为后备副本。下面是两种其分类
1.
静态转储:无运行事务时转储,转储期间不能对数据库存取修改,其符合一致性。但会降低数据库可用性。
动态存储:转储期间可以允许对数据库的存取和修改,但可能某一刻A未变,转储A后A已经修改了,造成A过时,所以困难会存在不一致状态。
2.
海量转储:每次转储整个数据库,恢复方便,但低效。
增量存储:只转储上一次转储更新后的数据库,恢复复杂但高效
登陆日志文件:
其是用来记录事务对数据库更新操作的文件,以记录为单位或以数据块为单位。总之,明白其按时间次序严格记录了事务更新前后的数据和操作即可。
值得注意,登记日志文件是有两条重要原则:
一是次序严格按并发事务执行的次序;二是先写日志文件,后写数据库(避免无法修复更改)
3.数据库恢复策略
利用建立的冗余对数据库进行恢复是,针对不同的故障有不同的策略。
1.事务故障的恢复,
由于事务故障本身不能运行到终点,则把他恢复到事务执行前即可。
策略:反向扫描日志文件,对事务更新操作进行逆操作,直至读到事务开始标志,即UNDO撤销。
2.系统故障的恢复
系统故障造成数据库不一致的原因有两个,一是未完成事务对数据更新已经写入数据库,二是已经提交事务还没有来得及写入数据库。因此,只要撤销未完成事务,重做已完成事务即可。
策略:正向扫描日志文件,将未完成事务标记如UNDO队列,将已完成事务标记入REDO队列,再分别在REDO中执行正向扫描重做处理,UNDO中执行逆向扫描日志文件进行撤销处理即可。
3.介质故障的恢复
介质故障对数据库和事务均有影响,因此需要重装数据库,然后重做已完成事务。
策略:装入离故障最近的后备副本,使用恢复进一次转储的一致性状态(动态存储还要装入转储开始时刻的日志状态副本,利用对系统恢复的方法才能解决),装入转储结束时刻的日志状态副本,再重装已完成事务即可。
以上三种故障,第三种需要DBA的介入。