1.事务的概念
事务是用户定义的一个数据库操作序列,这些操作要么全不做,要么全做,是一个不可分割的基本单位。
事务操作的语句
- BEGIN TRANSATION:定义事务
- commit:事务的提交
- rollback:事务的回归
事务的ACID特性
- 原子性:事务是数据库的逻辑工作单位 事务的操作要么都做要么都不做
- 一致性 :事务执行的结果必然是从一个一致性状态到另一个一致性状态
- 隔离性:事务的执行不能被其他事务干扰 即一个事务内部的操作对于其他事务来说是隔离的
- 持久性:对数据库中数据的改变是永久的 即改变了就是改变了
总结:事务是恢复和并发操作的基本单位
事务的ACID特性被破坏的因素 :
- 多个事务并发操作,不同事务间交叉执行
- 事务在执行过程中被迫强行停止
2.故障的分类
- 事务内部的故障:
--例如事务:把一笔金额从一个账户甲转个账户乙 假设刚从账户甲中吧余额给减了,此时断电,无法继续将金额加到账户乙 导致的结果 账户甲余额减少了,账户乙余额没变 这样明显是不行的.
-- 事务内部的故障包括:运算溢出,并发事务发生死锁而被选中撤销事务,违反了某些完整性限制而被终止
--恢复的操作 : 事务的撤销 undo - 系统故障:
造成系统停止运转的任何事件,使得系统要重新启动
故障的类型: cpu故障,操作系统故障, 系统断电
故障恢复操作: 事务重做:redo - 介质故障:
故障类型: 软盘损坏 瞬间强磁场干扰等 - 电脑软件病毒
数据库破坏的两种状态
1.数据库本身被破坏
2. 数据库本身没有被破坏 但是其中的数据可能不正确
数据恢复的原理 :冗余
3.恢复的实现技术
- 数据转储:数据库管理员定期地将整个数据库复制到磁带,磁盘或其他存储介质中保存起来的过程
分类:
-- 1. 静态转储
----- 优点: 转储得到的一定是一个数据一致性的副本
----- 缺点:降低了数据库的可用性
-- 2. 动态转储
----- 优点: 转储期间允许对数据库进行存取和修改
----- 缺点:后援父辈不能保持正确有效,因此需要建立日志文件
转储方式
转储方式 | 动态转储 | 静态转储 |
---|---|---|
海量转储 | 动态海量转储 | 静态海量转储 |
增量转储 | 动态增量转储 | 静态增量转储 |
- 登记日志文件
1.日志文件的格式和内容 :是用来记录事务对数据库更新操作的文件
-- 登记日志的格式 ......a. 各个事务的开始 .......b.各个事务的结束 .......c.各个事物的所有更新操作
日志记录的内容
---- 事务的标识
---- 操作的类型
---- 操作对象
---- 更新前数据的旧值
---- 更新后数据的新值
日志记录的作用
---- 事务故障恢复和系统故障恢复必须用日志文件
---- 在动态转储方式中建立日志文件,后备副本和日志文件结合起来才能有效的修复数据库
登记日志文件
---- 登记的次序严格按照事务执行的时间次序
---- 必须先写日志文件 再写数据库
4.恢复策略
-
事务故障的恢复
– 反向扫描日志文件,查找该事物的更新操作
– 对该事务的更新操作执行逆操作,即 将更新前的数据写进数据库
– 继续反向扫描日志文件,查找该事物的其他更新操作 -
系统故障的恢复
系统故障的两个主要原因就是- 未完成事务对数据库的更新可能写入数据库(事务内部有提交的事件)
- 已经提交的事务对数据库的更新可能还留在缓冲区没来得及写入数据库
因此恢复操作就是 撤销故障发生时未完成的任务 重做已完成的任务
– 正向扫描日志文件 找出故障发生时已提交的事务,将事务标识记入重做对列(redo-list)
同时找出故障发生时尚未完成的事务 ,将事务假如撤销对列(undo-list)
– 对撤销的事务进行撤销操作 反向扫描日志文件 对每个撤销事务的更新操作执行逆操作,将更新前的值的写入数据库
– 对重做的事务进行重做操作 正向扫描日志文件 将每个重做事务重新执行日志文件登记的操作 即将日志记录中更新后的值写入数据库
-
介质故障的恢复
重装数据库 重新执行已完成的事务
-