收藏 分销(赏)

数据库原理课程教案(常用版).doc

上传人:二*** 文档编号:4518883 上传时间:2024-09-26 格式:DOC 页数:37 大小:860.54KB
下载 相关 举报
数据库原理课程教案(常用版).doc_第1页
第1页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、数据库原理课程教案(常用版)(可以直接使用,可编辑 完整版资料,欢迎下载) 数据库原理 课程教案授课题目(教学章、节或主题):第七章 数据库系统的恢复和并发控制技术:包括事务的概念以及事务的ACID特性,数据库恢复技术,并发操作产生的数据不一致性,并发调度的可串行性概念,封锁协议与数据一致性的关系,死锁的预防和诊断,饥饿的概念及预防等。教学目的、要求(分掌握、熟悉、了解三个层次):把所学的知识和第六章所学习的知识联系起来,在实际的应用中,提升对这些技术的理解和掌握,保证数据的完整性、安全性和一致性,保证数据库系统24小时正确运行,保证数据库系统在遇到故障时能及时恢复正常运行,提高抗故障抗灾难的

2、能力。课时安排:6节授课方式:理论课教学基本内容:以教师为中心的讲授、提问及论证等的教学方法,教学手段使用板书与多媒体相结合的手段。第七章 数据库系统的恢复和并发控制技术v 本章学习目的 把所学的知识和第六章所学习的知识联系起来,在实际的应用中,提升对这些技术的理解和掌握,保证数据的完整性、安全性和一致性,保证数据库系统24小时正确运行,保证数据库系统在遇到故障时能及时恢复正常运行,提高抗故障抗灾难的能力。v 本章要点 事务的基本概念 事务的ACID属性 数据库恢复技术,针对不同的故障类型,掌握恢复数据库的策略和方法 并发操作产生的数据不一致性 并发调度的可串行性概念 封锁协议与数据一致性的关

3、系 死锁的预防和诊断 饥饿的概念及预防7.1 事务的基本概念和特性 事务的基本概念 v 事务定义 一个数据库操作序列 一个不可分割的工作单位 恢复和并发控制的基本单位v 在SQL语言中,定义事务的语句有三条: BEGIN TRANSACTION COMMIT ROLLBACK1)什么是事务l 事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位l 事务和程序是两个概念 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序 一个应用程序通常包含多个事务l 事务是恢复和并发控制的基本单位2)如何定义事务l 显式定义方

4、式 BEGIN TRANSACTION BEGIN TRANSACTION SQL 语句1 SQL 语句1 SQL 语句2 SQL 语句2 。 。 COMMIT ROLLBACKl 隐式方式当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务v COMMIT 事务正常结束 提交事务的所有操作(读+更新) 事务中所有对数据库的更新永久生效v ROLLBACK 事务异常终止 事务运行的过程中发生了故障,不能继续执行 回滚事务的所有更新操作 事务滚回到开始时的状态 事务的ACID 特性 事务的ACID特性:v 原子性(Atomicity)v 一致性(Consistency)v 隔离性(Isol

5、ation)v 持续性(Durability )7.2 数据库恢复 v 故障是不可避免的 系统故障 人为故障v 数据库的恢复把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态) 故障的种类v 1. 事务内部的故障 v 2. 系统故障 v 3. 介质故障 1. 事务内部故障v 事务内部的故障 n 有的是预期的,在程序中可以预先估计到的,由事务程序加入判断和ROLLBACK 语句进行处理。 n 有的是非预期的 v 事务内部更多的故障是非预期的,是不能由应用程序处理的。 n 运算溢出 n 并发事务发生死锁而被选中撤销该事务 n 违反了某些完整性限制等 以后,事务故障仅指这类非预期的

6、故障v 事务故障的恢复:撤消事务(UNDO)2. 系统故障 v 系统故障是指引起系统停止运转随之要求重新启动的任何事件。v 原因:硬件故障(如CPU故障)、软件故障(如操作系统故障)、突然断电等。v 特点: 整个系统的正常运行突然被破坏 所有正在运行的事务都非正常终止 不破坏数据库 内存中数据库缓冲区的信息全部丢失系统故障的恢复 v 发生系统故障时,事务未提交 恢复策略:强行撤消(UNDO)所有未完成事务v 发生系统故障时,事务已提交,但缓冲区中的信息尚未完全写回到磁盘上。 恢复策略:重做(REDO)所有已提交的事务3. 介质故障 v 介质故障 称为硬故障,指外存故障 磁盘损坏 磁头碰撞 瞬时

