开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情
数据库中的数据无法保证绝对不遭受破坏,因此系统必须具有检测故障并把数据从错误状态恢复到某一正确状态的功能,这就是数据库的恢复
数据故障类型
- 事务内部的故障
- 事务故障意味事务没有达到预期的终点(COMMIT或 ROLLBACK),因此,数据库可能处于不正确的状态。
- 系统故障
- 介质故障
- 计算机病毒
事务故障
事务故障又可分为两种:
- 可以预期的事务故障
- 即在程序中可以预先估计到的错误
- 可以在事务的代码中加入判断和ROLLBACK语句。(例)
- 当事务执行到ROLLBACK语句时,由系统对事务进行回退操作,即执行UNDO(撤消)操作。
- 非预期的事务故障
- 即在程序中发生未估计到的错误
- 事务没有达到预期的终点(提交或回滚),数据库可能处于不正确状态。
- 此时由系统直接对该事务执行UNDO处理
例如:银行转帐事务,把一笔金额从帐户A转移到帐户B,如果 帐户A的存款不够转帐的金额,该事务就必须撤消。
BEGIN TRANSACTION
UPDATE 支付表 SET 帐户总额 = 帐户总额-n
WHERE 帐户名 = ‘A’
IF (SELECT 账户总额 FROM 支付表
WHERE 账户名=‘A’)< n
BEGIN
PRINT ‘余额不足’
ROLLBACK
END
ELSE ……
数据库故障类型
- 事务内部的故障
- 系统故障
- 指造成系统停止运转、系统要重启的故障。例如,特定硬件错误(CPU故障)、操作系统故障、突然停电等。
- 影响所有正在运行的事务,但不破坏数据库。
- 介质故障
- 将破坏数据库,并影响正在存取这部分数据的所有事务。
- 计算机病毒
- 破坏性很大,极易传播。
数据库恢复基本原理和技术
- 基本原理就是“冗余”,即数据库重复存储。
- 恢复机制涉及到两个关键问题:
- 如何建立冗余数据
- 如何利用这些冗余数据实施数据库恢复
- 建立冗余数据最常用的技术是:
- 数据转储:DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。
- 登录日志文件:日志文件是用来记录事务对数据库的更新操作的文件。
- 数据转储是数据库恢复中采用的基本技术。
- 通常在一个数据库系统中,两种方法是一起使用的。
转储方法
数据转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。
1. 静态转储与动态转储
静态转储
- 在系统中无运行事务时进行转储
- 转储期间不允许对数据库的任何存取、修改活动
- 优点:
- 实现简单
- 转储副本能保证数据正确性
- 缺点:降低了数据库的可用性
- 转储必须等用户事务结束
- 新的事务必须等转储结束
动态转储
- 转储操作与用户事务并发进行
- 转储期间允许对数据库进行存取或修改
- 优点
- 不用等待正在运行的用户事务结束
- 新事务不用等待转储结束
- 缺点
- 不能保证副本中的数据正确有效
- 后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态
- 海量转储与增量转储
- 海量转储: 每次转储全部数据库
- 增量转储: 只转储上次转储后更新过的数据
- 海量转储与增量转储比较
- 从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便
- 但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效
转储策略
应定期进行数据转储,制作后备副本。但转储又是十分耗费时间和资源的,不能频繁进行。 DBA应该根据数据库使用情况确定适当的转储周期和转储方法。 例:
- 每天晚上进行动态增量转储
- 每周进行一次动态海量转储
- 每月进行一次静态海量转储