刘红岩 清华大学 管理科学与工程系 liuhy@sem.tsinghua.edu.cn 第17章 事务管理 刘红岩 清华大学 管理科学与工程系 liuhy@sem.tsinghua.edu.cn.

Slides:



Advertisements
Similar presentations
作業一 : USING DBMS ( 使用 DB2 及 SQL 基本練習 ) 報告人:學生楊群期 學號: 課程 : 高等資料庫 講師 : 楊維邦教授.
Advertisements

© 2012 IBM Corporation IBM 中国系统与科技研发中心 --- IBM i 实验室之旅 利用工具分析 IBM i 程序性能 应锦鑫, IBM i 性能工具高级软件工程师 IBM 中国系统与科技研发中心.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
如何為學生提供最大的選科組合 ? 方塊式時間表 (Block time-table) 學務主任羅偉南老師 聖文德書院.
WCI361 Windows Vista WCI361 Windows Vista 运行性能设计与 改进.
教学网站: 数据库及应用 授课教师:岳静 Tel: 教学网站:
說 劍 《莊子‧雜篇》─ 第 一 組 賴泊錞 謝孟儒 張維真 羅苡芸
数据库原理与应用教程 ―SQL Server
第15章 备份与恢复数据库 日志文件 基本概念 恢复数据库的基本原理 数据库故障的种类 备份数据库 备份的内容和时间 备份的一般方法
Information Resource Management
系統分析與設計 第九章 資料設計.
数据库系统原理及应用 Database Theory and Application
存储基础知识 V1.1.
第2章 資料庫系統 2-1 資料庫環境的四大組成元件 2-2 ANSI/SPARC的三層資料庫系統架構
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第10章 并发控制技术 10.1 并发控制概述 10.2 并发控制的正确性准则 10.3 加锁协议 10.4 死锁的检测、处理和预防
第六章 数据库和ADO.NET 褚龙现 软件学院.
死與生的自我掌握.
2013华东数据库技术大会 MySQL5.6版InnoDB引擎深入剖析 演讲嘉宾:何登成
数据库原理及应用 第10章 事务与锁 10.1 事务 10.2 锁.
第6章 資料庫管理系統 6-1 關聯式資料庫管理系統 6-2 SQL Server資料庫管理系統
MySQL主从同步
第7章 事务管理 事务管理(transaction management): 恢复——保证事务在并发执行时满足ACID准则的技术。
第5章 数据库保护 之事务.
数据库原理与应用.
第6章 死結(Deadlock).
并发控制 讲授者:李川.
An Introduction to Database System
Chapter 6 同步 (Synchronization)
HDS 資料保護解決方案更新.
作業系統 第十三章 檔案系統實例.
Alibaba 数据库高可用架构 Alibaba
Lotus Domino R7 Designer
建立/修改/刪除資料庫 資料庫組成檔案 建立資料庫: 資料(庫)檔案 交易記錄檔 使用Enterprise Manager工具 自助法:
解振宇 客户技术经理 客户售前技术部 微软中国有限公司广州办事处
二.資料庫系統建立與管理 Access 資料庫:windows下的單機資料庫 Access 操作 Mysql資料庫介紹.
分散式資料庫管理系統 與主從式系統 資料庫系統設計實務與管理,5e
第 1 章 ERP的演变.
CICS 基本概念介绍 IBM 中国信息技术服务部.
Flash数据管理 Zhou da
SQL Server 2000 数据库入门.
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
計算機概論 第十章 檔案與資料庫管理系統 陳維魁/陳邦治 旗標出版社.
5 数据库管理与保护 数据库运行的最小逻辑工作单位是事务,所有对数据库的操作,都以事务作为一个整体来执行或撤销。
如何寫工程計畫書 臺北市童軍會考驗委員會 高級考驗營 版.
第5章 資料倉儲的資料建置.
SQL Server 2005 資料庫管理達人一日體驗營
第9章 SQL Server的数据库保护技术 教学目标:通过本章学习,了解SQL Server的安全体系结构的含义和安全认证模式的分类;掌握SQL Server登录账号、用户账号及角色的创建方法;熟悉权限的分类,掌握对象权限和语句权限的管理方法;明确SQL Server中数据完整性的种类,掌握数据完整性实现的具体方法;熟悉SQL.
第三章 儲存空間的配置.
資料庫系統導論.
資訊系統文件化工具 東吳大學會計學系 謝 永 明.
An Introduction to Cloud RDBMS
Ch4.SQL Server 2005資料庫組成員元件介紹
第4章(1) 空间数据库 —数据库理论基础 北京建筑工程学院 王文宇.
分布式数据库系统及其应用.
SQL Anywhere数据库非常规恢复工具
学习要点: 备份的概念 备份的类型 数据库备份的方法 恢复数据库的方法
作業系統 Operating System 第四單元 檔案系統
第一章 数 据 库 概 述 第一节 引言 第二节 数据库基本概念 第三节 数据库系统结构 第四节 数据模型 第五节 数据库管理系统
第1章 SQL Server 2005概述 教学提示:SQL Server 2005是微软的下一代数据管理和分析解决方案,它给企业级应用数据和分析程序带来更好的安全性、稳定性和可靠性,使得它们更易于创建、部署和管理,从而可以在很大程度上帮助企业根据数据做出更快、更好的决策,提高开发团队的生产力和灵活度,以及在减少总体IT预算的同时,能够扩展IT基础架构以更好地满足多种需求。
第11章 事务与锁 11.1 事务Transact 11.2 数据并发的问题 11.3 锁Lock 11.4 事务隔离级别.
材料二甲 授課教師:王致傑 老師 (學420、分機5305)
An Introduction to Database System An Introduction to Database System
17 交易處理與鎖定 17-1 交易的基礎 17-2 交易處理 17-3 並行控制 17-4 資料鎖定 17-5 死結問題.
電子白板百萬小學堂 本活動建議搭配電子白板 學生最多可分成2~6組(請按組別按鈕) 老師可以視時間多少,來進行活動 每一組要回答十個問題。
An Introduction to Database System
第六類 資料庫備份與回復.
国家“十一五”规划教材 数据库原理与应用教程(第3版).
第8章 并发控制 概述 封锁 封锁协议 活锁和死锁 并发调度的可串行性 两段锁协议 封锁的粒度 Oracle的并发控制 2019/11/20
Presentation transcript:

