关于自考的考前复习资料,已经排版好了,可以直接打印
锁协议除防止了丢失修改,还可进一步防止读“脏”数据。在二级封锁协议中,由于读完数据后立即释放 S 锁,所以它不能保证可重复读。 在三级封锁协议中,无论是读数据还是写数据都加长锁,即都要到事务结束时才释放封锁。所以三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。
12 、如果事务 T1 封锁了数据 R ,事务 T2 又请求封锁 R ,于是 T2 18 、首先以两个并发事务 T1 和 T2 为例,存在多个并发事务的情形可以类推。 根据可串行化定义可知,事务不可串行化只可能发生在下列两种情况: 1 .事务 T1 写某个数据对象 A , T2 读或写 A ; 2 .事务 T1 读或写某个数据对象 A , T2 写 A 。下面称 A 为潜在冲突对象。设 T1 和 T2 访问的潜在冲突的公共对象为 {A1, A2, , An} 。不失一般性,假设这组潜在冲突对象中 X={A1,A2, , Ai} 均等待。 T3 也请求封锁 R ,当 T1 释放了 R 上的封锁之后系统首先批准了 T3 的请求, T2 仍然等待。然后 T4 又请求封锁 R ,当 T3 释放了 R 上的封锁之后系统又批准了 T4 的请求 T2 有可能永远等待,这就是活锁的情形。活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。 如果事务 T1 封锁了数据 R1 , T2 封锁了数据 R2 ,然后 T1 又请求封锁 R2 ,因 T2 已封锁了 R2 ,于是 T1 等待 T2 释放 R2 上的锁。接着 T2 又申请封锁 R1 ,因 T1 已封锁了 R1 , T2 也只能等待 T1 释放 R1 上的锁。这样就出现了 T1 在等待 T2 ,而 T2 又在等待 T1 的局面, T1 和 T2 两个事务永远不能结束,形成死锁。
13 、活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。 避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
14 、在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求已被其他事务封锁的数据加锁,从而出现死等待。防止死锁的发生其实就是要破坏产生死锁的条件。预防死锁通常有两种方法:( 1 )一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。( 2 )顺序封锁法预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 15 、数据库系统一般采用允许死锁发生, DBMS 检测到死锁后加以解除的方法。 DBMS 中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。 超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。若时限设置得太长,又不能及时发现死锁发生。 DBMS 并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。当然,对撤销的事务所执行的数据修改操作必须加以恢复。
16 、可串行化( Serializable )的调度是正确的调度。可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度。
17 、两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。 ? 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁; ? 在释放一个封锁之后,事务不再申请和获得任何其他封锁。 “两段”的含义是,事务分为两个阶段:第一阶段是获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务释放已经获得的锁,但是不能再申请任何锁。
符合情况 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 )对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。
19 、引进意向锁是为了提高封锁子系统的效率。该封锁子系统支持多种封锁粒度。原因是:在多粒度封锁方法中一个数据对象可能以两种方式加锁—显式封锁和隐式封锁(有关概念参见《概论》 8.7.1 )。因此系统在对某一数据对象加锁时不仅要检查该数据对象上有无(显式和隐式)封锁与之冲突;还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突;显然,这样的检查方法效率很低。为此引进了意向锁。 意向锁的含义是:对任一结点加锁时,必须先对它的上层结点加意向锁。 例如事务 T 要对某个元组加 X 锁,则首先要对关系和数据库加 IX 锁。换言之,对关系和数据库加 IX 锁,表示它的后裔结点—某个元组拟(意向)加 X 锁。引进意向锁后,系统对某一数据对象加锁时不必逐个检查与下一级结点的封锁冲突了。例如,事务 T 要对关系 R 加 X 锁时,系统只要检查根结点数据库和 R 本身是否已加了不相容的锁(如发现已经加了 IX ,则与 X 冲突),而不再需要搜索和检查 R 中的每一个元组是否加了 X 锁或 S 锁。
20 、 IS 锁如果对一个数据对象加 IS 锁,表示它的后裔结点拟(意向)加 S 锁。例如,要对某个元组加 S 锁,则要首先对关系和数据库加 IS 锁 IX 锁如果对一个数据对象加 IX 锁,表示它的后裔结点拟(意向)加 X 锁。例如,要对某个元组加 X 锁,则要首先对关系和数据库加 IX 锁。 SIX 锁如果对一个数据对象加 SIX 锁,表示对它加 S 锁,再加 IX 锁,即 SIX = S + IX 。
1 . 数据库的安全性是指保护数据库以防止不合法的使用所造成的 _______ 、 _______ 或 ______ 。 2 . 什么是数据库的安全性?
3 . 数据库安全性和计算机系统的安全性有什么关系?
4 . 计算机系统有三类安全性问题,即 ________ 、 _________ 和 ________ 。
5 . 用户标识和鉴别的方法有很多种,而且在一个系统中往往是多种方法并举,以获得更强的安全性。
常用的方法有通过输入 ________ 和 ________ 来鉴别用户。 6 . 试述可信计算机系统评测标准的情况,试述 TDI/TCSEC 标准的基本内容。