数据库练习题

导读:在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求已被其他事务封锁的数据加锁,预防死锁通常有两种方法:(1)一次封锁法要求每个事务必须一次将所有要使用的数据全,(2)顺序封锁法预先对数据对象规定一个封锁顺序,数据库系统一般采用允许死锁发生,对撤销的事务所执行的数据修改操作必须加以恢复,两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁,?在对任何数据进行读、写操

数据库练习题

一旦释放就批准申请队列中第一个事务获得锁。 14 .请给出预防死锁的若干方法。 (填空题) 答案:

在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求已被其他事务封锁的数据加锁,从而出现死等待。防止死锁的发生其实就是要破坏产生死锁的条件。预防死锁通常有两种方法:(1)一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。(2)顺序封锁法预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。

15 .请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁? (填空题) 答案:

数据库系统一般采用允许死锁发生,DBMS检测到死锁后加以解除的方法。 DBMS中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。 超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。若时限设置得太长,又不能及时发现死锁发生。 DBMS并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。当然,对撤销的事务所执行的数据修改操作必须加以恢复。 16 .什么样的并发调度是正确的调度? (填空题) 答案:

可串行化(Serializable)的调度是正确的调度。可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度。

17 .试述两段锁协议的概念。 (填空题) 答案:

两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。 ? 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁; ? 在释放一个封锁之后,事务不再申请和获得任何其他封锁。 “两段”的含义是,事务分为两个阶段:第一阶段是获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务释放已经获得的锁,但是不能再申请任何锁。

18 .试证明,若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的。 (填空题) 答案:

首先以两个并发事务T1和T2为例,存在多个并发事务的情形可以类推。 根据可串行化定义可知,事务不可串行化只可能发生在下列两种情况: 1.事务T1写某个数据对象A,T2读或写A; 2.事务T1读或写某个数据对象A,T2写A。下面称A为潜在冲突对象。设T1和T2访问的潜在冲突的公共对象为{A1, A2, ?, An}。不失一般性,假设这组潜在冲突对象中X={A1,A2, ?, Ai}均符合情况1。 Y={Ai+1, ?,An}符合所情况2。 ?x?X,T1需要Xlock x ① T2需要Slock x或Xlockx ② (1) 如果操作①先执行,则T1获得锁,T2等待由于遵守两段锁协议,T1在成功获得X和Y中全部对象及非潜在冲突对象的锁后,才会释放锁这时如果?w?X或Y,T2已获得w的锁,则出现死锁否则,T1在对X、Y中对象全部处理完毕后,T2才能执行这相当于按T1、T2的顺序串行执行根据可串行化定义,T1和T2的调度是可串行化的。(2) 操作②先执行的情况与(1)对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。

46

19 .为什么要引进意向锁? 意向锁的含义是什么? (填空题) 答案:

引进意向锁是为了提高封锁子系统的效率。该封锁子系统支持多种封锁粒度。原因是:在多粒度封锁方法中一个数据对象可能以两种方式加锁—显式封锁和隐式封锁(有关概念参见《概论》8.7.1)。因此系统在对某一数据对象加锁时不仅要检查该数据对象上有无(显式和隐式)封锁与之冲突;还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突;显然,这样的检查方法效率很低。为此引进了意向锁。 意向锁的含义是:对任一结点加锁时,必须先对它的上层结点加意向锁。 例如事务T要对某个元组加X锁,则首先要对关系和数据库加IX锁。换言之,对关系和数据库加IX锁,表示它的后裔结点—某个元组拟(意向)加X锁。引进意向锁后,系统对某一数据对象加锁时不必逐个检查与下一级结点的封锁冲突了。例如,事务T要对关系R加X锁时,系统只要检查根结点数据库和R本身是否已加了不相容的锁(如发现已经加了IX,则与X冲突),而不再需要搜索和检查R中的每一个元组是否加了X锁或S锁。

20 .试述常用的意向锁:IS锁,IX锁,SIX锁,给出这些锁的相容矩阵。 (填空题) 答案:

IS锁如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。例如,要对某个元组加S锁,则要首先对关系和数据库加IS锁 IX锁如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。例如,要对某个元组加X锁,则要首先对关系和数据库加IX锁。 SIX锁如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX。

47

五星文库wxphp.com包含总结汇报、党团工作、旅游景点、人文社科、工作范文、资格考试、办公文档、专业文献、经管营销以及数据库练习题等内容。

本文共10页1<<78910