7、强磁场干扰 计算机病毒 介质故障的恢复 (1)重装转储的备份副本到新的磁盘,使数据库恢复到转储时的一致状态; (2)在日志中找出转储后所有已提交的事务; (3)对这些已提交的事务进行REDO处理,即子系统撤消所有未完成事务,对所有已提交的事务进行重做。 数据库恢复技术 v 恢复操作的基本原理:冗余使用存储在另一个系统中的“冗余”数据以及事先建立起来的日志文件,重新构建数据库中已经被损坏的数据,或者修复已经不正确的数据。 v 恢复机制涉及的关键问题 如何建立冗余数据n 数据转储n 登记日志文件 如何利用这些冗余数据实施数据库恢复 数据库恢复技术v 1数据转储技术v 2登记日志文件v 3使用多副本

8、的恢复技术1. 数据转储技术 v 所谓数据转储,是指由DBA(数据库管理员)定期的将整个数据库中的内容复制到另一个存储设备或另一个磁盘上去,这些转储的副本称为后备副本或后援副本。v 如何使用 数据库遭到破坏后可以将后备副本重新装入 重装后备副本只能将数据库恢复到最近转储时的状态转储方法 (1 )从转储的运行状态,可分为静态转储与动态转储 (2 )从转储的进行方式,可分为海量转储与增量转储 静态转储 v 在系统中无运行事务时进行的转储操作 v 转储开始时数据库处于一致性状态 v 转储期间不允许对数据库的任何存取、修改操作 v 得到的一定是一个数据一致性的副本 v 优点:实现简单,可保证副本与数据

9、库的一致性 v 缺点:降低了数据库的可用性,效率较低 转储必须等待正运行的用户事务结束 新的事务必须等转储结束 动态转储 v 转储操作与用户事务并发进行 v 转储期间允许对数据库进行存取或修改 v 优点 不用等待正在运行的用户事务结束 不会影响新事务的运行 v 动态转储的缺点 不能保证副本中的数据正确有效 v 利用动态转储得到的副本进行故障恢复 需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件 后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态 (2 )海量转储与增量转储 v 海量转储: 每次转储全部数据库 v 增量转储: 只转储上次转储后更新过的数据 v 海量转储与增量

10、转储比较 从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便 但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用、更有效 2. 登记日志文件 v 什么是日志文件 日志文件(log) 是用来记录事务对数据库的更新操作的文件v 日志文件的格式 n 以记录为单位的日志文件 n 以数据块为单位的日志文件 v 以记录为单位的日志文件内容 各个事务的开始标记(BEGIN TRANSACTION) 各个事务的结束标记(COMMIT或ROLLBACK) 各个事务的所有更新操作v 具体来说,每个日志记录的格式为:(事务标识,操作类型,操作对象,前像,后像)日志文件的格式和内容(续)v 以记录为单

11、位的日志文件,每条日志记录的内容 事务标识(标明是哪个事务) 操作类型(插入、删除或修改) 操作对象(记录内部标识) 前像(对插入操作而言,此项为空值) 后像(对删除操作而言, 此项为空值) v 举例说明日志文件记录,对于下面每次操作,在日志文件中写一个记录: (1)事务T开始,日志记录为(T,start, , , ) (2)事务T修改对象A,日志记录为(T,update,A,前像,后像) (3)事务T插入对象A,日志记录为(T,insert,A, ,后像) (4)事务T删除对象A,日志记录为(T,delete,A,前像, ) (5)事务T提交,日志记录为(T,commit, , , ) (6

12、)事务T回滚,日志记录为(T,rollback, , , )v 以数据块为单位的日志文件,每条日志记录的内容 事务标识(标明是那个事务) 被更新的数据块 日志文件的作用 v (1)当数据库发生的是事务故障和系统故障时,直接根据日志文件对相应的数据库操作进行UNDO和REDO操作即可;v (2)当发生介质故障时, 如果采用的是动态转储方式,则将后备副本和日志文件结合起来才能有效恢复数据库; 如果采用的是静态转储方式,也可建立日志文件,二者结合完成数据库的恢复。使用后备副本和日志文件恢复数据库 登记日志文件 v 基本原则 (1 )登记的次序必须严格按照并发事务执行的时间次序; (2 )必须先写日志

