数据库恢复技术
事务的基本概念
-
为了解决运行因故障而终止(在操作之间发生故障导致数据库不正确)和并发(同时交替进行书记处更改导致原来的数据被覆盖等导致数据库不正确)的问题
-
事务的定义
- 一个数据库操作序列(由多个操作组成的有序序列)
- 事务是一个不可分割的工作单位(一个事务包含多个操作组成的有序序列 这些有序序列是一个整体 不可分割 必须全部执行或者全部不执行 不可部分执行)
- 恢复和并发控制的基本单位
- 分类:只包含一条SQL语句的事务称为单语句事务 包含多条SQL语句的事务称为多语句事务
事务和程序的比较
-
一个程序通常包含多个事务
-
在关系数据库中,一个事务可以是一条或多条 SQL 语句,也可以是一个或多个程序
-
定义事务的SQL语句
-
显式定义方式
begin transition 1... 2... commit --全部操作完成 begin transition 1... 2... rollback --全部操作都取消掉
-
隐式定义方式
当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务(自动认为一条 DDL 或者一条 DML 就是一个事务)
EG1 在查询分析器中执行下列语句,BDMS将理解为____个事务
select * from student update student set sdept='IS’ where sno='201215121' update student set sdept='CS’ where sno='201215125'
3
EG2 在查询分析器中执行下列语句,BDMS将理解为____个事务
select * from student begin transaction update student set sdept='IS’ where sno=‘202015121' update student set sdept='CS’ where sno=‘202015125' commit
2
EG3 在查询分析器中执行下列语句,BDMS将理解为____个事务 运行之后对数据产生什么样地影响
select * from student begin transaction update student set sdept='IS' where sno='201215121' update student set sdept='CS' where sno='201215125' rollback
2 对数据没有产生任何影响
第一个事务是查询 对数据没有产生影响
第二个事务是rollback 全部操作都取消掉。对数据从也没产生影响
-
-
事务的ACID特性
-
原子性 事务不可再分
-
一致性 即正确性 事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态
-
隔离性 对并发执行而言一个事务的执行不能被其他事务干扰 一个事务内部的操作及使用的数据对其他并发事务是隔离的 并发执行的各个事务之间不能相互干扰
-
持续性 永久性 事务一旦提交 他对数据库中数据的改变就应该是永久性的 接下来的其他操作或故障不应该对其执行结果有任何的影响
EG4 银行转帐:帐号A上有1000元,帐号B上有2000元。从帐号A向帐号B 转500元
这个 事务包含两个操作 如果这些操作全都做的话 数据库进入一致性状态
如果全部做 数据库也进入一致性状态
但是如果只做一个操作的话,数据库就进入不一致性状态
结论 只要事务的原子性不遭到破坏 就能保证事务的一致性 一致性是原子性的结果
-
数据库恢复概述
- DBMS对故障的对策
- DBMS提供恢复子系统
- 保证故障发生后,能把数据库从错误状态恢复到某一已知的正确状态 就是数据库的恢复
- 保证事务的ACID特性
- 数据库恢复技术是衡量系统优劣的重要指标数据库恢复机制是数据库管理系统的重要组成部分
恢复实现技术
-
恢复操作的基本原理:冗余,用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据。(比如把U盘的没被破坏数据下回到数据被破坏的电脑上)
-
如何建立冗余数据
-
数据转储
-
DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本
-
如何使用
- 数据库遭到破坏后可以将后备副本重新装入
- 重装后备副本只能将数据库恢复到转储时的状态
-
转储方法分类
-
转存状态分类
-
静态转储
系统中没有运行事务的时进行转储
-
转储开始时数据库处于一致性状态
-
转储期间不允许对数据库的任何存取、修改活动
-
优点:实现简单
缺点:降低了数据库的可用性
转储必须等事务结束才能开始,转储过程中不能有新的事务
能将事务恢复到Tb时刻
-
-
动态转储
-
**动态转储操作与用户事务并发进行。**转储期间允许对数据库进行存取或修改。
-
优点:效率高
缺点:不能保证一致性
-
-
-
转存方式分类
-
海量转储:每次转储全部数据库
-
增量转储:只转储上次转储后更新过的数据
-
-
-
-
登录日志文件
-
日志文件的格式和内容
-
日志文件是用来记录事务对数据库的更新操作的文件
-
日志文件的格式 是以记录为单位的日志文件或以数据块为单位的日志文件
-
日志文件的内容:
- 各个事务的开始标记 begin transaction
- 各个事务的结束标记 commit
- 各个事务的所有更新操作
以上均为日志文件中的一个日志记录
注意区分修改语句和查询语句
EG5 分析下面的事务会产生多少条日志记录?
Begin transaction select * from student where sno='201915121' Update student Set sdept='IS' Where sno='201915121' select * from student where sno='201915125' Update student Set sdept='CS' Where sno='201915125' COMMIT
4
-
基于记录的日志文件
- 每条日志记录的内容
- 事务标识 标明是哪个事务
- 操作类型 插入删除或修改
- 操作对象 记录内部标识
- 更新前数据的旧值 对插入操作而言 此项为空值
- 更新后数据的旧值 对删除操作而言 此项为空值
- 每条日志记录的内容
-
基于数据块的日志文件
-
每条日志记录的内容
- 事务标识(标明是那个事务)
- 被更新的数据块
-
-
日志文件的作用
-
进行事务故障恢复
-
进行系统故障恢复
-
协助后备副本进行介质故障恢复
在恢复数据的时候结合转储和日志文件
-
-
登记日志文件
-
基本原则
-
按照并行事务执行的时间次序
-
必须先写日志文件 再写数据库
-
写日志文件操作 把标识这个修改的日志记录写到日志文件
-
写数据库操作 把对数据的修改写到数据库中
-
为什么?
如果先修改数据库之后发生故障,日志文件中没有相应的数据 从而导致可能无法恢复
-
-
-
-
-
恢复策略
-
事务故障的恢复 DBMS自动恢复 不需要用户干预
-
系统故障的恢复 软故障 DBMS重新启动系统的时候自动恢复 不需要用户干预
-
介质故障的恢复 硬故障
恢复方法
-
重装数据库
-
重做已完成的事务
-
备份和还原策略
备份类型 说明 完整备份 备份完成时刻的数据库 提供了任何其他备份的基准 差异备份 事先已执行过一次完整备份 对上一次完整备份之后所有更改的数据作备份 事务日志备份 事先已执行过一次完整备份 从上一次事务日志备份到当前事务日志的尾部 截断已确认的事务日志 备份T-SQL语句,而不是数据库结构、文件结构或数据 策略 说明 完整备份和还原 小型数据库 数据库很少改变或只读 完整+差异备份与还原 数据库频繁更改 想要最少的备份时间 完整+事务日志备份与还原 数据库和事务日志备份相结合 数据库经常更改 完整备份时间过长 完整+差异+事务日志备份与还原 可以减少所需还原事务日志备份的数量 缩短恢复数据库的时间 -
如果有三次完整备份 只能选择任意的一个完整数据库备份进行还原
-
完整性备份+差异备份与还原
**EG6 **
如果要还原到11:00时的数据库状态 完整数据库备份1 + 差异数据库备份2
如果要还原到12:30时的数据库状态 完整数据库备份2+差异数据库备份3
-
完整备份+日志备份与还原 可以恢复到某一时刻
如果还原到11:00时的数据库状态 完整数据库备份1+日志数据库备份1
如果还原到12:30时的数据库状态 完整数据库备份2+日志数据库备份3
或者完整备份1+日志备份1+日志备份2+日志备份3
恢复到10:45时的状态 完整备份1+日志备份1+日志备份2 指定到10:45的恢复即时点
-
-
雪梨作业总结
- 数据库恢复的基础是利用转储的冗余数据,这些转储的冗余数据包括 日志文件、数据库后备副本
- 日志文件 用来记录对数据库中数据进行的每一次更新操作
- 多用户的数据库系统的目标之一是使它的每个用户好像面对着一个单用户的数据库一样使用它,为此数据库系统必须进行 并发控制
- 事务日志用于保存 对数据的更新操作
- 数据冗余不属于并发操作带来的数据不一致性
- 事务的持续性是指 事务一旦提交 对数据库的改变是长久的
- 事务是数据库进行的基本工作单位。如果一个事务执行成功,则全部更新提交;如果一个事务执行失败,则已做过的更新被恢复原状,好像整个事务从未有过这些更新,这样保持了数据库处于 一致性 状态。
- SQL语言的COMMIT语句的主要作用是 提交事务
- 若事务T对数据R已加X锁,则其他对数据R 不能再加任何锁