刘红岩 清华大学 管理科学与工程系 liuhy@sem.tsinghua.edu.cn 第17章 事务管理 刘红岩 清华大学 管理科学与工程系 liuhy@sem.tsinghua.edu.cn

事务管理 主要内容: 事务 并发控制 恢复 并发调度异常 基于封锁的并发控制技术 故障类型 日志 系统故障恢复技术 介质故障恢复技术 Hongyan Liu @ Tsinghua University

事务 Transaction

事务的概念 事务(transaction)是DBMS中的一个程序执行单元,通常由一组存取数据库的操作组成 A transaction is a logical unit of work A transaction is a discrete unit of work that must be completely processed or not processed at all within a computer system Hongyan Liu @ Tsinghua University

事务的性质(ACID) ACID: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) Hongyan Liu @ Tsinghua University

原子性(atomicity) 构成事务的所有操作要么全部执行,反映到数据库中,要么全部不执行,没有对数据库中的数据造成影响。 事务满足了此特性,用户就不必担心由于一个事务的部分操作的执行而对数据库所造成的不正确的状态 Hongyan Liu @ Tsinghua University

一致性(consistency) 一致性:事务所包含的操作应使数据库从一个一致状态转变为另一个一致状态。 在任一时刻,数据库中的所有对象(表、元组、分量等)的当前取值称为此数据库的一个状态。 如果在一个状态下,所有数据库对象的值都满足各自相应的约束条件,则称这个状态为数据库的一个一致状态。否则,就称为一个不一致状态。 为了使事务满足此特性,用户必须正确地定义一个事务所应包含的操作。 Hongyan Liu @ Tsinghua University

隔离性(isolation) 隔离性:在多用户环境下,同一时刻通常有多个事务的操作在交叉执行。事务的隔离性指的是事务的执行不受与其同时执行的其他事务的影响,如同事务是串行执行的。 Hongyan Liu @ Tsinghua University

持久性(durability) 一个事务如果被成功执行,其对数据库的影响是持久的,用户不必担心由于故障的发生使得一个事务的作用没有反映到数据库中。 Hongyan Liu @ Tsinghua University

例子 销售员向一个客户销售100个产品P 查看该产品的库存量S,将欲销售的产品数量100从库存量中扣除, 如果原库存量S大于欲销售量100,则将数据库中的产品销售量Q设为100, 否则,若库存量小于100,将数据库中的当前库存量还原为原来的S。 Hongyan Liu @ Tsinghua University