13、文件,后写数据库,并且日志文件不能和数据库放在同一磁盘上,要经常把它复制到磁带上。 3使用多副本的恢复技术v 如果系统中有多个数据库副本,并且各个副本不会因故障而同时失效,则称这些副本具有独立的失效模式。v 优点:用户可以利用这些独立副本互为备份,很方便地恢复数据库v 缺点:硬件和系统的代价比较高 恢复策略 1. 事务故障的恢复2. 系统故障的恢复 3. 介质故障的恢复 1. 事务故障的恢复 v 事务故障:事务在运行至正常结束提交前被终止 v 恢复方法 应该撤消(UNDO )该事务对数据库的一切更新 v 事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预 v (1)反向扫描日志文件,

14、查找该事务的更新操作;v (2)对查到更新操作的事务执行逆操作。即将日志记录中“更新前的值”写入数据库 若是UPDATE操作,则将日志文件“前像”写入数据库; 若是INSERT操作,则将数据对象删去; 若是DELETE操作,则做插入操作,插入数据对象的值为日志记录中“前像”;v (3)继续反向扫描日志文件,找出其他的更新操作,并做同样处理。直至读到该事务的Start标记为止。2. 系统故障的恢复 v 系统故障造成数据库不一致状态的原因 未完成事务对数据库的更新已写入数据库 已提交事务对数据库的更新还留在缓冲区没来得及写入数据库v 恢复方法 1. Undo 故障发生时未完成的事务 2. Redo

15、 已完成的事务v 系统故障的恢复由系统在重新启动时自动完成,不需要用户干预系统故障的恢复步骤(1)正向扫描日志文件(即从头扫描日志文件) 重做(REDO) 队列: 在故障发生前已经提交的事务 这些事务既有BEGIN TRANSACTION 记录,也有COMMIT 记录 撤销 (Undo)队列:故障发生时尚未完成的事务 这些事务只有BEGIN TRANSACTION 记录,无相应的COMMIT 记录 (2 )对重做队列事务进行重做(REDO) 处理 n 依据登入日志文件中次序,重新执行登记的操作; (3 )对撤销队列事务进行撤销(UNDO) 处理 n 依据登入日志文件中相反次序,对每个更新操作执

16、行逆操作n 即将日志记录中“更新前的值”写入数据库 v 在上述步骤(1)中,扫描所有的日志文件需要耗费大量的时间,重做的操作中很多是不必要的,故引入了一种称为检查点的恢复技术。该技术是在日志文件中增加了一类新的记录,即检查点(Checkpoint)记录。v 检查点记录的内容包括: 建立检查点时刻正在执行的事务清单; 这些事务最近一个日志记录的地址。v 设置检查点时要执行下列动作: 把仍保留在日志缓冲区中的内容写到日志文件中; 在日志文件中写一个“检查点记录”; 把数据库缓冲区的内容写到数据库; 把日志文件中检查点记录的地址写到“重新启动文件”中。3. 介质故障的恢复 v 具体措施: (1)检查

17、磁盘的毁坏程度,必要时更换磁盘; (2)然后修复系统(包括操作系统和DBMS),重新启动系统; (3)重新装入最近的后备副本,使数据库恢复到最近一次转储时的一致性状态; (4)重新装入有关的日志文件副本,对日志记录中转储点之后的已提交的事务进行REDO操作,将数据库恢复到故障前某一时刻的一致状态。 7.3 并发控制 v 问题的产生 多用户数据库系统的存在 允许多个用户同时使用的数据库系统 n 飞机定票数据库系统 n 银行数据库系统 特点:在同一时刻并发运行的事务数可达数百个 v 不同的多事务执行方式 (1) 事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 不能

18、充分利用系统资源,发挥数据库共享资源的特点 (2) 交叉并发方式(Interleaved Concurrency ) 在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行 单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的空闲时间,提高系统的效率 (3) 同时并发方式(simultaneous concurrency ) 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行 v 事务并发执行带来的问题 会产生多个事务同时存取同一数据的情况 可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性 并发操作引发的

