精华内容
下载资源
问答
  • 数据库并发控制

    2014-02-16 14:35:28
    数据库并发控制       1. 在数据库中为什么要并发控制? 答:数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作...

    数据库并发控制

     

     

     

    1.  在数据库中为什么要并发控制?

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

     

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

    答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏’夕数据。 ( l )丢失修改(lost update ) 两个事务 Tl 和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了) Tl 提交的结果,导致 Tl 的修改被丢失。 ( 2 )不可重复读( Non 一 Repeatable Read ) 不可重复读是指事务 Tl 读取数据后,事务几执行更新操作,使 Tl 无法再现前一次读取结果。( 3 )读“脏”数据( Dirty Read ) 读“脏’夕数据是指事务 Tl 修改某一数据,并将其写回磁盘,事务几读取同一数据后, Tl 由于某种原因被撤销,这时 Tl 已修改过的数据恢复原值,几读到的数据就与数据库中的数据不一致,则几读到的数据就为“脏”数据,即不正确的数据。避免不一致性的方法和技术就是并发控制。最常用的技术是封锁技术。也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。

     

    3 .什么是封锁?基本的封锁类型有几种?试述它们的含义。

    答:封锁就是事务 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 做任何修改。

     

    4 .如何用封锁机制保证数据的一致性?

    答: DBMS 在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务 Tl 在对 A 进行修改之前先对 A 执行 xock ( A ) ,即对 A 加 x 锁。这样,当几请求对 A 加 x 锁时就被拒绝,几只能等待 Tl 释放 A 上的锁后才能获得对 A 的 x 锁,这时它读到的 A 是 Tl 更新后的值,再按此新的 A 值进行运算。这样就不会丢失 Tl 的更新。

    DBMS 按照一定的封锁协议,对并发操作进行控制,使得多个并发操作有序地执行,就可以避免丢失修改、不可重复读和读“脏’夕数据等数据不一致性。

     

    5 .什么是活锁?什么是死锁?

    答:

    如果事务 Tl 封锁了数据 R ,事务几又请求封锁 R ,于是几等待。几也请求封锁 R ,当 Tl 释放了 R 上的封锁之后系统首先批准了几的请求,几仍然等待。然后几又请求封锁 R ,当几释放了 R 上的封锁之后系统又批准了几的请求 … … 几有可能永远等待,这就是活锁的情形。活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。如果事务 Tl 封锁了数据 Rl ,几封锁了数据凡,然后 Tl 又请求封锁几,因几已封锁了几,于是 Tl 等待几释放几上的锁。接着几又申请封锁 Rl ,因 Tl 已封锁了 Rl ,几也只能等待 Tl 释放 Rl 上的锁。这样就出现了 Tl 在等待几,而几又在等待 T }的局面, T }和几两个事务永远不能结束,形成死锁。

     

    6 .试述活锁的产生原因和解决方法。

    答:活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。

     

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

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

     

     12 .什么样的并发调度是正确的调度?

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

     

    9 .设 Tl ,几,几是如下的 3 个事务:

    Tl :A : = A + 2 ;

    T2:A : = A * 2 ;

    T3:A : = A **2 ; ( A <-A*A)

    设 A 的初值为 0 。

    ( l )若这 3 个事务允许并行执行,则有多少可能的正确结果,请一一列举出来。

    答 :A 的最终结果可能有 2 、 4 、 8 、 16 。因为串行执行次序有 Tl T2T3、 Tl T3T2、T2T1T3、T2T3Tl 、T3T1T2、T3T2 Tl 。对应的执行结果是 16 、 8 · 4 · 2 · 4 · 2 。

    ( 2 )请给出一个可串行化的调度,并给出执行结果

    答:

     

    最后结果 A 为 16 ,是可串行化的调度。

    ( 3 )请给出一个非串行化的调度,并给出执行结果。

    答:

             

          最后结果 A 为 0 ,为非串行化的调度。

    ( 4 )若这 3 个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。

    答:

             

         ( 5 )若这 3 个事务都遵守两段锁协议,请给出一个产生死锁的调度。

    答:

             

     

    11.试证明,若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的。

    证明:首先以两个并发事务 Tl 和T2为例,存在多个并发事务的情形可以类推。根据可串行化定义可知,事务不可串行化只可能发生在下列两种情况:

     ( l )事务 Tl 写某个数据对象 A ,T2读或写 A ;

    ( 2 )事务 Tl 读或写某个数据对象 A ,T2写 A 。

    下面称 A 为潜在冲突对象。

    设 Tl 和T2访问的潜在冲突的公共对象为{A1,A2 … , An }。不失一般性,假设这组潜在冲突对象中 X =(A 1 , A2 , … , Ai }均符合情况 1 。 Y ={A i + 1 , … , An }符合所情况( 2 )。

    VX ∈ x , Tl 需要 XlockX ①

    T2 需要 Slockx 或 Xlockx ②

     1 )如果操作 ① 先执行,则 Tl 获得锁,T2等待

    由于遵守两段锁协议, Tl 在成功获得 x 和 Y 中全部对象及非潜在冲突对象的锁后,才会释放锁。

    这时如果存在 w ∈ x 或 Y ,T2已获得 w 的锁,则出现死锁;否则, Tl 在对 x 、 Y 中对象全部处理完毕后,T2才能执行。这相当于按 Tl 、T2的顺序串行执行,根据可串行化定义, Tl 和几的调度是可串行化的。

    2 )操作 ② 先执行的情况与( l )对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。证毕。

     

    12 .举例说明,对并发事务的一个调度是可串行化的,而这些并发事务不一定遵守两段锁协议。

    答:

     

    13 .为什么要引进意向锁?意向锁的含义是什么?

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

     

    14 .试述常用的意向锁: IS 锁、 ix 锁、 SIX 锁,给出这些锁的相容矩阵。

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

    IX 锁:如果对一个数据对象加 ix 锁,表示它的后裔结点拟(意向功口 X 锁。例如,要对某个元组加 X 锁,则要首先对关系和数据库加 ix 锁。

    SIX 锁:如果对一个数据对象加 SIX 锁,表示对它加 S 锁,再加 IX 锁,即 SIX = S + IX 。

    相容矩阵:

     

    15 .理解并解释下列术语的含义:封锁、活锁、死锁、排它锁、共享锁、并发事务的调度、可串行化的调度、两段锁协议。

    答:(略,已经在上面有关习题中解答)

     

    16 .试述你了解的某一个实际的 DBMS 产品的并发控制机制。

    答:(略,参见简单介绍了有关 Oracle 的并发控制机制。

    展开全文
  • 数据库并发控制知识点总结

    千次阅读 2016-08-28 13:13:40
    刚看到一篇很不错的数据库并发控制知识点总结,包括一部分可能会出现在笔试面试中的题目,适合对基础概念理解不透彻的我,就转载过来了。  原文地址:http://blog.csdn.net/xiangminjing/article/details/5922325...

    刚看到一篇很不错的数据库并发控制知识点总结,包括一部分可能会出现在笔试面试中的题目,适合对基础概念理解不透彻的我,就转载过来了。

     原文地址:http://blog.csdn.net/xiangminjing/article/details/5922325。

           

           

    数据库并发控制

     

     

     

    1.  在数据库中为什么要并发控制?

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

     

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

    答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏’夕数据。 ( l )丢失修改(lost update ) 两个事务 Tl 和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了) Tl 提交的结果,导致 Tl 的修改被丢失。 ( 2 )不可重复读( Non 一 Repeatable Read ) 不可重复读是指事务 Tl 读取数据后,事务几执行更新操作,使 Tl 无法再现前一次读取结果。( 3 )读“脏”数据( Dirty Read ) 读“脏’夕数据是指事务 Tl 修改某一数据,并将其写回磁盘,事务几读取同一数据后, Tl 由于某种原因被撤销,这时 Tl 已修改过的数据恢复原值,几读到的数据就与数据库中的数据不一致,则几读到的数据就为“脏”数据,即不正确的数据。避免不一致性的方法和技术就是并发控制。最常用的技术是封锁技术。也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。

     

    3 .什么是封锁?基本的封锁类型有几种?试述它们的含义。

    答:封锁就是事务 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 做任何修改。

     

    4 .如何用封锁机制保证数据的一致性?

    答: DBMS 在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务 Tl 在对 A 进行修改之前先对 A 执行 xock ( A ) ,即对 A 加 x 锁。这样,当几请求对 A 加 x 锁时就被拒绝,几只能等待 Tl 释放 A 上的锁后才能获得对 A 的 x 锁,这时它读到的 A 是 Tl 更新后的值,再按此新的 A 值进行运算。这样就不会丢失 Tl 的更新。

    DBMS 按照一定的封锁协议,对并发操作进行控制,使得多个并发操作有序地执行,就可以避免丢失修改、不可重复读和读“脏’夕数据等数据不一致性。

     

    5 .什么是活锁?什么是死锁?

    答:

    如果事务 Tl 封锁了数据 R ,事务几又请求封锁 R ,于是几等待。几也请求封锁 R ,当 Tl 释放了 R 上的封锁之后系统首先批准了几的请求,几仍然等待。然后几又请求封锁 R ,当几释放了 R 上的封锁之后系统又批准了几的请求 … … 几有可能永远等待,这就是活锁的情形。活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。如果事务 Tl 封锁了数据 Rl ,几封锁了数据凡,然后 Tl 又请求封锁几,因几已封锁了几,于是 Tl 等待几释放几上的锁。接着几又申请封锁 Rl ,因 Tl 已封锁了 Rl ,几也只能等待 Tl 释放 Rl 上的锁。这样就出现了 Tl 在等待几,而几又在等待 T }的局面, T }和几两个事务永远不能结束,形成死锁。

     

    6 .试述活锁的产生原因和解决方法。

    答:活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。

     

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

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

     

     12 .什么样的并发调度是正确的调度?

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

     

    9 .设 Tl ,几,几是如下的 3 个事务:

    Tl :A : = A + 2 ;

    T2:A : = A * 2 ;

    T3:A : = A **2 ; ( A <-A*A)

    设 A 的初值为 0 。

    ( l )若这 3 个事务允许并行执行,则有多少可能的正确结果,请一一列举出来。

    答 :A 的最终结果可能有 2 、 4 、 8 、 16 。因为串行执行次序有 Tl T2T3、 Tl T3T2、T2T1T3、T2T3Tl 、T3T1T2、T3T2 Tl 。对应的执行结果是 16 、 8 · 4 · 2 · 4 · 2 。

    ( 2 )请给出一个可串行化的调度,并给出执行结果

    答:

     

    最后结果 A 为 16 ,是可串行化的调度。

    ( 3 )请给出一个非串行化的调度,并给出执行结果。

    答:

             

          最后结果 A 为 0 ,为非串行化的调度。

    ( 4 )若这 3 个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。

    答:

             

         ( 5 )若这 3 个事务都遵守两段锁协议,请给出一个产生死锁的调度。

    答:

             

     

    11.试证明,若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的。

    证明:首先以两个并发事务 Tl 和T2为例,存在多个并发事务的情形可以类推。根据可串行化定义可知,事务不可串行化只可能发生在下列两种情况:

     ( l )事务 Tl 写某个数据对象 A ,T2读或写 A ;

    ( 2 )事务 Tl 读或写某个数据对象 A ,T2写 A 。

    下面称 A 为潜在冲突对象。

    设 Tl 和T2访问的潜在冲突的公共对象为{A1,A2 … , An }。不失一般性,假设这组潜在冲突对象中 X =(A 1 , A2 , … , Ai }均符合情况 1 。 Y ={A i + 1 , … , An }符合所情况( 2 )。

    VX ∈ x , Tl 需要 XlockX ①

    T2 需要 Slockx 或 Xlockx ②

     1 )如果操作 ① 先执行,则 Tl 获得锁,T2等待

    由于遵守两段锁协议, Tl 在成功获得 x 和 Y 中全部对象及非潜在冲突对象的锁后,才会释放锁。

    这时如果存在 w ∈ x 或 Y ,T2已获得 w 的锁,则出现死锁;否则, Tl 在对 x 、 Y 中对象全部处理完毕后,T2才能执行。这相当于按 Tl 、T2的顺序串行执行,根据可串行化定义, Tl 和几的调度是可串行化的。

    2 )操作 ② 先执行的情况与( l )对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。证毕。

     

    12 .举例说明,对并发事务的一个调度是可串行化的,而这些并发事务不一定遵守两段锁协议。

    答:

     

    13 .为什么要引进意向锁?意向锁的含义是什么?

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

     

    14 .试述常用的意向锁: IS 锁、 ix 锁、 SIX 锁,给出这些锁的相容矩阵。

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

    IX 锁:如果对一个数据对象加 ix 锁,表示它的后裔结点拟(意向功口 X 锁。例如,要对某个元组加 X 锁,则要首先对关系和数据库加 ix 锁。

    SIX 锁:如果对一个数据对象加 SIX 锁,表示对它加 S 锁,再加 IX 锁,即 SIX = S + IX 。

    相容矩阵:

     

    15 .理解并解释下列术语的含义:封锁、活锁、死锁、排它锁、共享锁、并发事务的调度、可串行化的调度、两段锁协议。

    答:(略,已经在上面有关习题中解答)

     

    16 .试述你了解的某一个实际的 DBMS 产品的并发控制机制。

    答:(略,参见简单介绍了有关 Oracle 的并发控制机制)

     

    展开全文
  • DBMS中的并发控制的目的是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。 2. 试述共享锁和排他锁的含义。 排他锁又称为写锁。排他锁是最严格的一类封锁,当需要对表进行...

    1. 试述DBMS中采用并发控制的目的。

    并发控制是以事务为单位进行的。DBMS中的并发控制的目的是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。

    2. 试述共享锁和排他锁的含义。

    排他锁又称为写锁。排他锁是最严格的一类封锁,当需要对表进行插入、删除或更新操作时,应该使用排他锁。当一个事务对某数据加上排他锁后,其他事务不得对该数据对象施加任何封锁。
    共享锁又称为读锁。当一个事务队某数据对象加上共享锁后,其他事务可以读取该数据,不能对该数据对象做任何修改。共享锁可以保证最大的并发性,任何数量的用户可以同时对相同的数据施加共享锁。

    3. 试述死锁是如何产生的,列举一些常见的预防死锁的方法。

    产生死锁的原因是两个或多个事务都锁定了一些数据库对象,然后又都需要锁定对方的数据库对象失败而需要等待所造成的。
    预防死锁通常有两种方法: 一次封锁法和顺序封锁法。一次封锁法要求每个事务一次就将要操作的数据库对象全部锁定,否则就不继续执行。该方法会降低系统的并发度。
    顺序封锁法要求预先对数据库对象规定一个封锁顺序,所有事务都按这个顺序来实行封锁。该方法算法复杂,成本高。

    4. 简述数据库系统中经常用到检测和解除死锁的方法。

    数据库系统中检测死锁一般使用超时法或事务等待图法。
    数据库管理系统一般采用如下方法来解除死锁:在循环等待的事务中,选择一个事务作为牺牲者,给其他事务“让路”。回滚牺牲的事务,释放其获得的锁及其他资源。将释放的锁让给等待它的事务。

    5. 简述多粒度封锁的含义以及优点。

    同时支持多种锁定粒度供事务选择的封锁方法叫做多粒度封锁。其中,封锁对象可以是数据库、表、记录、列、索引等的逻辑单元,也可以是数据页或索引页、块等的物理单元。
    采用多种粒度封锁能够提高并发度和减少锁的数量。

    6. 试述意向锁的含义,简要介绍几种常见的意向锁。

    意向锁的含义是,如果对一个节点加某种意向锁,则会对该节点的各级下级节点加这种锁;如果对一个节点加某种锁,则必须先对该节点的各级上级节点加这种意向锁。
    常见的意向锁有:意向共享锁(IS锁)、意向排他锁(IX锁)、共享意向排他锁(Share SIX锁)

    展开全文
  • 并发控制 解决并发操作带来的数据不一致问题普遍采用( )技术. A. 封锁 B. 存取控制 C. 恢复 D. 协商 下列不属于并发操作带来的问题是( ). A. 丢失修改 B. 不可重复读 C. 死锁 D. 脏读 DBMS普遍采用( )方法来...

    【数据库原理及应用】经典题库附答案(14章全)——第一章:数据库基础知识
    【数据库原理及应用】经典题库附答案(14章全)——第二章:关系数据库知识
    【数据库原理及应用】经典题库附答案(14章全)——第三章:结构化查询语言SQL
    【数据库原理及应用】经典题库附答案(14章全)——第四章:关系系统及其优化
    【数据库原理及应用】经典题库附答案(14章全)——第五章:关系数据理论
    【数据库原理及应用】经典题库附答案(14章全)——第六章:关系数据库设计过程
    【数据库原理及应用】经典题库附答案(14章全)——第七章:数据库恢复技术
    【数据库原理及应用】经典题库附答案(14章全)——第八章:数据库并发控制
    【数据库原理及应用】经典题库附答案(14章全)——第九章:数据库安全性
    【数据库原理及应用】经典题库附答案(14章全)——第十章:数据库完整性
    【数据库原理及应用】经典题库附答案(14章全)——第十二章:数据库技术新发展
    【数据库原理及应用】经典题库附答案(14章全)——第十三章:面向对象程数据库系统
    【数据库原理及应用】经典题库附答案(14章全)——第十四章:分布式数据库系统



    一、选择题

    1. 为了防止一个用户的工作不适当地影响另一个用户,应该采取( ) .
      A. 完整性控制 B. 访问控制
      C. 安全性控制 D. 并发控制
    2. 解决并发操作带来的数据不一致问题普遍采用( )技术.
      A. 封锁 B. 存取控制
      C. 恢复 D. 协商
    3. 下列不属于并发操作带来的问题是( ).
      A. 丢失修改 B. 不可重复读
      C. 死锁 D. 脏读
    4. DBMS普遍采用( )方法来保证调度的正确性 .
      A. 索引 B. 授权
      C. 封锁 D. 日志
      5.事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,这是( ) .
      A. 一级封锁协议 B. 二级封锁协议
      C. 三级封锁协议 D. 零级封锁协议
    5. 如果事务T获得了数据项Q上的排他锁,则T对Q( ) .
      A. 只能读不能写 B. 只能写不能读
      C. 既可读又可写 D. 不能读也不能写
      7.设事务T1和T2,对数据库中地数据A进行操作,可能有如下几种情况,请问哪一种不会发生冲突操作( ) .
      A. T1正在写A,T2要读A
      B. T1正在写A,T2也要写A
      C. T1正在读A,T2要写A
      D. T1正在读A,T2也要读A
      8.如果有两个事务,同时对数据库中同一数据进行操作,不会引起冲突的操作是( ) .
      A. 一个是DELETE,一个是SELECT
      B. 一个是SELECT,一个是DELETE
      C. 两个都是UPDATE
      D. 两个都是SELECT
    6. 在数据库系统中,死锁属于( ).
      A. 系统故障 B. 事务故障
      C. 介质故障 D. 程序故障

    选择题答案:

    (1) D (2) A (3) C (4) C (5) A
    (6) C (7) D (8) D (9) B

    二、简答题

    1. 在数据库中为什么要并发控制

    答: 数据库是共享资源,通常有许多个事务同时在运行.
    当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况.若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性.所以数据库管理系统必须提供并发控制机制.

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

    答: 并发操作带来的数据不一致性包括三类:丢失修改,不可重复读和读"脏"数据.
    (1)丢失修改(Lost Update)
    两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失.
    (2)不可重复读(Non-Repeatable Read)
    不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果.
    (3)读"脏"数据(Dirty Read)
    读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据.
    避免不一致性的方法和技术就是并发控制.最常用的并发控制技术是封锁技术.
    也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制.

    3. 什么是封锁

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

    4. 基本的封锁类型有几种 试述它们的含义.

    答: 基本的封锁类型有两种: 排它锁(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做任何修改.

    5. 什么是封锁协议 不同级别的封锁协议的主要区别是什么

    答: 在运用封锁技术对数据加锁时,要约定一些规则.例如,在运用X锁和S锁对数据对象加锁时,要约定何时申请X锁或S锁,何时释放封锁等.这些约定或者规则称为封锁协议(Locking Protocol).对封锁方式约定不同的规则,就形成了各种不同的封锁协议.不同级别的封锁协议,例如《概论》中介绍的三级封锁协议,三级协议的主要区别在于什么操作需要申请封锁,何时申请封锁以及何时释放锁(即持锁时间的长短).
    一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放.
    二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁.
    三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放.

    6. 不同封锁协议与系统一致性级别的关系是什么

    答: 不同的封锁协议对应不同的一致性级别.
    一级封锁协议可防止丢失修改,并保证事务T是可恢复的.在一级封锁协议中,对读数据是不加S锁的,所以它不能保证可重复读和不读"脏"数据.
    二级封锁协议除防止了丢失修改,还可进一步防止读"脏"数据.在二级封锁协议中,由于读完数据后立即释放S锁,所以它不能保证可重复读.
    在三级封锁协议中,无论是读数据还是写数据都加长锁,即都要到事务结束时才释放封锁.所以三级封锁协议除防止了丢失修改和不读"脏"数据外,还进一步防止了不可重复读.

    7. 试述活锁的产生原因和解决方法.

    答:
    活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁.
    避免活锁的简单方法是采用先来先服务的策略.当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁.

    8. 请给出预防死锁的若干方法.

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

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

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

    10. 什么样的并发调度是正确的调度

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

    11. 试述两段锁协议的概念.

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

    12. 为什么要引进意向锁 意向锁的含义是什么

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

    13. 试述常用的意向锁:IS锁,IX锁,SIX锁,给出这些锁的相容矩阵.

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

    14. 理解并解释下列术语的含义:封锁,活锁,死锁,排它锁,共享锁,并发事务的调度,可串行化的调度,两段锁协议.

    答:(略,已经在上面有关习题中解答)

    15. 试述你了解的某一个实际的DBMS产品的并发控制机制.
    答:(略,参见《概论》第8节,简单介绍了有关Oracle的并发控制机制.)

    展开全文
  • 第八章数据库并发控制    一、选择 1.为了防止一个用户的工作不适当地影响另一个用户,应该采取(D)。 A. 完整性控制 B. 访问控制 C. 安全性控制 D.并发控制 2. 解决并发操作带来的数据不一致问题...
  • 设数据项x,y存放在S1场地,u,v存放在S2场地,有分布式事务T1和T2,T1在S1场地上的操作为R1(x)W1(x)R1(y)W1(y),T2在S1...对下情况1和2各举出一种并发历程,如果是串行化的,指出事务的执行次序。对第三种情况,给出符
  • 所谓并发操作,是指在多用户共享的系统中,许多用户可能同时对同一数据进行操作。所带来的问题是数据的不一致性,具体表现为:丢失更新、不可重复读、读脏数据。 1、事务调度 1.1 串行调度:(Serial Schedule)...
  • 一单项选择 试题1 若事务T对数据R已经加X锁,则其他事务对数据R( ) 可以加S锁不能加X锁 不能加S锁可以加X锁 不能加任何锁 可以加S锁也可以加X锁 [参考答案] 不能加任何锁 试题2 DBMS普遍采用( )方法来...
  • 第十一章 并发控制 1.事务并发 多用户数据库系统的存在(允许多个用户) 特点:在同一时刻并发运行时的事务数可达数百个 2.并发操作带来的数据不一致性 并发操作带来的数据不一致性包块丢失修改、不可重复读和...
  • 数据库的基本概念总结 1. 数据库定义:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性...
  • 数据库题目之并发控制

    千次阅读 2019-01-11 09:45:17
    一、选择: 1、.设有两个事务T1、T2,其并发操作如下所示,下面评价正确的是 。 A.该操作不存在问题 B.该操作丢失修改 C.该操作不能重复读 D.该操作读“脏”数据 【答案:】B T1 T2 ...
  • 数据库并发控制和封锁协议分析

    千次阅读 2014-12-12 16:46:03
    数据库的并发控制和封锁协议分析 [摘 要] 数据库可以提供给多个用户...本文针对数据库并发操作中可能产生的数据不一致性问题进行分析,并给出解决的方法。 [关键词] 数据库 并发控制 一致性 封锁 封锁协议
  • 数据库系统原理复习(八)——事务并发控制   1.下面关于“一级封锁协议”正确的说法是()。 (4分) A. 一级封锁协议避免“丢失修改”   B. 一级封锁协议可以避免“死锁”   C. 一级封锁协议“能...
  • 数据库作业21:第十一章: 并发控制课后习题

    千次阅读 多人点赞 2020-05-13 22:33:12
    (1)若这三个事物允许并发执行,则有多少种可能的正确结果?请一一列举出来。 可能会产生的结果有:2、4、8、16 T1T2T3 16 T1T3T2 8 T2T1T3 4 T2T3T1 2 T3T1T2 4 T3T2T1 2 (2)请给出一个可串行化的...
  • 数据库复试--并发控制(主观

    千次阅读 2020-04-25 14:42:06
    第八章 并发控制 1.并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况? 正确答案: 并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏”数据。 (1)丢失修改(Lost Update...
  • 数据库并发学习总结

    千次阅读 2016-03-30 13:00:34
    数据库并发控制 1. 在数据库中为什么要并发控制? 答:数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就...
  • 9. (1)四种结果:16,8,4,2; T1 T2 T3 : 16; T1 T3 T2 : 8; T2 T1 T3 : 4; T2 T3 T1 : 2; T3 T1 T2 : 4; T3 T2 T1 : 2; (2) ...是冲突可串行化调度,r3(B)r1(A)w3(B)r2(B)r2(A)w2(B)r1(B)w1(A) ...
  • C、并发控制 D、完整性控制 2、下列说法正确的是___ A、事务故障可以通过运行日志进行恢复 B、介质故障只需将备份恢复到系统中即可实现 正确性 C、检查点是指检查发生故障并进行恢复的时刻 点 D、检查点是DBMS强制使...
  • 并发编程面试(2020最新版)

    万次阅读 多人点赞 2020-03-14 17:28:01
    文章目录基础知识并发编程的优缺点为什么要使用并发编程(并发编程的优点)并发编程有什么缺点并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全?并行和并发有什么区别?什么是多线程,多线程的优劣?...
  • 3.在数据库中为什么要有并发控制? 答:为避免多个事务之间的相互干扰。 4.并发控制的措施是什么? 答:加锁。 5.设有三个事务:T1、T2和T3,其所包含的动作为: T1:A = A + 2;T2:A = A * 2;T3:A = A - 1 .....
  • 这是大三第一学期《数据库基础》的实验报告,总共15个实验,前12个百度文库都有,后面三个网上找不到都是我自己...实验14并发控制 本文 实验15数据恢复 点我查看 课程名称数据库基础 实验项目实验14并发控制 ...
  • RDBS并发控制习题

    千次阅读 2020-05-17 23:39:07
    并发控制习题
  • 并发控制习题

    2020-06-22 18:42:49
    1.在数据库中为什么要并发控制并发控制可以保证事务的哪些特性? 数据库的一个明显的特点就是多个用户共享数据库资源,尤其是多用户可以同时存取相同的数据。在这样的系统中,在同一时刻并发运行的事务数可达数百...
  • 数据库并发控制技术

    千次阅读 2011-05-10 15:53:00
    数据库的基本概念总结 1. 数据库定义:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为...
  • MySQL数据库面试(2020最新版)

    万次阅读 多人点赞 2020-03-10 17:20:40
    数据库范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4...
  • 在2017第八届中国数据库技术大会(DTCC2017)上,腾讯云数据库专家工程师李海翔作为内核专场主持人和专家组成员,代表腾讯云进行了为《数据库并发控制技术深度探索》主题演讲。 作者简介:李海翔,从事数据库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,267
精华内容 18,906
关键字:

数据库并发控制大题