例子(cont.) Read(S); S=S-100; Write (S) If (S<0) rollback Else Q=100; Write(Q) Commit Read(S) 表示从数据库中将产品P的当前库存量S读出并放到内存的一个缓冲区中的变量S中 write(S)表示将缓冲区中变量S的值写回数据库对象S中 Rollback:回滚,取消该事务当前对数据库所做的所有变化,使数据库回到该事务执行前的状态 commit语句则提交该事务对数据库的所有操作,即将该事务对数据库所做的变化变为永久 Hongyan Liu @ Tsinghua University

例子(cont.) 在上述的产品销售的事务中主要涉及两个操作,一个是将库存量减少100,另一个是增加一个新的销售量100,这样可保证数据库中某个产品的总量(库存量和销量)在销售前后保持不变,等于进货总量,这体现了事务的一致性。 事务中的这两个操作要么都执行,要么都不执行,体现了事务的原子性。 如果在将库存量写回数据库之后发生了故障,销售量没有被写回数据库,则数据库就被转变到一个不一致的状态,因此需要合理的数据库恢复机制以防止这种情况的发生。 Hongyan Liu @ Tsinghua University

例子(cont.) 如果这个事务已告知用户被成功执行,则不管发现什么事情,例如软、硬件故障,该产品的销售量增加了100、库存量减少了100都应该被反映到数据库中。这就是事务的持久性特性的体现。 要保证事务的持久性也需要数据库的恢复系统能够将发生故障时尚未将操作结果体现到数据库中的操作进行适当处理,以便不会丢失数据。 Hongyan Liu @ Tsinghua University

例子(cont.) 若事务T1与T2并发执行,事务的隔离性要求每个事务的执行结果应与这些事务的某一串行执行结果相同,即与先执行T1再执行T2的结果,或者先执行T2再执行T1的结果相同。有效的并发控制可保证隔离性。 Read(S); S=S-100; Write (S) If (S<0) rollback Else Q=100; Write(Q) Commit Read(S); Read(Q) Total=S+Q; Hongyan Liu @ Tsinghua University

并发控制 并发调度异常

调度 多个事务包含的操作之间按照一定顺序执行的方式称为一种调度(schedule)。 如果每个事务的操作与其他事务的操作之间没有交错,是串行执行的,则称为串行调度(serial schedule)。 事务并发执行时,不同事务的操作是交错执行的,称为并发调度(concurrent schedule) Hongyan Liu @ Tsinghua University

并发调度 两个事务的交错调度 T1 T2 Read(A) Write(A) Read(C) Write(C) Read(B) Write(B) Hongyan Liu @ Tsinghua University

串行调度与并发调度 串行调度:将数据库从一个一致状态转换到另一个一致状态。 并发调度: 有利于提高系统吞吐量(system throughput) 一类涉及I/O操作,例如从磁盘读取数据到内存; 另一类是CPU的操作。这两类操作可以并行执行 在一个事务进行I/O操作时,如果允许CPU 处理其他事务的操作,则可以有效降低CPU处于空闲状态的时间 有利于短事务的快速执行 短事务等待长事务的执行 Hongyan Liu @ Tsinghua University

可串行化调度 如果事务的某一并行调度对数据库作用的结果与某一串行调度相同,则认为此调度是正确的,称为可串行化调度(serializable schedule) 对于同一组事务S,对其不同的可串行化调度可能产生不同的结果,DBMS无法保证产生哪一种结果,但每一种都认为是正确的。 Hongyan Liu @ Tsinghua University

并发调度异常 丢失更新异常(lost update anomaly) 读脏数据异常(dirty read anomaly) 不能重复读异常(unrepeatable read anomaly) 出现幻像异常(phantom row anomaly) Hongyan Liu @ Tsinghua University

丢失更新异常 又称重写未提交数据(overwriting uncommitted data),属于写写冲突 例如: A:某产品库存量 Read(A) A=A-100 Write(A) Commit A=A-200 Hongyan Liu @ Tsinghua University

读脏数据异常 T1 T2 Read(A) A=A-100 Write(A) Read(B) B=B+100 Write(B) Commit 又称读未提交的数据(reading uncommitted data)。该异常属于写读异常 T1完成的是销售某产品100个 A:库存量 减少100, B:销量增加100, T2:统计库该产品库存量和销量之和。 Hongyan Liu @ Tsinghua University

