《数据库概述》 第十章 数据库恢复技术
10.1 事务的基本概念
1.事务
事务是用户定义的一个数据库操作序列
一个事务可以是一条SQL语句,一组SQL语句或整个程序
一个程序通常包括多个事务
事务是恢复和并发控制的基本单位
显示定义事务:
BEGIN TRANSACTION
SQL 语句1,
SQL 豫剧2
COMMIT #正常结束
ROLLBACK #异常终止
①COMMIT:事务正常结束、提交事务所有操作
②ROLLBACK:事务异常终止、事务滚回到开始时的状态
隐示定义事务:
当用户没有显式地定义事务时,数据库管理系统按缺省规定自动划分事务
2.事务的ACID特性
①原子性
事务是数据库的逻辑工作单位,包括的诸操作要么都做,要么都不做
②一致性
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态
一致性状态:只包含成功结果
不一致状态:故障、未完成
③隔离性
一个事务的执行不能被其他事务感染
④持续性
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,不会受影响。
破坏事务ACID特性因素:
①多个事务并行运行时,不同事务的操作交叉执行
②事务运行时被强制停止
10.2 数据库恢复概述
故障:计算机硬件故障、软件错误、操作员失误、恶意破坏
故障影响:事务非正常中断,数据正确性,破坏数据库
数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态
10.3 故障的种类
1.事务内部故障
①通过事务程序本身发现
②非预期,不能由事务程序处理:运算溢出、并发事务发生死锁而被选中撤销该事务、违反了某些完整性限制而被终止等
2.系统故障
称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动
常见原因:
①特定硬件错误(CPU) ②操作系统故障 ③数据管理系统代码错误 ④系统断电
恢复策略:
①系统重启时,撤销所有未完成事务(防止未完成的事务送进数据库)
②系统重启时,恢复程序需要重做所有已提交事务
3.介质故障
硬故障,外存故障:磁盘损坏、磁头碰撞、强磁场感染
介质故障破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务介质
4.计算机病毒
小的病毒20条指令,不到50B
大的病毒像操作系统,上万条指令
各类故障对数据库影响:
①破坏数据库本身
②数据不正确
10.4 恢复的实现技术
基本原理:冗余
利用存储在系统别处的余数据来重建数据库中已被破坏或不正确的那部分数据
10.4.1 数据转储
1.什么是数据转储
转储:数据库管理员定期将整个数据库复制到磁带、磁盘或其他存储介质保存起来的过程(备用数据称为后备副本或后援副本)
重装后备副本只能将数据库恢复到转储时的状态
2.转储方法
①静态转储与动态转储
静态:系统无运行事务时进行转储,得到数据一致性副本
动态:转储操作何用户事务并发进行,不保证副本数据正确
②海量转储与增量转储
海量:每次转储全部
增量:只转储更新过数据
10.4.2 登记日志文件
1.日志文件的格式和内容
日志文件:记录事务对数据库的更新操作
格式:
①以记录为单位:事务标识、操作类型、操作对象、旧数据、新数据
②以数据块为单位:事务标识、被更新数据库
2.日志文件的作用
①进行事务故障恢复
②进行系统故障恢复
③协助后备副本进行介质故障恢复
3.登记日志文件
为保证数据库是可恢复的,登记日志文件时必须遵循两条原则
①登记的次序严格按并发事务执行的时间次序
②必须先写日志文件,后写数据库
10.5 恢复策略
10.5.1 事务故障的恢复
事务故障:事务在运行至正常终止点前被终止
恢复方法:由恢复子系统利用日志文件撤消 (UNDO)此事务已对数据库进行的修改
事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预
10.5.2 系统故障的恢复
系统故障造成数据库不一致状态的原因
①未完成事务对数据库的更新可能已写入数据库
②已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库
恢复方法:
①Undo 故障发生时未完成的事务
②Redo已完成的事务
系统故障的恢复由系统在重新启动时自动完成,不需要用户干预
10.5.3 介质故障的恢复
介质故障的恢复需要数据库管理员介入
1.重装数据库
2.重做已完成的事务
10.6 具有检查点的恢复技术
1.问题的提出
①搜索整个日志耗费大量时间
②重做处理:重新处理,浪费大量时间
2.检查点技术
恢复子系统可以定期或不定期地建立检查点保存数据库状态
3.利用检查点的恢复策略
10.7 数据库镜像
数据库镜像:数据库管理系统自动把整个数据库或关键数据复制到另一个磁盘
出现介质故障时:可由镜像磁盘继续提供使用
没出现故障:可用于并发操作
在实际应用中用户往往只选择对关键数据和日志文件
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!