一 事务的概念
- 事务是数据库操作序列,这些操作要么全做,要么全不做,是不可分割的工作单位。一个事务可以是一个sql语句,一组sql语句,或者整个程序。一般来说,一个程序包含多个事务。
- 事务是恢复的基本单位,也是并发控制的基本单位。
二 定义事务的SQL语句
开始语句:BEGIN TRANSACTION;
结束语句:COMMIT; //表示提交事务的所有操作
或者ROLLBACK; //表示回滚,即事务运行中发生了某种故障,需要对已完成的操作进行撤销,回滚到事务开始的状态。
三 事务的4个特性(ACID):原子性,一致性,隔离性,持续性
- 原子性:一个事务要么全做,要么全不做
- 一致性:事务执行的结果必须一致。如果一个事务被迫中断,即事务中的一些操作做了,剩下的还没做,且做了的对数据库造成的修改已经存入物理数据库的话,就会造成数据库处于不一致的状态。因此事务要么全做,要么全不做,一致性和原子性是密切相关的
- 隔离性:一个事务的执行不能被其他事务干扰
- 持续性(也称为永久性):一个事务一旦提交,它对数据库中数据的改变应该是永久性的
四 数据库系统的故障种类:事务内部的故障,系统故障,介质故障,计算机病毒
(1)事务内部的故障
事务内部的故障有的是可以通过事务程序本身发现的,有的是非预期的、不能由事务程序处理的
事务故障的情况下,数据库可能处于不正确的状态。恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务造成的修改,这类恢复操作称为UNDO(事务撤销)
(2)系统故障(软故障)
系统故障是指造成系统停止运转的任何事件,使得系统要重新启动(例如硬件错误、操作系统故障、DBMS代码错误、系统断电等等)
系统故障的情况下,在系统重新启动后,恢复子系统除了需要撤销未完成的事务以外,还需要REDO(事务重做)所有已提交的事务
(3)介质故障(硬故障)
外存故障,如磁盘损坏、磁头碰撞、瞬时强磁场干扰等
(4)计算机病毒
五 数据库恢复技术:数据转储、登记日志文件
恢复机制涉及的两个关键问题:
- 1、如何建立冗余数据;
- 2、如何利用这些冗余数据实施数据库的恢复
恢复的基本原理:利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库
建立冗余数据的技术包括:
(1)数据转储
数据库管理员定期将整个数据库复制到磁带、磁盘或其他存储介质上保存起来,这些备用数据称为后备副本或后援副本。当数据库遭到破坏后可以将后备副本重新装入,但重装后备副本只能将数据库恢复到存储时的状态,要想恢复到故障发生时的状态,则必须重新运行自转储后的所有更新事务
数据转储分为:静态转储(在系统中无运行事务时进行)、动态转储(转储期间允许对数据库进行存取或修改)
数据转储也可分为:海量转储(每次转储全部数据库)、增量转储(每次只转储上一次转储后更新过的数据)
数据转储方法分为:动态海量转储、动态增量转储,静态海量转储、静态增量转储
(2)登记日志文件
日志文件是用来记录事务对数据库的更新操作的文件,有两种格式:以记录为单位、以数据块为单位
- 以记录为单位的日志文件
需要登记的内容:各个事务的开始(BEGIN TRANSACTION)标记、各个事务的结束(COMMIT/ROLLBACK)标记、各个事务的所有更新操作
日志记录的内容:事务标识(标明哪个是事务)、操作的类型(增删改)、操作对象(记录内部标识)、更新前数据的旧值((对插入而言,此项为空值)、更新后数据的新值(对删除而言,此项为空值)
- 以数据块为单位的日志文件
日志记录的内容:事务标识、被更新的数据块
日志文件的作用
(1)事务故障恢复和系统故障恢复必须用日志文件
(2)在动态转储方式中必须建立日志文件,后备副本和日志文件结合才能有效恢复数据库
(3)在静态转储方式中也可以建立日志文件,当数据库毁坏后可以重新装入后备副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理登记日志文件的两条原则:
- (1)登记的次序严格按并发事务执行的时间次序
- (2)必须先写日志文件,后写数据库
六 不同的数据库系统故障下的恢复策略
- 事务故障的恢复
由系统自动完成,对用户透明:利用日志文件撤销(UNDO)此事务已对数据库进行的修改
- 系统故障的恢复
由系统重新启动时自动完成,不需要用户干预:撤销((UNDO)故障发生时未完成的事务,重做〈REDO)已完成的事务
- 介质故障的恢复
最严重的一种故障:重装数据库,重做(REDO)已完成的事务
*为避免磁盘介质出现故障影响数据库,许多数据库管理系统提供了数据库镜像功能(复制数据实现)
七 具有检查点的恢复技术
这种技术在日志文件中增加了检查点记录:检查点之前的事务已经做完了,不需要重做,检查点期间和之后的事务需要重做,可以改善恢复效率