数据库原理试题库 联系客服

发布时间 : 星期一 文章数据库原理试题库更新完毕开始阅读497329ee783e0912a2162ae1

故障的恢复?系统故障的恢复?介质故障恢复?)

答:数据库故障有:事务故障、系统故障、介质故障和计算机病毒。

1)事务故障的恢复:事务故障的恢复是由 DBMS自动完成的,对用户是透明的。 DBMS执行恢复步骤是:

(1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。 (2)对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据库。 (3)继续反向扫描日志文件,做同样处理。

(4)如此处理下去,直至读到此事务的开始标记,该事务故障的恢复就完成了。 2)系统故障的恢复:

系统故障可能会造成数据库处于不一致状态:

一是未完成事务对数据库的更新可能已写入数据库;

二是已提交事务对数据库的更新可能还留在缓冲区,没来得及写入数据库。

因此恢复操作就是要撤销 (UNDO)故障发生时未完成的事务,重做(REDO)已完成的事务。

系统的恢复步骤是:

(1)正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。

(2)对撤销队列中的各个事务进行UNDO处理。

进行 UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”(Before Im年龄)写入数据库。 (3)对重做队列中的各个事务进行REDO处理。

进行 REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作。即将日志记录中“更新后的值”(After Im年龄)写入数据库。 3) 介质故障的恢复:

介质故障是最严重的一种故障。

恢复方法是重装数据库,然后重做已完成的事务。具体过程是:

(1)DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态。

(2)DBA装入转储结束时刻的日志文件副本

(3)DBA启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。 73. 什么是检查点的记录?检查点的记录包含哪些检查点的记录? 74. 具有检查点的恢复技术有什么优点?

答:利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要 REDO,哪些事务需要UNDO。一般来说,需要检查所有日志记录。这样做有两个问题: 一是搜索整个日志将耗费大量的时间。

二是很多需要 REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,恢复子系统又重新执行了这些操作,浪费了大量时间。 检查点技术就是为了解决这些问题。 75. 试述使用检查点方法进行恢复的步骤。

41

答:① 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。

② 由该检查点记录得到检查点建立时刻所有正在执行的事务清单 ACTIVE-LIST。 这里建立两个事务队列 : · UNDO-LIST: 需要执行undo操作的事务集合; · REDO-LIST: 需要执行redo操作的事务集合;

把 ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。 ③ 从检查点开始正向扫描日志文件 · 如有新开始的事务 Ti,把Ti暂时放入UNDO-LIST队列; · 如有提交的事务 Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列,直到日志文件结束;

④ 对 UNDO-LIST中的每个事务执行UNDO操作, 对REDO-LIST中的每个事务执行REDO操作。

76. 什么是数据库镜像?它有什么用途?

答:数据库镜像即根据 DBA的要求,自动把整个数据库或者其中的部分关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS自动把更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性。 数据库镜像的用途有:

一是用于数据库恢复。当出现介质故障时,可由镜像磁盘继续提供使用,同时 DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。

二是提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排它锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。 77. 在数据库中为什么要并发控制?并发控制能保证事务的哪些特性? 答:数据库是共享资源,通常有许多个事务同时在运行。

当多个事务并发地存取数据库时就会产生同时读取和 /或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。

78. 并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?

答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读 “脏”数据。 (1)丢失修改(Lost Update)

两个事务 T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。

(2)不可重复读(Non-Repeatable Read)

不可重复读是指事务 T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。

(3)读“脏”数据(Dirty Read)

读 “脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。

42

避免不一致性的方法和技术就是并发控制。最常用的并发控制技术是封锁技术。

也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。 79. 什么是封锁?基本的封锁类型有几种?试述它们的含义。

答:封锁就是事务 T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。

封锁是实现并发控制的一个非常重要的技术。

基本的封锁类型有两种 : 排它锁(Exclusive Locks,简称X锁) 和共享锁(Share Locks,简称S锁)。

排它锁又称为写锁。若事务 T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。

共享锁又称为读锁。若事务 T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 80. 如何用封锁机制保证数据的一致性?

81. 什么是活锁?试述活锁的产生原因和解决方法。

答:活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。

避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。

82. 什么东西是死锁?请给出预防死锁的若干方法。

答:在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求已被其他事务封锁的数据加锁,从而出现死等待。

防止死锁的发生其实就是要破坏产生死锁的条件。预防死锁通常有两种方法: ( 1)一次封锁法

要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。 ( 2)顺序封锁法

预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 不过,预防死锁的策略不大适合数据库系统的特点。

83. 请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?

答:数据库系统一般采用允许死锁发生, DBMS检测到死锁后加以解除的方法。 DBMS中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。

超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。若时限设置得太长,又不能及时发现死锁发生。

DBMS并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。当

43

然,对撤销的事务所执行的数据修改操作必须加以恢复。 84. 什么样的并发调度是正确的调度?

答:可串行化( Serializable)的调度是正确的调度。

可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度。 85. 设T1、T2、T3是如下的三个事务,设A的初始值为0; T1:A:=A+2; T2:A:=A*2; T3:A:=A**2;

若这3个事务允许并发执行,则有多少种可能的正确结果,请一一列出来; 请给出一个可串行化的调度,并给出执行结果; 请给出一个非串行化的调度,并给出执行结果;

若这三个事务遵守两段锁协议,请给出一个不产生死锁的可串行化调度; 若这三个事务遵守两段锁协议,请给出一个产生死锁的调度; 答:有六种正确的结果: 1. T1—T2—T3 16 2. T1—T3—T2 8 3. T2—T1—T3 4 4. T2—T3—T1 2 5. T3—T1—T2 4 6. T3—T2—T1 2

86. 如今有三个事务的一个调度r3(B),r1(A),w3(B),r2(B),r2(A),w2(B),r1(B),w1(A),该调度是冲

突可串行化调度吗?为什么? 答:是,因为:

r3(B),r1(A),w3(B),r2(B),r2(A),w2(B),r1(B),w1(A) 等价:

r3(B), w3(B),r2(B), r2(A),w2(B), r1(B), r1(A),w1(A),

87. 试述两段锁协议的概念。

答:两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。 · 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁; · 在释放一个封锁之后,事务不再申请和获得任何其他封锁。 “两段”的含义是,事务分为两个阶段:

第一阶段是获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。

第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务释放已经获得的锁,但是不能再申请任何锁。

88. 举例说明为什么要引进意向锁? 意向锁的含义是什么?

答:引进意向锁是为了提高封锁子系统的效率。该封锁子系统支持多种封锁粒度。

44