1、王建民 信息科学与技术学院 2011-5-17,数据库系统原理 Theory of Database System,-2-,05:43,复习,事务的基本概念、事务的特征、事务的状态 并发操作 若干个事务同时存取相同的数据。 提高系统的效率 但带来新问题 并发控制的任务 对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性 数据库的并发控制以事务为单位,-3-,05:43,复习(Cont.),数据库的并发控制通常使用封锁机制 两类最常用的封锁(排它锁、共享锁)、锁的相容性 封锁协议:一、二、三级。可分别解决不同问题。 对数据对象施加封锁,带来问题 活锁: 解决办法:先来先服务死锁:预防方
2、法:一次封锁法、顺序封锁法死锁的诊断与解除:超时法、等待图法,-4-,05:43,7.2 并发控制,并发控制概述 并发控制措施 封锁协议 死锁 并发调度的可串行性 两段锁协议,-5-,05:43,并发调度的可串行性,DBMS对并发事务不同的调度可能会产生不同的结果 什么样的调度是正确的? 所有事务的串行调度策略一定是正确的调度策略。尽管不同串行顺序的结果不一样,但都不会讲数据库置于不一致的状态,因此是正确的。 因此,如果某调度结果与一串行结果相同,则该调度是正确的。 可串行化调度。,-6-,05:43,可串行化调度,可串行化调度 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行
3、这些事务时的结果相同。 可串行性 并发事务正确调度的准则 一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。,-7-,05:43,可串行化调度(Cont.),例:有两个事务,分别包含下列操作: 事务T1:读B;A=B+1;写回A。 事务T2:读A;B=A+1;写回B。 现给出对这两个事务不同的调度策略。,-8-,05:43,串行调度:正确的调度,设A、B的初值均为2。 按T1T2次序执行结果为A=3,B=4 串行调度策略,正确的调度,-9-,05:43,串行调度:正确的调度(Cont.),设A、B的初值均为2。 T2T1次序执行结果为B=3,A=4 串行调度策略,正确的调度,-10
4、-,05:43,可串行化调度:正确的调度,执行结果与串行调度(a)的执行结果相同 是正确的调度,-11-,05:43,不可串行化调度:错误的调度,执行结果与(a)、(b)的结果都不同 是错误的调度,-12-,05:43,7.2 并发控制,并发控制概述 并发控制措施 封锁协议 死锁 并发调度的可串行性 两段锁协议,-13-,05:43,两段锁协议,封锁协议:运用封锁方法对数据对象加锁时需要约定一些规则 何时申请封锁 持锁时间 何时释放封锁等 两段封锁协议是最常用的一种封锁协议,使用两段封锁协议产生的是可串行化调度。,-14-,05:43,两段锁协议(Cont.),两段锁协议(2 Phase Lo
5、cking:2PL) 指所有事务必须分两个阶段对数据项加锁和解锁 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁在释放一个封锁之后,事务不再申请和获得任何其他封锁,-15-,05:43,两段锁协议(Cont.),“两段”锁的含义 事务执行分为两个阶段第一阶段是获得锁,也称为生长阶段 事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁 第二阶段是释放锁,也称为收缩阶段 事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁,-16-,05:43,两段锁协议(Cont.),例 事务Ti遵守两段锁协议,其封锁序列是 : Slock A Slock B Xlock C
6、Unlock B Unlock A Unlock C; | 生长阶段 | | 收缩阶段 | 事务Tj不遵守两段锁协议,其封锁序列是: Slock A Unlock A Slock B Xlock C Unlock C Unlock B;,-17-,05:43,两段锁协议(Cont.),右图的调度是遵守两段锁协议的,因此一定是一个可串行化调度。,事务遵守两段锁协议是可串行化调度。 可串行化调度不一定都符合两段锁协议 。,-18-,05:43,第7章 数据库保护,7.1 事务 7.2 并发控制 7.3 数据库备份与恢复,-19-,05:43,数据库备份与恢复,数据库故障的种类 数据库备份 数据库恢
7、复,-20-,05:43,故障的种类,事务内部的故障 系统故障 介质故障 计算机病毒,-21-,05:43,一、事务内部的故障,例:银行转账事务-从账户A转1万元到账户B。BEGIN TRANSACTIONread (A) ;A:=A-10000;write (A);IF(A 0 ) THEN print (金额不足,不能转账!);ROLLBACK; ELSE read (B);B:=B+10000;write (B);COMMIT; ,A0属于事务内部的故障 是可预见的,%撤销对A的修改,恢复事务!,%正常提交,完成任务!,-22-,05:43,事务内部的故障(Cont.),事务内部故障更多
8、的是非可预期的,不能由应用程序处理。 例如:运算溢出,违反了某些完整性限制等 事务故障的恢复: 事务故障意味着事务没有达到预期的终点,数据库可能处于不正确状态,因此,要在不影响其它事务运行的情况下,强行回滚(rollback) 该事务,即撤销该事务已经做出的对数据库的修改,使该事务好像根本没运行一样。 事务故障的恢复操作:撤销事务(UNDO),-23-,05:43,二、系统故障,系统故障:是指造成系统停止运转的任何事件,使得系统要重新启动。 例如:突然断电 整个系统的正常运行突然被破坏 所有正在运行的事务都非正常终止 不破坏数据库 数据库缓冲区的信息全部丢失,-24-,05:43,系统故障的常
9、见原因,特定类型的硬件错误(如CPU故障) 操作系统故障 系统断电 等等,-25-,05:43,系统故障的恢复,发生系统故障时,事务未完成 恢复策略:强行撤消(UNDO)所有未完成事务 发生系统故障时,事务已提交,但缓冲区中的信息尚未完全写回到磁盘上。 恢复策略:重做(REDO)所有已提交的事务,-26-,05:43,三、介质故障,介质故障 磁盘损坏 磁头碰撞 操作系统的某种潜在错误 瞬时强磁场干扰 这类故障会破坏数据库或部分数据库,并影响正在存取这部分数据的事务。这类故障发生的可能性小,但是破坏性很大。,-27-,05:43,介质故障的恢复,1、装入数据库发生介质故障前的数据副本 2、重做自
10、此时(副本备份时刻)后的所有成功事务,将这些事务已提交的结果重新记入数据库,-28-,05:43,四、计算机病毒,计算机病毒 一种人为的故障或破坏 可以繁殖和传播 危害 破坏、盗窃系统中的数据 破坏系统文件 应对策略 查杀病毒,安装防火墙和实时监控软件 根据数据备份文件和日志文件恢复数据库,-29-,05:43,数据库备份与恢复,数据库故障的种类 数据库备份 数据库恢复,-30-,05:43,为什么要进行数据备份?,备份数据库的主要目的是为了防止数据的丢失。 造成数据丢失的原因包括如下几种情况: 由于不准确的更新而造成的数据的不正确; 由于病毒的侵害而造成的数据的丢失或损坏; 存放数据的物理磁
11、盘或机器的损害; 由于自然灾害而造成的损坏。 一旦数据库出现问题,可以根据备份对数据库进行恢复。,-31-,05:43,数据库备份,指定期或不定期地对数据库数据进行复制。 可以复制到本地机器上,也可以复制到其它机器上。 备份的介质可以是磁带也可以是磁盘,但通常选用磁带。 是保证系统安全的一项重要措施。 在制定备份策略时,应考虑如下几个方面: 备份的内容 备份频率,-32-,05:43,数据库备份与恢复,数据库故障的种类 数据库备份 数据库恢复,-33-,05:43,数据库恢复,数据库恢复 将数据库从错误的状态恢复到正确的状态(最近的正确时刻)。 恢复策略 事务故障的恢复 系统故障的恢复 介质故
12、障的恢复,-34-,05:43,事务故障的恢复,事务故障:事务在运行至正常终止点前被终止 恢复方法 由恢复子系统利用日志文件撤消(UNDO)此事务已对数据库进行的修改 事务故障的恢复由系统(DBMS)自动完成,对用户是透明的,不需要用户干预,-35-,05:43,事务故障的恢复步骤,1. 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。 2. 对该事务的更新操作执行逆操作。即将日志记录中“更新前的值” 写入数据库。 插入操作, “更新前的值”为空,则做删除操作 删除操作,“更新后的值”为空,则做插入操作 若是修改操作,则用修改前值代替修改后值 3. 继续反向扫描日志文件,查
13、找该事务的其他更新操作,并做同样处理。 4. 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。,-36-,05:43,系统故障的恢复,系统故障造成数据库不一致状态的原因 未完成事务对数据库的更新已写入数据库(临时值) 已提交事务对数据库的更新还留在缓冲区没来得及写入数据库 恢复方法 1. Undo 故障发生时未完成的事务 2. Redo 已完成的事务 系统故障的恢复由系统在重新启动时自动完成,不需要用户干预,-37-,05:43,系统故障的恢复步骤,1. 正向扫描日志文件(即从头扫描日志文件),生成: 重做(REDO) 队列:在故障发生前已经提交的事务 这些事务既有BEGIN T
14、RANSACTION记录,也有COMMIT记录 撤销 (Undo)队列:故障发生时尚未完成的事务这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录,-38-,05:43,系统故障的恢复步骤(Cont.),2. 对撤销(Undo)队列事务进行撤销(UNDO)处理 反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作 即将日志记录中“更新前的值”写入数据库 3. 对重做(Redo)队列事务进行重做(REDO)处理 正向扫描日志文件,对每个REDO事务重新执行登记的操作 即将日志记录中“更新后的值”写入数据库,-39-,05:43,介质故障的恢复,1.重装数据库 2.重
15、做已完成的事务,-40-,05:43,介质故障的恢复(Cont.),恢复步骤 1. 装入最新的后备数据库副本(离故障发生时刻最近的转储副本) ,使数据库恢复到最近一次转储时的一致性状态。 对于静态转储的数据库副本,装入后数据库即处于一致性状态 对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。,-41-,05:43,介质故障的恢复(Cont.),2. 装入有关的日志文件副本(转储结束时刻的日志文件副本) ,重做已完成的事务。 首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。 然后正
16、向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。,-42-,05:43,介质故障的恢复(Cont.),介质故障的恢复需要DBA介入 DBA的工作 重装最近转储的数据库副本和有关的各日志文件副本 执行系统提供的恢复命令 具体的恢复操作仍由DBMS完成,-43-,05:43,数据库恢复方法,数据库恢复方法 利用备份 利用事务日志 利用镜像,-44-,05:43,数据库镜像,介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性 介质故障恢复比较费时 为预防介质故障,DBA必须周期性地转储数据库 提高数据库可用性的解决方案 数据库镜像(Mirror
17、),-45-,05:43,数据库镜像(Cont.),数据库镜像 DBMS自动把整个数据库或其中的关键数据复制到另一个磁盘上 DBMS自动保证镜像数据与主数据库的一致性每当主数据库更新时,DBMS自动把更新后的数据复制过去(如下图所示),-46-,05:43,数据库镜像(Cont.),-47-,05:43,数据库镜像的用途,出现介质故障时 可由镜像磁盘继续提供使用 同时DBMS自动利用镜像磁盘数据进行数据库的恢复 不需要关闭系统和重装数据库副本(如下图所示),-48-,05:43,数据库镜像的用途(Cont.),没有出现故障时 可用于并发操作 一个用户对数据加排他锁修改数据,其他用户可以读镜像数
18、据库上的数据,而不必等待该用户释放锁 频繁地复制数据自然会降低系统运行效率 在实际应用中用户往往只选择对关键数据和日志文件镜像,而不是对整个数据库进行镜像,-49-,05:43,小结,DBMS必须对事务故障、系统故障和介质故障进行恢复。 恢复中最经常使用的技术:数据库转储和日志文件。 恢复的基本原理:利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库。,-50-,05:43,本章小结(Cont.),恢复策略 事务故障的恢复:UNDO 系统故障的恢复:UNDO + REDO 介质故障的恢复:重装备份并恢复到一致性状态 + REDO,Theory of Database,作业,P93:913,-52-,05:43,第二次上机,时间: 2011-05-11(星期三)7-8节 地点:第九实验楼1楼(101、102) 实验名称:数据查询 实验内容: 数据查询:P65(1-18) 视图:P72(3),