19、问题 v 并发操作带来的数据不一致性 1 丢失更新(Lost Update ) 2 读“ 脏” 数据(Dirty Read ) 3 不可重复读(Non-repeatable Read ) v 记号 R(x): 读数据x W(x): 写数据x 1. 丢失更新 v (1)甲事务T1读取存款余额R=5000元;v (2)乙事务T2想在网上购物,读取存款余额5000元;v (3)甲事务T1由于需要取走1000元,则系统修改存款余额R=R-1000=5000-1000=4000,并将存款余额4000元写回数据库;v (4)乙事务网上购物转帐支取300元,则系统修改存款余额R= R-300=5000-30

20、0=4700,并将存款余额4700元写回数据库。v 两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的更新被丢失。2. 读“脏”数据v (1)甲事务T1读取存款余额R=5000元;v (2)甲事务T1由于需要取走1000元,则系统修改存款余额R=R-1000=5000-1000=4000,并将存款余额4000元写回数据库,此时取款的事务还未提交;v (3)乙事务T2由于某种需要,读取存款余额为4000元;v (4)因为某种原因,甲事务的操作要撤销,此时对甲事务执行ROLLBACK操作,该帐户余额恢复为R=5000元。 读“ 脏” 数据是指: n 事务T1 修改

21、某一数据,并将其写回磁盘 n 事务T2 读取同一数据后,T1 由于某种原因被撤销 n 这时T1 已修改过的数据恢复原值,T2 读到的数据就与数据库中的数据不一致 n T2 读到的数据就为“ 脏” 数据,即不正确的数据 3. 不可重复读 v (1)甲事务T1读取存款余额R=5000元;v (2)乙事务T2想在网上购物,读取存款余额5000元;v (3)乙事务网上购物转帐支取300元,则系统修改存款余额R= R-300=5000-300=4700,并将存款余额4700元写回数据库。v (4)甲事务T1再次读取帐户余额进行验证时发现前后两次读取值发生了变化,无法读取前一次读取的结果。v 不可重复读是

22、指事务T1读取数据后,事务T2 执行更新操作,使T1无法再现前一次读取结果。 v 不可重复读包括三种情况: 事务T1 读取某一数据后,事务T2对其做了修改 ,当事务T1 再次读该数据时,得到与前一次不同的值 n T1读取R=5000进行运算n T2读取同一数据R,对其进行修改后将R=4700写回数据库。n T1为了对读取值校对重读R,R已为4700,与第一次读取值不一致 v 当事务T1按照一定条件从数据库中读取某些纪录后,事务T2删除了其中的某些纪录,结果当事务T1再次按照同样条件读取该数据时,发现某些纪录已经不存在了;v 当事务T1按照一定条件从数据库中读取某些纪录后,事务T2插入了一些纪录

23、,结果当事务T1再次按照同样条件读取该数据时,发现多出了某些数据。 并发操作引发的问题v 分析:v 从事务的ACID性质考虑,产生上述三个问题的原因在于并发操作破坏了事务的隔离性。v 并发控制的任务就是要用正确的调度方式控制并发的事务正确地执行,使多个事务互不干扰,以避免造成数据库中的数据不一致。v 当多个事务并发时,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略为可串行化的调度。 调度的可串行性 v DBMS 对并发事务不同的调度可能会产生不同的结果 v 什么样的调度是正确的? v 可串行化(Serializable) 调度 n 多个事务的并发执行是正确的,当且仅当

24、其结果与按某一次序串行地执行这些事务时的结果相同 v 可串行性(Serializability) 是并发事务正确调度的准则 一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度 【例7-1】有两个事务T1和T2,分别包含如下操作: T1:Read(A) T2:Read(B) A:=A-2 B:=B-2 Write(A) Write(B) Read(B) B:=B+2 Write(B) 现给出对这两个事务不同的调度策略 串行调度, 正确的调度 串行调度, 正确的调度 可串行化调度,正确的调度 不可串行化调度,错误的调度 调度的可串行性 v 为了保证调度的可串行性,采用技术 封锁(Lock

25、ing) 方法 时间戳(Timestamp) 乐观控制法 v 商用的DBMS 一般都采用封锁方法 7.4 基于封锁的并发控制技术 封锁 v 封锁就是事务T 在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁 v 加锁后事务T 就对该数据对象有了一定的控制,在事务T 释放它的锁之前,其它的事务不能更新此数据对象。 基本封锁类型 v 一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。 v 基本封锁类型 排它锁(Exclusive Locks ,简记为X 锁) 共享锁(Share Locks ,简记为S 锁) 排它锁 v 排它锁又称为写锁 v 若事务T 对数据对象

