【概述】
尽管数据库系统中采取了各种保护措施来防止数据库的安全性和完整性被破坏,保证并发事务的正确执行,但是计算机系统中软硬件的错误、操作员的失误、恶意的破坏,这些故障轻则导致运行事务非正常中断,影响数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失
因此 DBMS 必须具有将数据库从错误状态恢复到某一已知的正确状态的功能,即数据库的恢复
【事务的基本概念】
事务
在讨论数据库恢复技术之前,要先清楚事务的基本概念与性质
事务,是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
事务和程序是两个概念,一般地讲,一个程序中包含多个事务,事务的开始和结束可以由用户显式控制,如果用户没有显式定义事务,则由 DBMS 按默认规定自动划分事务
SQL 划分事务
在 SQL 中,用户可以使用 BEGIN TRANSACTION
、COMMIT
、ROLLBACK
这三条语句来显式的划分事务
事务通常是以 BEGIN TRANSACTION
开始,以 COMMIT
或 ROLLBACK
结束
COMMIT
表示提交,即提交事务的所有操作,具体来说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库上,事务正常结束
ROLLBACK
表示回滚,即在事务运行过程中发生了某些故障,事务不能继续运行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态
ACID 特性
事务具有 4 个特性,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability),这 4 个特性合称 ACID 特性
1.原子性
事务是数据库的逻辑单位,事务中的诸操作要么都做,要么都不做
2.一致性
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态
所谓一致性状态,是指当数据库只包含成功事务提交的结果时的状态
如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所做的修改有一部分写入物理数据库,此时数据库就处于一种不正确的状态
3.隔离性
一个事务的执行不能被其他事务干扰,即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务间不能相互干扰
4.持续性
持续性也称永久性,是指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来的其他操作或故障不应对其执行结果有任何影响
ACID 特性的保证
保证事务 ACID 特性是事务管理的重要任务,ACID 特性可能遭到破坏的因素有:
- 多个事务并行运行时,不同事务的操作交叉执行
- 事务在运行过程中被强行停止
在第一种情况下,DBMS 必须保证多个事务的交叉运行不影响这些事务的原子性;在第二种情况下,DBMS 必须保证被强行终止的事务对数据库和其他事务没有任何影响
【故障的种类】
数据库系统中可能发生各种各样的故障,大致可分为事务内部故障、系统故障、介质故障、计算机病毒这 4 类
各类故障,对数据库的影响有两种可能性,一是数据库本身被破坏,二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的
关于故障种类的详细介绍:点击这里
【恢复技术】
冗余数据建立
当数据库出现故障时,需要进行数据库恢复,恢复的原理十分简单,即数据库中任何一部分被破坏或不正确的数据可以利用冗余数据进行重建
恢复机制尽管原理简单,但实施起来较为复杂,其涉及的两个关键问题是如何建立冗余数据、如何利用冗余数据实施数据库恢复
目前,建立冗余数据最常用的技术是数据转储、登记日志文件
关于建立冗余数据的技术的详细介绍:点击这里
故障恢复策略
当系统运行过程中发生了故障,即可利用数据转储产生的数据库后备副本和日志文件,将数据库恢复到故障前的某一一致性状态,对于事务故障、系统故障、介质故障这三类故障,不同的故障恢复的策略也不同
关于故障恢复策略的详细介绍:点击这里
日志检查点
在进行数据库恢复时,当利用日志技术,恢复子系统必须搜索日志,以确定哪些事务需要重做,哪些事务需要撤销
一般来说,需要检查所有的日志记录,这样做存在两个问题:
- 搜索整个日志耗费大量时间
- 许多重做处理事务实际上已经将他们的更新操作结果写入数据库
为解决这两个问题,发展出了具有检查点的恢复技术,这种技术在日志文件中增加了一类新的记录,即检查点记录,同时增加了重新开始文件,并让恢复子系统在登录日志文件期间动态维护日志
关于日志检查点技术的详细介绍:点击这里
数据库镜像
介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性,而且由于介质故障恢复比较费时,为预防介质故障,数据库管理员必须周期性地转储数据库,加重了数据库管理员的负担
如果不及时且正确的转储数据库,一旦发生介质错误,会造成极大的损失,随着技术的发展,磁盘容量越来越大,价格也越来越便宜,为提高数据库可用性,许多 DBMS 提供了数据库镜像的功能,用于数据库恢复
关于数据库镜像的详细介绍:点击这里