数据库常见故障类型
数据库系统运行过程中可能发生的故障主要分为以下三类,其破坏性由小到大:
故障类型 | 别名 | 根本原因 | 影响范围 | 典型例子 |
---|---|---|---|---|
1. 事务故障 | 逻辑故障 | 事务内部的程序逻辑错误或输入异常。 | 单个或少量事务。 | - 输入数据不合法(如除零错误)。 |
2. 系统故障 | 软故障(Soft Crash) | 硬件(如突然断电)、操作系统或DBMS软件错误,导致系统停止运行。 | 所有正在运行的事务,内存数据丢失,但磁盘数据完好。 | - 操作系统崩溃。 |
3. 介质故障 | 硬故障(Hard Crash) | 存储数据库的物理设备发生损坏。 | 破坏磁盘上的数据,影响范围最大。 | - 磁盘控制器(Disk Controller)故障。 |
各类故障的恢复策略
各类故障的恢复策略
针对不同的故障类型,数据库系统采用了相应的恢复机制:
1. 事务故障的恢复
-
恢复方式: 撤销(UNDO)
-
实现机制: 系统反向扫描日志文件,找到该事务的所有更新操作,并对这些操作执行逆操作,将数据库恢复到该事务执行之前的状态,就像这个事务从未发生过一样。
-
目标: 消除失败事务对数据库的所有影响。
2. 系统故障的恢复
系统重启后,恢复子系统需要处理两种不确定状态的事务:
-
未完成的事务: 事务未提交,但其部分修改可能已写入磁盘。
-
已提交但未落盘的事务: 事务已提交,但其数据修改可能还在内存缓冲区,未来得及写入磁盘。
-
恢复方式: 撤销(UNDO) + 重做(REDO)
-
实现机制:
- 1.
撤销(UNDO): 撤销所有未完成事务的操作,确保原子性。
- 2.
重做(REDO): 重做所有已提交但未落盘事务的操作,确保持久性。
- 1.
-
关键技术: 通过检查点(Checkpoint) 技术来确定哪些事务需要UNDO,哪些需要REDO,这正是我们上一个对话讨论的核心内容。
3. 介质故障的恢复
-
恢复方式: 重装备份 + 重做日志
-
实现机制:
- 1.
装入最新的数据库备份(冷备或热备),将数据库恢复到备份时的状态。
- 2.
装入备份点之后的所有日志文件副本。
- 3.
重做(REDO)备份之后所有已提交事务的操作,将数据库恢复到故障发生前的状态。
- 1.
-
特点: 恢复速度最慢,对可用性影响最大。因此,制定定期备份策略和日志归档策略至关重要。