事务(transaction)是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位
事务和程序是两个概念,一个事务可以是一条/一组SQL语句,也可以是整个程序
事务是恢复和并发控制的基本单位、
BEGIN TRANSACTION
SQL 语句1
SQL 语句2
COMMIT/ROLLBACK
原子性(Atomicity):事务中的操作要么全做要么全不做
一致性(Consistence):事务执行的结果必然是从一个一致性状态到另一个一致性状态
一致性状态:数据库中只包含事务成功提交的结果
不一致性状态:数据库中包含尚未提交被迫中断的事务,未完成的事务对数据的修改一部分写入数据库,导致数据库不正确
隔离性(Isolation):一个事务的执行不能被其他事务干扰,事务的内部操作和使用的数据对其他事务是隔离的
持续性(Durability)/永久性(Permanence):一个事务一旦提交,对数据的修改就是永久性的
①事务内部的故障:事务在运行至正常终点前被终止
有的是可以由事务程序发现的,有些是非预期的事务终止
事务可以通过rollback修复预期之中故障
更多的故障是非预期的,如运算溢出、死锁
②系统故障(软故障):CPU错误、系统断电等造成的系统运转停止
系统故障不破坏数据库,只会造成事务的非正常终止,内存中数据库缓冲区丢失
系统故障的恢复需要:
撤销(undo)所有未完成的事务(事务非正常终止)
重做(redo)所有已提交的事务(有些已完成的事务可能有部分留在缓冲区尚未写入数据库)
③介质故障(硬故障):磁盘损坏、强磁场干扰造成的介质故障
④计算机病毒
恢复技术包括两个部分:建立冗余数据+ 利用冗余数据进行恢复
1.数据转储:转储是将数据库定期复制到磁盘或其他存储介质上,备用数据称为后备副本(backup)
①静态转储:转储时不能有事务运行,数据库必须处于一致性状态即事务已经全部提交,没有正在运行的事务
②动态转储:转储与事务同时进行,不能保证副本中数据库的一致性
需要把动态存储期间各事务的修改活动记录为日志,后备文件+日志即可恢复
③海量存储:每次转储数据库全部信息
④增量存储:每次转储上次转储后的更新数据
2.日志文件:以记录/数据块为单位的日志文件,用于事务/系统故障的恢复
动态转储一定要有日志,静态转储也可以有日志
以记录为单位
T1 BEGIN TRANSACNTION
T1 U(update) AA 18(→)20
T1 I(insert) BB 12
TI COMMIT/ROLLBACK
必须先写日志文件,后写数据库 因为有可能在写日志和修改数据之间出现故障,先写数据库修改可能导致日志没有记下这次修改,而先写日志只不过是多执行一次不必要的undo操作
3.恢复策略
①事务故障恢复:事务在运行至正常终点前被终止
(1)反向扫描日志,查找事务更新操作
(2)对更新操作进行逆操作,插入→删除,删除→插入,修改前的值→修改后
(3)循环至事务开始
②系统故障的恢复:系统终止造成数据库不一致状态
(1)正向扫描日志,有BEGIN TRANSANCTION和COMMIT的加入REDO队列
只有BEGIN TRANSANCTION没有COMMIT的加入UNDO队列
(2)对UNDO队列做UNDO(写入修改前的值),REDO队列做REDO(写入修改后的值)
③介质故障的恢复:(1)装入最新的数据库后备副本,对于静态副本,装入即一致性状态,对于动态副本做同上的REDO+UNDO
(2)装入转储后的日志副本,REDO
小结:
事务故障恢复:UNDO
系统故障恢复:REDO+UNDO
介质故障恢复:装入后备副本+REDO
4.检查点技术+镜像技术
数据库系统概论(三)数据库恢复技术--事务、恢复、故障、检查点
原文:https://www.cnblogs.com/yasheng/p/12452473.html