第10章 数据库恢复技术1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 3、差异备份
也叫增量备份。它是只备份数据库一部分的另一种方法, 它不使用事务日志,相反,它使用整个数据库的一种新映象。 它比最初的完全备份小,因为它只包含自上次完全备份以来所 改变的数据库。它的优点是存储和恢复速度快。推荐每天做一 次差异备份。
登记的次序严格按并行事务操作执行的时间次序。同时遵循 “先写日志文件”的规则.我们知道写一个修改到数据库中和 写一个 表示这个修改的log记录到日志文件中是两个不同的操作, 有可能在这两个操作之间 发生故障,即这两个写操作只完成了 一个,如果先写了数据库修改,而在运行记录中没有登记下这个 修改,则以后就无法恢复这个修改了,为了安全 应该先写日志 文件,即首先把log记录写到日志文件上,然后写数据库的修改。 这就是“先写日志文件”的原则。
• 2、事务恢复 • 利用日志文件恢复事务的过程分为二步: • 第一步,从头扫描日志文件,找出哪些事务在故障发生时 已经结束(这些事务有BEGIN TRANSACTION和COMMIT记 录),哪些事务尚未结束(这些事务只有BEGIN TRANSACTION记录,无COMMIT记录)。 第二步,对尚未结束的事务进行撤消(也称为UNDO)处 理, 对已经结束的事务进行重做(REDO)处理。 进行 UNDO处理的方法是,反向扫描日志文件, 对每个UNDO事务的更新操作执行反操作。即对已经插入的 新记录执行删除操作, 对已删除的记录重新插入,对修改的 数据恢复旧值(用旧值代替新值)。 进行REDO处理的方法 是,正向扫描日志文件,重新执行登记的操作。
检查点方法
• 什么是检查点方法 检查点方法的恢复算法: 1)根据日志文件建立事 务重做队列和事务撤 销队列 2) 对重做队列中的事务 进行REDO处理,对 撤消队列中的事务进 行UNDO处理
T1
T2 T3 T4 T5
事务
检查点
故障点
-------------------------------------
检查点 时间
事务T1不必恢复; 事务T2和事务T4必须重做(REDO);
事务T3和事务T5必须撤消(UNDO)
登录日志文件
• 日志文件是用来记录对数据库每一次更新活动的文件, 在动态转储方式中必须建立日志文件,后援副本和日志文 件综合起来 才能有效地恢复数据库。在静态转储方式中, 也可以建立日志文件,
恢复时,对 故障发生时已 提交的事务进 行重做(Redo, 再执行),而对 未提交的事务 进行撤销(Undo, 逆操作)
• 介质故障的恢复
首先装入最新后备副本和有关日志文件副本, Redo已提交的事务,使数据库恢复至故障前某 一时刻的一致状态 装入副本由DBA介入完成,并执行DBMS提供 的恢复命令
第十章 数据库恢复技术
林颖贤
10.1 事务的基本概念
一、什么是事务 二、如何定义事务 三、事务的特性
事务(Transaction)是用户定义的一个数据库操作 序列,这些操作要么全做,要么全不做,是一个 不可分割的工作单位。事务和程序是两个概念 在关系数据库中,一个事务可以是一条SQL 语句,一组SQL语句或整个程序 一个应用程序通常包含多个事务 事务是恢复和并发控制的基本单位
当数据库毁坏后可重新装入后援副本把数据库恢复到转储 结束时刻的正确状态, 然后利用日志文件,把已完成的事 务进行重做处理,对故障发生时尚未完成的事务进行撤消 处理。这样不必重新运行那些已完成的事务程序 就可把数 据库恢复到故障前某一时刻的正确状态。
•
• 介绍如何登记日志文件以及发生故障后如何利用日志文件恢复事 务。 • 1、登记日志文件(logging) • 事务在运行过程中,系统把事务开始、事务结束(包括 COMMIT和ROLLBACK)、以及对数据库的插入、删除、修改 等每一个操作作为一个登记记录(log记录) 存放到日志文件中。 每个记录包括的主要内容有:执行操作的事务标识,操作类型, 更新前数据的旧值(对插入操作而言此项为空值),更新后的新 值 (对删除操作而言此项为空值)。 •
练习
• 1、设计一个事务的运行过程,观察事务运行期间的封锁及其含义。
系统进程 ID
请求锁的数 据库标识号
请求锁 的对象 的对象 标识号
• 在“查询分析器”的一个连接窗口(连接1)中,运行事务, 见下图。
在“查询分析器”新建一个连接窗口(“文件”->“连接”,连接2),执行 操作,见下图。
观察此时Sell表的加锁情况
•
常用的数据库备份类型有哪些?
• 1. 完全备份
这是大多数人常用的方式,它可以备份整个数据 库,包含用户表、系统表、索引、视图和存储过程 等所有数据库对象。但它需要花费更多的时间和空 间,所以,一般推荐一周做一次完全备份。
• 例: backup database [数据库名] to disk=[磁盘路径] •
每次转储 更新过的 数据
建立冗余数据的方法二
• 登记日志文件(Logging)
–日志文件:记录事务对数据库的更新操作 –以记录为单位的日志文件 • 事务的开始标记,事务的结束标记 • 各个事务的所有更新操作
–事务标识TransID, 操作类型UpdateType, 操 作对象RecordID, 更新前的旧值OldValue, 更 新后的新值NewValue
事务的ACID特性: 原子性(Atomicity)---事务是数 原子性(Atomicity) 据库的逻辑工作单位,事务中的 一致性(Consistency) 操作要么都做,要么都不做. 隔离性(Isolation) 持续性(Durability ) 一致性(Consistency)---事务执行的结果必须是使数据库 从一个一致性状态变到另一个一致性状态 一致性状态:DB中只包含成功事务提交的结果 不一致状态:数据库包含失败事务的结果 隔离性(Isolation) 并发执行的各事务不能相互干扰 • 持续性也称永久性(Permanence) 事务一旦提交,它对数据库的更新 不再受后继操作或故障的影响
登记日志文件必须遵 循的原则:
登记的次序严 格按并发事务执 行的时间次序 必须先写日志 文件,后写数据 库
–以数据块为单位的日志文件 • 事务标识,被更新的数据块
4. 恢复策略
• 事务故障的恢复
反向扫描日志文件,Undo事务中的更新操作, 由系统自动完成
• 系统故障的恢复
首先正向扫描日志文件,生成Redo和Undo队列 然后对Undo队列中的各事务进行Undo,最后对 Redo队列中的各事务进行Redo,由系统在重启时 自动完成
事务型DBMS中必备的机制
• 事务是恢复和并发控制的基本单位 • 恢复机制与并发控制机制的提出:
–事务在运行过程中因某种故障被强行终止,数 据库一致性被破坏,需进行恢复
–多个事务并行运行时,不同事务的各种操作交 叉进行,为保证各事务的执行互不干扰,需进 行并发控制
作业
• 【例1】定义一个事务,向数据表Sell插入3 条记录,最后回滚该事务。 • 【例2】定义一个事务,向数据表Sell插入1 条记录后设臵一个保存点,然后再向数据表 Sell插入3条记录,最后将事务回滚到该保存 点。
2. 各类故障对数据库的可能影响
数据库本身被破坏,使数据库中全部或部分数据
丢失 –如系统故障、介质故障、计算机病毒等 数据库没有被破坏,但因事务的运行被非正常终 止而使数据库数据失去一致性(正确性)
–如事务内部故障、系统故障、计算机病毒等
3. 恢复的实现技术
• 数据库恢复的基本原理 – 利用存储在系统别处的冗余数据来重建 • 恢复技术的两个关键: – 如何建立冗余数据 • 数据转储 • 登录日志文件 – 如何利用冗余数据恢复数据库
建立冗余数据的方法一
• 数据转储:定期进行磁盘备份形成后备副本 –具体方法如下示意 –由DBA 定义适当的转储周期
转储和用户事务 可以并发执行
转储期间不执行 任何用户事务
每次转储全 部数据库
转储状态 动态转储 海量转储 增量转储 动态海量转储 动态增量转储 静态转储 静态海量转储 静态增量转储
转储方式
• 显式定义方式 BEGIN TRANSACTION BEGIN TRANSACTION SQL 语句1 SQL 语句1 SQL 语句2 SQL 语句2 。。。。。 。。。。。 COMMIT ROLLBACK • 隐式方式 当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务
• SQL定义事务的语句 –Begin transaction(事务开始) –Commit(事务提交,正常结束,将更新结果写 入磁盘) –Rollback(事务回滚,撤销事务中所有已完成 的更新)
1 . 故障的种类
• 事务内部故障 事务内部的故障有的是可以通过事务程序本身 发现的,有的是非预期的,不能由事务程序处理, 如运算溢出、因并发事务发生死锁而被选中撤销 该事物等.
来自百度文库
事务故障意味着事务没有达到预期的终点 (COMMIT或ROLLBACK),从而数据库可能处于不 正确状态。此时必须强行回滚(ROLLBACK)该事 务。这类恢复操作称为事务撤消(UNDO)。
•
• •
• • • • • • • •
例如:银行转帐事务。这个事务把一笔金额从一个帐户 甲转给另一个帐户乙。(Amount为转帐金额) BEGIN TRANSACTION READ BALANCE // 读帐户甲的余额 BALANCE=BALANCE - AMOUNT; IF (BALANCE < 0) THEN { PRINT ‘金额不足,不能转帐’; ROLLBACK;//撤消刚才的修改,恢复事务 } ELSE { READ BALANCE1 //读帐户乙的余额; BALANCE1=BALANCE1 + AMOUNT; WRITE BALANCE1; COMMIT; }
2、事务日志备份
restore database 数据库名 from disk=‘备份位置’
事务日志是一个单独的文件,它记录数据库的改 变,备份的时候只需要复制自上次备份以来对数据 库所做的改变,所以只需要很少的时间。为了使数 据库具有健壮性,推荐每小时甚至更频繁的备份事 务日志。
• backup log database [数据库名] to disk=[磁盘路径]
• 系统故障(system)
是指造成系统停止运转的任何事件,使得系统 要重新启动。如硬件故障、操作系统故障、DBMS代 码错误、突然停电等。系统重新启动时,恢复子系 统需要撤消所有未完成(非正常终止)的事务,并 重做(REDO)所有已提交的事务。 • 介质故障(medium) 系统故障称为软故障,介质故障称为硬故障。硬 故障指外存故障,如磁盘损坏等。这类故障将破坏 数据库或部分数据库。这类故障发生的可能性很小, 但破坏性最大 • 计算机病毒(virus) 这是一种人为的故障或破坏。
5. 具有检查点的恢复技术
• 引入检查点的原因(CheckPoint) 减少对日志记录的搜索和Redo处理,改善恢复效率 • 具有检查点的恢复技术 在日志文件中增加检查点记录,其内容包括: 建立检查点时刻所有正在执行的事务标识和这些事 务最近一个日志记录的地址 增加重新开始文件 用来记录各个检查点记录在日志文件中的地址 动态维护日志文件:周期性地执行(定期或不定期) 建立检查点,保存数据库状态
• (4)在连接1窗口执行commit,观察连接2窗口,见下图。
分析 原因 并解 释。
10.2 数据库的恢复
• 数据库的恢复是指当数据库系统遭到破坏时, 通过一些技术,使数据库恢复到遭到破坏前 的正确状态。恢复的基本原则就是冗余,即 数据的重复存储。恢复的常用方法有:定期 对整个数据库进行复制或转储;建立日志文 件。
这个例子说明事务是一个“完整的”工作单位,它所包括 的一组更新操作 要么全部完成要么全部不做,否则就会使 数据库处于不一致状态,
事务的状态变迁图
事务状态
部分提交 状态
提交状 态
活动状 态 失败状 态
中止状 态
活动状态:事务执行时 所处于的状态 部分提交状态:最后一 条语句被执行后 失败状态:发现正常的 执行不能继续后 中止状态:事务回滚并 且数据库已被恢复到事 务开始执行前的状态后 提交状态:事务成功完 成后 提交的或中止的 事务被称为已经结束的 事务。