不能重复读异常 由读写冲突导致 T1 T2 Read(A) Commit A=A+500 Write(A) Hongyan Liu @ Tsinghua University

提交事务与取消事务 提交事务(committed transactions):事务最终被提交了 取消事务(aborted transaction):事务最终没有提交,而是被取消了(rollback), 取消事务需要将数据库恢复到该事务执行前的状态。 一组事务的一个调度如果涉及取消事务,也会产生上述异常,同时还会导致事务的不可恢复性。 Hongyan Liu @ Tsinghua University

读脏数据、不可恢复调度 T1 T2 Read(A) A=A+100 Write(A) Rollback Read(B) B=B+A Write(B) Commit 事务T2读取的A数据是脏数据 事务T2在T1回滚之前已经被提交,因此由于事务T1 被取消,事务T1 对事务T2 造成的影响无法取消,这种情况称为不可恢复的调度(unrecoverable schedule) Hongyan Liu @ Tsinghua University

级联撤销 T1 T2 Read(A) A=A+100 Write(A) Rollback Read(B) B=B+A Write(B) Commit 当T1被撤销的时候,如果T2没有被提交,那么可以强制撤销事务T2,以恢复B的值,这种技术叫做级联撤销(Cascading Abort) Hongyan Liu @ Tsinghua University

并发控制 基于封锁的并发控制技术

封锁(lock) 封锁:对一个数据库对象进行操作的许可 基本的封锁类型: 一个事务在对某对象进行操作之前必须按照某种封锁协议先获得该对象的某种封锁 基本的封锁类型: 共享锁(share lock,,简称S锁) 共享锁通常是对要读的数对象加的锁,又称读锁。 排它锁( exclusive lock,简称X锁) 排它锁通常是对要写的对象施加的锁,又称写锁。 Hongyan Liu @ Tsinghua University

共享锁和排它锁的相容矩阵 行标题:锁的请求 列标题:已有的锁 True:可以获得请求的锁 False:不能获得请求的锁 S锁 X锁 True Hongyan Liu @ Tsinghua University

严格的两段锁协议 严格的两段锁协议(strict two-phase locking, 简称strict 2PL) Hongyan Liu @ Tsinghua University

例子1 消除不能重复读异常 T1 T2 Slock(A) Read(A) … Commit Unlock(A) 请求Xlock(A) A=A+500 Write(A) 消除不能重复读异常 T1 T2 Read(A) A=A-100 Write(A) Commit A=A-200 Hongyan Liu @ Tsinghua University

例子2 遵守strict 2PL协议的交错调度 strict 2PL协议可解决所有异常,但降低并发度,影响系统性能 T1 T2 Slock(A) Read(A) Xlock(C) Read(C) Write(C) Commit Xlock(B) Read(B) Write(B) 遵守strict 2PL协议的交错调度 strict 2PL协议可解决所有异常,但降低并发度,影响系统性能 Hongyan Liu @ Tsinghua University

两段锁协议 两段锁协议 (two-phase locking, 简称2PL): 规则1(锁的增长阶段):如果一个事务T需要读取一个数据库对象,那么它必须首先获得对该对象的共享锁;如果T需要修改一个数据库对象,那么它必须首先获得对该对象的排他锁; 规则2(锁的缩减阶段):一个事务T释放了一个封锁之后就不能再获得新的封锁。 允许事务对拥有的锁提前释放 Hongyan Liu @ Tsinghua University

两段锁协议与严格的两段锁协议 遵守两段锁协议也可以使调度可串行化,但可能引发级联回滚 若在事务T2执行完Write(A) 之后事务T1 发生故障需要回滚,则将引发事务T2的级联回滚。 T1 T2 Xlock(A) Read(A) Slock(B) Read(B) Write(A) Unlock(A) Hongyan Liu @ Tsinghua University

封锁粒度(granularity) 数据库(database)锁、表(table)级锁、页面(block, page)锁、行级锁及列级锁 封锁粒度越小,并发度越高,管理封锁的代价也越高。 Hongyan Liu @ Tsinghua University

隔离级别(isolation level) SQL92规定的一致性级别包括如下4种: serializable: 可保证调度的可串行化,通常被设为默认隔离级别。 repeatable read: 对数据库中已有的数据库对象允许重复读,即只允许读取已提交的数据对象(元组),在一个事务对同一个元组的两次读取之间其他事务不能对其进行修改。 此隔离级别可避免不能重复读异常,但不能保证调度的可串行化,因为它可能导致幻像(phantom)问题。 Hongyan Liu @ Tsinghua University