26、A 加上X 锁,则只允许T 读取和修改A , 其它任何事务都不能再对A 加任何类型的锁,直到T 释放A 上的锁 v 保证其他事务在T 释放A 上的锁之前不能再读取和修改A 共享锁 v 共享锁又称为读锁 v 若事务T 对数据对象A 加上S 锁,则其它事务只能再对A 加S 锁,而不能加X 锁,直到T 释放A 上的S 锁 v 保证其他事务可以读A ,但在T 释放A 上的S 锁之前不能对A 做任何修改 锁的相容矩阵 在锁的相容矩阵中: v 最左边一列表示事务T1 已经获得的数据对象上的锁的类型,其中横线表示没有加锁。 v 最上面一行表示另一事务T2 对同一数据对象发出的封锁请求。 v T2 的封锁请求

27、能否被满足用矩阵中的Y 和N 表示 Y 表示事务T2 的封锁要求与T1 已持有的锁相容,封锁请求可以满足 N 表示T2 的封锁请求与T1 已持有的锁冲突,T2 的请求被拒绝 如何利用封锁机制解决不可串行化调度? 使用封锁机制解决数据不一致问题 封锁协议v 在运用封锁方法,对数据对象加锁时,需要约定一些规则,如何时申请加锁、申请锁的类型、持锁时间、何时释放封锁等,我们称这些规则为封锁协议(Locking Protocol)。v 对封锁方式规定不同的规则,就形成了各种不同的封锁协议,三级封锁协议分别在不同程度上解决了数据不一致性问题。v 1. 一级封锁协议v 2. 二级封锁协议v 3. 三级封锁协

28、议1. 一级封锁协议v 一级封锁协议是:事务T在修改数据A之前,必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。v 一级封锁协议可防止“丢失修改”所产生的数据不一致性的问题,并保证事务T是可恢复的。 如何使用一级封锁协议解决“丢失更新”问题2. 二级封锁协议v 二级封锁协议在一级封锁协议的基础上,加上了事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。v 二级封锁协议除防止了丢失修改,还可进一步防止读“脏”数据。 如何使用二级封锁协议解决读“脏”数据问题?3. 三级封锁协议v 三级封锁协议是:在一级封锁协议的基础上加上事务T

29、在读取数据R之前必须先对其加S锁,直到事务结束才释放。v 三级封锁协议可进一步防止不可重复读的问题。 前面所讲的不可重复读问题 n T1读取R=5000进行运算n T2读取同一数据R,对其进行修改后将R=4700写回数据库。n T1为了对读取值校对重读R,R已为200,与第一次读取值不一致 如何使用三级封锁协议解决不可重复读问题? 两段锁协议 v 三级封锁协议可以防止并发执行中出现的三类问题,但是,并不能保证并发执行一定是可串行化的。 v 两段封锁协议(Two-Phase Locking ,简称2PL) 是最常用的一种封锁协议,理论上证明使用两段封锁协议产生的是可串行化调度。 v 两段锁协议是

30、将所有事务的加锁和解锁分成两个阶段: (1)获得封锁,也称为扩展阶段,在该阶段,事务可以获得任何数据项上的任何类型的锁; (2)释放封锁,也称为收缩阶段,在此阶段,事务可以释放任何数据项上的任何类型的锁,但一旦释放一个锁之后,事务不能再获得任何其他加锁。例两个事务T1,T2:T1:lock(A)lock(B)lock(C)unlock(B) unlock(C) unlock(A)T2:lock(A)unlock(A) lock(B) lock(C) unlock(C) unlock(B)T1遵守两段锁协议,T2不遵守两段锁协议。 对于T1,T2遵守两段锁协议的并发执行v 两个事务T1和T2均遵

