事务
定义 :(相当于OS中的原语)一个数据库操作序列;一个不可分割的工作单位;恢复和并发控制的基本单位
语句
开始:begin transaction;
中间:SQL语句1,2,3
结束:提交 commit; 出现故障,回滚 rollback;
ACID特性
原子性
(Atomicity) 事务中包括的诸操作要么都做,要么都不做。事务是数据库的逻辑工作单位
一致性
(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
隔离性
(Isolation) 一个事务的执行不能被其他事务干扰。并发执行的各个事务之间不能互相干扰。
持续性
(Durability )即永久性。一个事务一旦提交,它对数据的改变就是永久性的。接下来的其他操作或故障不该对执行结果有任何影响。
故障分类
事务内部的故障
非预期的,是不能由应用程序处理的。
- 运算溢出
- 并发事务发生死锁而被选中撤销该事务
- 违反了某些完整性限制等
恢复:利用日志撤销事务
系统故障 (软故障)
指造成系统停止运转的任何事件,使得 系统要重新启动。比如:
- 特定类型的硬件错误(如CPU故障)
- 操作系统故障
- DBMS代码错误
- 系统断电
恢复策略:撤销未提交事务,重做已完成事务
介质故障 (硬故障)
外存故障,破坏性最大
恢复策略:载入副本、重做
计算机病毒
恶意的计算机程序,像病毒一样繁殖和传播
危害:破坏、盗窃系统中的数据;破坏系统文件
恢复策略:防火墙软件预防,杀毒软件查杀,失败则载入副本
恢复的实现技术
基本原理:冗余
利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据
常用技术:1数据转储
DBA将整个数据库复制到磁带或另一个磁盘上保存起来,备用的数据称为后备副本。
转储方法:1.静态转储与动态转储 2.海量转储与增量转储
常用技术:2登记日志文件
格式:1 以记录为单位的日志文件 2 以数据块为单位的日志文件
作用:
1 进行事务故障恢复 2 进行系统故障恢复 3 协助后备副本进行介质故障恢复
基本原则:
1登记的次序严格按并行事务执行的时间次序 2 必须先写日志文件,后写数据库
故障的恢复策略
事务故障:利用日志撤销事务
事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预
1. 反向扫描文件日志,查找该事务已执行的操作。
2. 对该事务已执行的操作执行逆操作。
3. 继续反向扫描日志文件,查找该事务的其他操作,并做同样处理。
4. 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。
系统故障:撤销所有未提交的事务,重做所有已提交的事务
系统故障的恢复由系统在重新启动时自动完成,不需要用户干预。
1. 正向扫描日志文件,制作重做队列和撤销队列
2. 对撤销队列事务进行撤销处理:反向扫描日志文件,对每个事务的操作执行逆操作
3. 对重做队列事务进行重做处理:正向扫描日志文件,对每个事务重新执行登记的操作
介质故障:1.重装数据库 2.重做已完成的事务
1. 装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态。
静态转储的数据库副本,装入后数据库即处于一致性状态。动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。
2. 装入有关的日志文件副本 ,重做已完成的事务。
扫描日志文件,找出故障发生时已提交的事务记入重做队列。
正向扫描日志文件,对重做队列中的所有事务进行重做处理。
检查点的恢复技术
检查点记录的内容:1. 建立检查点时刻所有正在执行的事务清单 2. 这些事务最近一个日志记录的地址
动态维护日志文件的方法 周期性地执行如下操作:建立检查点,保存数据库状态。
使用检查点方法可以改善恢复效率
步骤类似于系统故障的恢复步骤
数据库镜像
DBMS自动把整个数据库或其中的关键数据复制到另一个磁盘上
出现介质故障时 :可由镜像磁盘继续提供使用 同时DBMS自动利用镜像磁盘数据进行数据库的恢复 不需要关闭系统和重装数据库副本
没有出现故障时:可用于并发操作 一个用户对数据加排他锁修改数据,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁
频繁地复制数据自然会降低系统运行效率: 在实际应用中用户往往只选择对关键数据和日志文件镜像,而不是对整个数据库进行镜像