隔离级别(isolation level) read committed:只能读取已提交数据,可避免读脏数据异常,但不能避免不可重复读异常。 read uncommitted:允许读取未提交数据,可避免丢失更新异常,但不能避免读脏数据异常 Hongyan Liu @ Tsinghua University

隔离级别(isolation level 丢失更新 读脏 数据 不可 重复读 幻像 serializable Y Repeatable read N read committed Read uncommitted 对于一些不要求精确结果的长事务来说,为了避免占用太多资源,提高并发度,可以采用低级别,如read uncommitted Hongyan Liu @ Tsinghua University

幻像(phantom)问题 T1:查询足球类产品的总销量A和健美类产品的总销量B; T2:首先插入一行一个有关健美类产品的销售记录t1,然后插入一行一个有关足球类产品的销售记录t2。 T1 T2 Slock(A) Read(A) Slock(B) Read(B) Commit Insert(t1) Insert(t2) Hongyan Liu @ Tsinghua University

幻像(phantom)问题 行级锁、表级锁、… T1 T2 Slock(A) Read(A) Slock(B) Read(B) Commit Insert(t1) Insert(t2) 原值:A=100,B=200 T1:A=100 T2:插入健美类产品的销售记录t1,销量20 T1:B=220 T2:插入足球类产品的销售记录t2,销售10 串行: T1、T2 T2、T1 行级锁、表级锁、… Hongyan Liu @ Tsinghua University

set transaction isolation level 1 设置隔离级别 Microsoft SQL Server: set transaction isolation level read committed Sybase将这4个级别编为3、2、1、0。设置read committed的语句为: set transaction isolation level 1 UDB DB2:将4个基本重新命名 Repeatable Read(RR)、Read Stability(RS)、Cursor Stability(CS)、Uncommitted Read(UR) change isolation to CS Hongyan Liu @ Tsinghua University

恢复 简介

数据库恢复管理器 负责保证事务的如下两个特性: 故障:数据库处于不一致或不可用状态 可恢复性(recovery) 原子性 (atomicity) 持久性 (durability) 故障:数据库处于不一致或不可用状态 可恢复性(recovery) 从这些状态恢复到一个可用的一致的状态 Hongyan Liu @ Tsinghua University

计算机的存储介质 易失存储器(volatile storage):内存 非易失存储器(nonvolatile storage) 访问速度快 容量有限 非易失存储器(nonvolatile storage) 磁盘:外存,联机存放大量数据 磁带:脱机存放归档数据 容量大、速度慢 Hongyan Liu @ Tsinghua University

数据访问方式 数据在磁盘上以数据块(block)为单位存储 数据块是内、外存数据交换的基本单位。 数据块的大小可以等于一个或几个磁盘块 磁盘块是磁盘寻址的最小单位(扇区)。 为了便于区别,位于磁盘上的数据块又称物理块 Hongyan Liu @ Tsinghua University

缓冲区 内存中开辟一块空间用于存放从磁盘读取的物理块,其大小至少应等于一个物理块的大小,称缓冲块 所有的缓冲块组成了磁盘缓冲区,或称缓冲池(buffer pool) Hongyan Liu @ Tsinghua University

I/O操作 I/O操作:数据在内、外存的一次数据交换称为一次I/O input(A):数据从物理块A读到缓冲块,称为输入操作; output(B):数据从缓冲块B写回到恰当的物理块,称为输出操作。 Hongyan Liu @ Tsinghua University

读操作 专用工作区:每个事务在开始执行时在内存都有一个专用工作区,用于存放它访问和修改的数据项值。当事务结束时该工作区被释放。 read(X): 一个事务要修改数据项X的值,首先需要将其读到工作区中相应的变量x中存储,这种操作称为读操作,涉及两个可能的操作: 检查缓冲区中是否存在包含数据项X的物理块BX,若无,发出input(Bx)输入命令,将物理块读到缓冲块中; 将BX对应的缓冲块中的X数据项送到工作区的变量x 中 Hongyan Liu @ Tsinghua University

写操作 write(X):完成将工作区中变量x的值送到相应缓冲块中的X数据项: 检查缓冲区中是否存在包含数据项X的物理块BX,若无,发出input(Bx)命令,将物理块读到缓冲块中; 将工作区的变量x的值送到相应缓冲块中的X数据项中 Hongyan Liu @ Tsinghua University

写操作的问题 在write(X)操作:没有发出output(BX)命令 问题: 缓冲区满时回写,提高系统性能 如果一个事务在write(X)之后提交,在output(BX)之前系统发生故障,则数据项X的新值并没有被反映到物理块中,导致数据库处于一个不一致的状态 如果一个事务在write(X)之后,由于缓冲区满发出了output(BX)命令将数据项X的新值反映到了物理块中,但事务尚未结束之前系统发生故障,导致数据库处于一个不一致的状态 Hongyan Liu @ Tsinghua University

强制写和不偷帧的策略 强制写(Force write ):一个事务在提交之前强制所更新的缓冲块写回物理块 poor response time but provides durability 偷帧(Steal buffer-pool frames )允许一个未提交的事务Ti将其更新的缓冲块写回物理块,腾出的缓冲块被另一个事务Tj使用 No Steal Steal Force Trivial No Force Desired if not, big buffer pool, impossible if so, how can we ensure atomicity? Hongyan Liu @ Tsinghua University

恢复 故障类型 Type of crashes

故障类型 系统故障(system crash) 介质故障(media failure) Hongyan Liu @ Tsinghua University

系统故障 系统故障又称软故障(soft crash),是指由于软、硬件原因导致当前运行的一个或多个事务无法正常进行,但并未导致物理介质上的数据遭到破坏的情况。 常见的系统故障原因包括断电,程序逻辑错误,如溢出等 Hongyan Liu @ Tsinghua University

介质故障 又称硬故障(hard crash),指的是由于磁盘等数据库外部存储介质损坏而导致数据库的一部分或全部数据无法访问, 这将影响当前正在访问这些数据的事务的正常执行,从而使数据库处于不一致状态。 常用的恢复方法是基于日志的恢复技术 Hongyan Liu @ Tsinghua University

恢复 日志 Log

日志文件 日志(log, trail, journal)是有关DBMS所执行的操作的一个历史记录。 日志文件是一个记录该历史的物理文件 日志记录:日志序列号(log sequence number,简称LSN) 记录多种操作信息:事务开始(start)、更新操作(update)、事务提交(commit)、事务取消(abort) 以及事务终止(end)等 Hongyan Liu @ Tsinghua University

日志记录 更新日志记录(update log record):记录数据更新操作,记录 事务标识符 要更新的数据项的标识符(数据项在磁盘上的位置) 更新前的旧值 更新后的新值等信息 更新前的值称前像(before-image),更新后的值则称为后像(after-image) Hongyan Liu @ Tsinghua University

日志 每次事务执行写操作之前,必须在数据库修改前生成该写操作的日志记录。 若一个日志记录创建后立即写入稳定存储器(信息永不丢失) 开销:频繁写日志记录(数据块) 实际采用方法:内存开辟日志缓冲区 多个日志记录集中在 日志缓冲区中 为了防止发生故障时内存中的日志记录丢失: 先写日志原则 Hongyan Liu @ Tsinghua University

先写日志原则 先写日志原则 (Write-Ahead Log Protocol, 简称WAL 原则) 一次更新操作的日志记录必须在相关数据块写回磁盘之前已经输出到外存。 Before writing a page to disk, every update log record that describes a change to this page must be forced to stable storage 否则,一个事务更改了数据库,数据写回了磁盘,但相应的记录没有保存到日志文件中,这时发生故障,无法撤销这些更改 Hongyan Liu @ Tsinghua University

先写日志原则(cont.) 先写日志原则 在一个事务提交之前,有关Ti的所有日志记录必须已经输出到外存。 否则,一个事务更改了数据库(但未保存到外存),提交了,但有关这个事务的记录没有保存到日志文件中,这时发生故障,这个事务对数据库的更改无法恢复。(无法重做这些更改) Hongyan Liu @ Tsinghua University

日志管理 IBM UDB DB2提供两种日志管理方式: 循环日志(circular logging) 循环使用固定数目的日志文件来记录日志 被覆盖的日志文件中的日志记录所记录的事务必须都已经结束且被更新数据块已被写回了磁盘 归档日志(archival logging) 又称线性日志(linear logging) 与循环日志的不同在于,归档日志将循环日志覆盖的日志文件归档保存而不进行覆盖。 Hongyan Liu @ Tsinghua University

循环日志 循环日志: 假设通过数据库系统配置参数 (参数 logprimary)设置共有n个主日志文件(primary log file)可供使用,文件编号为1、2、…、n。 每个文件大小也可由用户指定(参数logfilsz) 1 2 3 4 5 8 7 6 Hongyan Liu @ Tsinghua University

归档日志 DB2: 将参数LOGRETAIN设为recovery或将参数USEREXIT设为yes。 由用户指定主日志文件个数(logprimary)和次日志文件个数(logsecond)以及文件大小(logfilsz) 当主日志文件写满时,根据需要创建次日志文件 一旦次日志文件达到了最大,如果仍需要日志空间,系统就会发出错误,所有数据库活动停止 手动或利用USEREXIT参数设置用户出口程序 Hongyan Liu @ Tsinghua University

归档日志 1 非活动的日志文件:日志中的事务均已提交且更新数据已反映到磁盘中的数据库中 2 3 4 5 6 7 8 联机日志文件 活动日志文件 非活动的日志文件:日志中的事务均已提交且更新数据已反映到磁盘中的数据库中 活动日志文件(active log file): 包含尚未提交的事务或更新数据尚未写回磁盘的事务。 联机日志文件:位于活动日志目录的非活动的日志文件 Hongyan Liu @ Tsinghua University

系统故障的恢复 Recovery from system crashes

两种情况 导致数据库处于不一致状态的情况有两种 故障发生时尚未结束的事务,它们的某些更新操作可能已经反映到了数据库中。 故障发生前刚刚结束的事务,它们对数据库的更新可能还没来得及从缓冲区写回磁盘。 这两种情况分别需要进行UNDO和REDO操作。 Hongyan Liu @ Tsinghua University

UNDO UNDO:撤销事务外化(externalized)了的数据库更新操作,使得从数据库的状态来看,这些更新操作好像从来没有被执行过 外化了的数据库更新操作: 更新结果涉及的物理块已从缓冲区写回了磁盘的插入、删除和修改操作 依据:事务的原子性 哪种情况? Hongyan Liu @ Tsinghua University

REDO REDO:重复某些数据库更新操作 依据:事务的持久性 哪些事务UNDO? 哪些REDO? 使得对数据库的更新反映到了磁盘上 无法判断一个结束了的事务的更新操作是否已经外化 无法判断一个尚未结束的事务的更新操作是否已经外化 结果:很多无需UNDO 或REDO的事务在恢复时要进行UNDO和REDO Hongyan Liu @ Tsinghua University

检查点 检查点(check point)机制: 检查点命令按一定周期执行 当前位于数据库缓冲区中的缓冲块强制写回到磁盘上的物理数据库中; 将检查点日志记录写到日志文件中,该日志记录描述当前(执行检查点的时刻)正在执行的事务列表。 检查点命令按一定周期执行 在一个检查点执行之前提交的事务,可以确定其对数据库的更新操作已经外化,因此不必进行REDO操作,从而减少需要进行REDO 的事务个数,也减少需要扫描的日志文件的长度。 Hongyan Liu @ Tsinghua University

确定UNDO和REDO事务列表 … …. checkpoint 从日志文件的尾部开始向前搜索直至遇到第一个检查点记录 UNDO={checkpoint记录中记录的事务列表} REDO=空 … checkpoint …. 然后从此处开始反向搜索,向日志的尾部方向搜索,按以下情况进行处理,直至到达尾部 遇到一个事务开始记录,添加该事务到UNDO列表; 遇到一个事务的提交记录,则将该事务从UNDO事务列表移到REDO事务列表 Hongyan Liu @ Tsinghua University

例17.1 :确定UNDO和REDO事务 时间 检查点(tc) 系统故障(tf) 3、UNDO={T3, T4} REDO={T2} REDO={T2,T4} 1、UNDO={ T2,T3} 2、UNDO={ T2 , T3, T4} 4、UNDO={ T3,T4, T5} REDO={T2}

前滚恢复和后滚恢复 确定UNDO和REDO事务列表之后,进行后滚恢复和前滚恢复 后滚恢复(backward recovery) 前滚恢复 (forward recovery, rollforward) 从最近的检查点开始向后对每个需要REDO的事务利用日志中记录的更新后的新值更新数据项,使之恢复到事务成功执行后的状态。 Hongyan Liu @ Tsinghua University

RESTART DATABASE sample 实用命令 在遇到系统故障之后,对于IBM UDB DB2 数据库,只需执行如下的命令重新启动数据库即可: RESTART DATABASE sample sample为数据库的名子 数据库系统将根据日志自动进行REDO和UNDO操作直至将数据库恢复至一致状态 Hongyan Liu @ Tsinghua University

介质故障的恢复 Recovery from media crashes

介质故障解决方案 导致数据库的一部分或全部数据无法访问 至少需要一个数据库的完整备份 循环日志: 只能将数据库恢复到最近一个数据库备份所在时刻的状态。 归档日志,则在数据库备份所在状态的基础上可以根据归档日志进行前滚恢复(forward recovery,rollforward) Hongyan Liu @ Tsinghua University

备份的类型 备份数据库: 对数据库的全部或部分数据复制到一个或多个设备或目录中保存 IBM UDB DB2: 联机备份(online backup)时允许应用程序在备份的同时访问数据库 脱机备份(offline backup)意味着其他程序不能访问数据库直至备份完毕 IBM UDB DB2: 循环日志:只能进行脱机备份 归档日志,联机备份和脱机备份,单个表空间 Hongyan Liu @ Tsinghua University

备份的类型 全备份(full backup): 将整个数据库进行备份 增量备份(incremental backup) 累积式备份( cumulative backup) 针对自从上次最新的、成功的全备份( full backup)操作以来,更新过的所有数据库数据块的副本 差异式备份( delta backup) 自从上次成功备份(全备份、累积式备份或差异式备份)以来已更改过的所有数据库数据的备份 Hongyan Liu @ Tsinghua University

备份的类型 累积式备份 差异式备份 若周五备份完成之后发生介质故障:上周日+周五 上周日+周一~周五 周日 周一 周二 周三 周四 周五 周六 周日 全备份 周日 周一 周二 周三 周四 周五 周六 周日 全备份 Hongyan Liu @ Tsinghua University

备份操作 备份数据库命令: IBM UDB DB2: 备份的数据库名称、要备份的表空间名称(默认情况下指的是整个数据库)、联机备份还是脱机备份以及备份文件所在的设备或目录名。 IBM UDB DB2: 例17.2: BACKUP DATABASE sample TO d:\dbbackup; 备份文件名将包含备份时刻的时间信息,包括年月日以及时分秒 20061007153620表示备份是在2006年10月7日下午3点36分20秒进行的 BACKUP DATABASE sample TABLESPACE userspace1 ONLINE TO d:\dbbackup; Hongyan Liu @ Tsinghua University

复原操作(1) 复原数据库:利用备份还原数据库的过程 DB2:restore 将例17.2中的备份进行复原的命令如下: 指定备份数据库的名字、备份所在的位置、备份的日期和时间等 将例17.2中的备份进行复原的命令如下: RESTORE DATABASE sample FROM d:\dbbackup TAKEN AT 20061007153620 REPLACE EXISTING 子句replace existing:若sample数据库存在,则其内容将被删除,用备份数据替换。 Hongyan Liu @ Tsinghua University

复原操作(2) 前滚悬挂(rollforward pending)状态 若数据库的参数LOGRETAIN被设为recovery或参数USEREXIT被设为yes,即系统处于前滚恢复活动的状态,执行该复原命令后,系统处于前滚悬挂状态,数据库不可用 执行前滚命令 或: RESTORE DATABASE sample FROM d:\dbbackup TAKEN AT 20061007153620 REPLACE EXISTING WITHOUT ROLLING FORWARD Hongyan Liu @ Tsinghua University

前滚操作 命令rollforward: 将一个处于前滚悬挂状态的数据库或表空间恢复至一个指定的一致状态 利用日志将备份后提交的事务对数据库的更新反映到数据库中 只有在归档日志管理方式下才能执行 Hongyan Liu @ Tsinghua University

前滚:例子 例17.6:前滚数据库到日志尾部 前滚数据库到某一指定时刻 ROLLFORWARD DATABASE sample TO END OF LOGS AND STOP 前滚数据库到某一指定时刻 ROLLFORWARD DATABASE sample TO 2006-10-8-12.20.30 AND STOP 把在此时间之前提交的事务进行前滚,之后的则忽略 Hongyan Liu @ Tsinghua University