31、守两段锁协议,其执行结果为A=60,B=110,跟按照T1T2顺序的串行执行的结果相同,因此对这两个事务的并发调度是可串行化的,是正确的。 v 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。 若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的 若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议 遵守两段锁协议的事务可能发生死锁 !7.5 死锁 v 事务T1 封锁了数据R1v T2 封锁了数据R2v T1 又请求封锁R2 ,因T2 已封锁了R2 ,于是T1 等待T2 释放R2 上的锁 v 接着T2 又申请封锁R1 ,因T1 已封锁了R1 ,T2

32、也只能等待T1 释放R1 上的锁 v 这样T1 在等待T2 ,而T2 又在等待T1 ,T1 和T2 两个事务永远不能结束,形成死锁 死锁预防 v 产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。 v 预防死锁的发生就是要破坏产生死锁的条件 OS 中预防死锁的方法 v 一次封锁法 v 顺序封锁法 (1) 一次封锁法 v 要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行 v 存在的问题 降低系统并发度 难于事先精确确定封锁对象 (2) 顺序封锁法 v 顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺

33、序实行封锁。 v 顺序封锁法存在的问题 维护成本 数据库系统中封锁的数据对象极多,并且在不断地变化。 难以实现:很难事先确定每一个事务要封锁哪些对象。 v 结论 在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点 DBMS 在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法,也可以修改封锁协议从而避免死锁。 v 对于修改封锁协议的方法,这里只简单的讨论一种方案,该方案提出了两种策略: 等待-死亡(Wait-Die)策略 伤害-等待(Wound-Wait)策略 v 每个事务开始运行时,赋予一个唯一的、随时间增长的整数,称为时间标记(Time Stamp ,简称ts )或者时间戳,该事件

34、戳是唯一的。 v 设有两个事务T1 和T2 ,如果ts (T1 ) ts (T2 ),即T1 早于T2 ,称T1 比T2“ 年老” ,或者称T2 比T1“ 年轻” 。 (1)等待-死亡策略 v 如果T1比T2年老,则T1等待;否则,T1死亡,即事务T1回滚,并且隔了一段时间后,仍用它原有的时间标记重新运行。即按照如下算法执行:If ts(T1)ts(T2) Then T1 waits;Else Rollback T2; /*die*/Restart T2with the same ts(T2); 死锁的检测和处理 v 死锁的诊断n 超时法n 事务等待图法 (1) 超时法 v 如果一个事务的等待

35、时间超过了规定的时限,就认为发生了死锁 v 优点:实现简单 v 缺点 有可能误判死锁 时限若设置得太长,死锁发生后不能及时发现 (2) 等待图法 v 用事务等待图动态反映所有事务的等待情况 事务等待图是一个有向图G=(T ,U) T 为结点的集合,每个结点表示正运行的事务 U 为边的集合,每条边表示事务等待的情况 若T1 等待T2 ,则T1 ,T2 之间划一条有向边,从T1 指向T2 v 并发控制子系统周期性地(比如每隔数秒)生成事务等待图,检测事务。如果发现图中存在回路,则表示系统中出现了死锁。 v 解除死锁 选择一个处理死锁代价最小的事务,将其撤消 释放此事务持有的所有的锁,使其它事务能继

36、续运行下去 饥饿v 在并发事务执行过程中,有可能存在一个事务序列,其中每个事务都申请对某数据项加S锁,且每个事务在授权加锁后一小段时间内释放封锁,此时若有另一个事务T2也想对该数据对象加X锁,则永远轮不上封锁的机会。这种现象称为“饥饿”(Starvation)或者“饿死”。v 当发生“饥饿”时,系统中的其他事务可以正常地继续进行,而有一个事务却在一个不确定的时间段内不能继续进行。解决“饥饿”的问题v 如果封锁项的等待模式不公平,给某些事务赋予了比其他事务更高的优先权,就会发生饥饿,解决的办法: 使用一个公平的等待模式 允许发生“饥饿”的事务有比其他事务更高的优先权 v 若饥饿因为受害者选择的算

