目录
事务的基本概念
1.事务
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
事务的显式表示:
begin transaction; //表示事务开始
commit; //表示事务正确提交
rollback; //表示事务执行时发生了故障,系统执行回滚,回滚到事务开时的状态
隐式没有表示,系统按照一些缺省规则执行
2.事务的ACID特性
分别是原子性,一致性,隔离性,持续性
一致性:事务都是从一个一致性状态到另外一个一致性状态
隔离性:一个事务的执行不能被其他事务干扰
持续性:一个事务一旦提交,对数据库中数据的改变是永久性的
故障的种类
故障分为事务内部的故障,系统故障,介质故障,计算机病毒等
- 事务内部的故障:事务相关的程序造成的故障,比如一些可能的情况考虑不周全然后出错,总之没有到达预期的终点,可以用事务撤销(UNDO)来进行恢复
- 系统故障:造成系统停止运转的任何事件,系统要重新启动,这种故障影响正在运行的所有事务,恢复时,需要在系统重新启动时让所有非正常终止事务回滚,强行撤销所有未完成的事务,重做(REDO)所有已提交的事务。回滚+撤销+重做
- 介质故障:又称硬故障,指外存的故障,破环性非常大
- 计算机病毒:人为的故障
恢复的基本原理:冗余。数据库中任何一部分被破坏或不正确的数据可以根据存储在系统别处的冗余数据来重建
恢复的实现技术
恢复机制需要讨论如何建立冗余数据,如何利用冗余数据来实现数据库恢复
建立冗余数据:数据转储+登记日志文件
数据转储
就是将整个数据库复制到其他地方存个备份,称为后备副本
数据转储分为静态转储和动态转储
静态转储:在系统中没有其他事务运行时转储。绝对符合一致性。但可能降低数据库可用性,转储时别的事务就不能运行了
动态转储:在系统中有其他事务运行时也能转储。不保证一致性。所以要建立一个日志文件,记录转储期间各种修改操作,后备副本和日志文件一起就可恢复成功
还可分为海量转储和增量转储。
海量转储:每次转储全部数据库
增量转储:每次只转储更新的数据
动态转储 | 静态转储 | |
海量转储 | 动态海量转储 | 静态海量转储 |
增量转储 | 动态增量转储 | 静态增量转储 |
登记日志文件
日志文件的两种格式:以记录为单位和以数据块为单位
日志文件的作用:可以进行事务故障的恢复和系统故障恢复,协助后备副本进行介质故障恢复。(静态转储也可以建立日志文件,从而达到更好的恢复效果)
登记日志文件的原则:1.登记次序和并发事务执行的时间次序一致
2.必须先写日志文件,后写数据库。因为在写入数据库和登记日志文件之间可能发生故障,此时如果先写数据库,那么这个写操作就丢失了,先登记的话,多执行一次UNDO操作就可以。
恢复策略
- 事务故障的恢复:对用户透明,由系统自动完成,大致步骤是反向扫描日志文件,根据日志文件中的操作执行逆操作,直至读到事务开始标记
- 系统故障的恢复:对用户透明,由系统自动完成。恢复操作就是撤销故障时未完成的事务,重做已完成的事务
- 介质故障的恢复:重装数据库,重做已完成的事务
具有检查点的恢复技术(常用于系统故障)
不用检查点在数据恢复时有两个问题:需要检查所有日志文件,搜索整个日志需要耗费大量时间,大量的事务重做,也耗费了很多时间
使用检查点可以改善系统故障的恢复效率
数据库镜像(常用于介质故障)
检查点方法可用来恢复系统故障,数据库镜像可用来恢复介质故障
原理也不按钮,就相当于把数据库克隆到另外一个磁盘上,然后对主数据库进行一些数据库操作,镜像数据库也自动进行这些操作。镜像可以在主机宕机时代替主数据库的功能,也能根据镜像恢复主数据库。