数据库系统概论(三)数据库恢复技术--事务、恢复、故障、检查点

事务

事务(transaction)是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位

事务和程序是两个概念,一个事务可以是一条/一组SQL语句,也可以是整个程序

事务是恢复和并发控制的基本单位、

BEGIN TRANSACTION

SQL 语句1

SQL 语句2

COMMIT/ROLLBACK

事务的ACID特性

原子性(Atomicity):事务中的操作要么全做要么全不做(由DBMS的事务管理子系统来实现)

一致性(Consistence):事务执行的结果必然是从一个一致性状态到另一个一致性状态(由DBMS的完整性子系统执行测试任务)

一致性状态:数据库中只包含事务成功提交的结果

不一致性状态:数据库中包含尚未提交被迫中断的事务,未完成的事务对数据的修改一部分写入数据库,导致数据库不正确

隔离性(Isolation):一个事务的执行不能被其他事务干扰,事务的内部操作和使用的数据对其他事务是隔离的(由DBMS的并发控制子系统实现)

持续性(Durability)/永久性(Permanence):一个事务一旦提交,对数据的修改就是永久性的(由DBMS的恢复管理子系统实现的)

数据库恢复

故障的种类

①事务内部的故障:事务在运行至正常终点前被终止

有的是可以由事务程序发现的,有些是非预期的事务终止

事务可以通过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.检查点技术+镜像技术

 

posted @ 2020-03-09 23:16  幽灵化石  阅读(2789)  评论(0编辑  收藏  举报