37、法而发生,如果该算法总是重复地选择同一个事务作为受害者,那么就会使这个事务总是被撤消,处于“饿死”状态,解决的办法: 改进算法为那些撤消多次的事务采用更高的优先权,从而避免这个问题。本章小结 v 事务 v 故障及其回复策略 v 恢复技术 v 并发控制带来数据的不一致性 v 调度的可串行性 v 封锁 v 封锁协议 v 死锁 作业:P182页 7.13数据库原理及应用模拟试卷七一、填空题(每空2分,共20分)1数据库系统的核心是_,用来管理和维护数据库的系统软件。2在数据库的外模式、模式和内模式三级模式结构中,_之间的映像实现了程序与数据的逻辑独立性。3模型就是对现实世界的抽象,数据模型是模型的一

38、种,是现实世界数据特征的抽象,数据模型通常由_、数据操作和数据的约束条件三个要素组成。4在图书系统中,约定一本书可以被多个读者借阅,一个读者可以借阅多本书,图书与读者两个实体之间的联系类型是_。5在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉,这种连接叫_。6关系模型的完整性是指数据的精确性和可靠性,它分为三类:实体完整性、参照完整性和用户定义的完整性,其中参照完整性是通过两个关系的_来实现的。7在SQL Server 2021中,_数据库是SQL Server实例上创建所有数据库的模板,用户创建数据库时,系统将model数据库中的内存复制过来以便创建新的

39、数据库。8SQL Server 2021数据库的数据文件组成中,_文件用来存放用户的数据,并且在一个数据库中只有一个。9创建数据表时,可以为数据表设置数据完整性约束,其中实体完整性是通过_和Unique关键字来实现的。10.有数据表:学生(学号,姓名,性别,出生日期),查询学生的学号、姓名和年龄的SQL语句是:_。二、选择题(每题2分,共20分)1在数据库系统中,我们把满足以下两个条件的基本层次联系的集合称为层次模型。( )(1)有一个结点无双亲 (2)其他结点无双亲 (3)有且仅有一个结点无双亲 (4)其他结点有且仅有一个双亲 (5)允许其他结点有多个双亲A(1)和(2) B(3)和(4)

40、C(3)和(5) D(2)和(5)2下列实体类型的联系中,属于一对一联系的是( )A教研室对教师的所属联系 B父亲对孩子的亲生联系C省对省会的所属联系 D供应商与工程项目的供货联系3下面对关系的叙述中,哪个是不正确的?( )A关系中的每个属性是不可分解的B在关系中元组的顺序是无关紧要的C任意的一个二维表都是一个关系D每个关系只有一种记录类型4当实体中有多个属性可作为键而选定其中一个时,称其为该实体的( )。A外部键 B候选键 C主键 D. 主属性5在关系数据库系统中,当关系的存储结构发生变化,而用户程序不发生改变,则称为( )A数据的物理独立性 B数据的逻辑独立性C数据的位置独立性 D数据的存

41、储独立性6SQL语言中,实现数据检索的语句是( )。ASELECT BINSERT C. UPDATE DFIND7SQL是一种关系数据库语言,集( )功能于一体。A. 数据定义、数据操作、数据安全B. 数据完整性、数据安全、数据并发控制C数据定义、数据操作、数据控制D数据查询、数据更新、数据输入输出8.在数据库系统中,当数据库的模式改变时,用户程序可以不做改变,这是数据的( )。A位置独立性 B存储独立性 C逻辑独立性 D物理独立性9. 有“学生选课课程”关系数据库,其中学生(学号,姓名,性别,出生日期,系名)主码是学号课程(课程号,课程名,学时)主码是课程号选课(学号,课程号,成绩)主码是学号和课程号下列关于保持数据库完整性的叙述中,哪一条是不正确的?( )A向关系选课插入元组时,学号和课程号都不能空值(NULL)B可以任意删除关系学生中的元组C向任何一个关系插入元组时,必须保证该关系主码值的唯一性D可以任意删除关系选课中的元组10、以下有关SELECT语句的叙述中错误的是( )。ASELECT语句中可以使用别名BSELECT语句中只能包含表中的列及其构成的表达式CSELECT语句规定了结果集中的顺序D如果FORM短语引用的两个表有同名的列,则SELECT短语引用它们时必须使用表名前缀加以限定三、问答题(每题5分,共20分)

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服