数据库原理及应用第7章课后习题答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题7

1、试述事务的概念及事务的四个特性。

事务(Transaction)是用户定义的一个数据库操作序列,这些操作是一个完整的工作单元,一个事务内的所有语句被作为一个整体,这些操作要么全做,要么全不做。事务是数据库环境的中的逻辑单元,相当于操作系统中的进程。

为了保证数据库中数据的正确性,一个事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability )。这四个特性简称ACID特性。

2、试述事务的状态及转换。

3、在数据库中为什么要并发控制?并发控制能保证事务的哪些特性?

数据库的一个明显的特点是多个用户共享数据库资源,尤其是多用户可以同时存取相同的数据。在这样的系统中,在同一时刻并发运行的事务数可达数百个。若对事务的并发操作不加以控制,就会造成数据存、取的错误,破坏了数据的一致性和完整性。

并发控制可以防止数据不一致性出现。

4、并发操作可能会产生哪几类数据不一致?用什么方法可以避免不一致性的情况?

并发操作带来的数据不一致性分为四种情况:丢失数修改、读“脏”数据、不可重复读和产生“幽灵”数据。

在数据库环境下,进行并发控制的主要技术有封锁(Locking)、时间戳(Timestamp)和乐观控制法。商用的DBMS一般都采用封锁方法。

5、什么是封锁?基本的封锁类型有哪些?试述它们的含义。

封锁机制,即加锁(Locking),是一种并发控制机制,是用来调整对共享目标的并行存取的技术。事务通过向封锁管理程序的系统组成部分发出请求而对事务加锁。

基本封锁类型有两种:共享锁(Share Locks,简记为S锁或读锁)和排它锁(Exclusive Locks,简记为X锁或写锁)。

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

在运用X锁和S锁对数据对象加锁时,还需要约定一些规则,这些规则为封锁协议或加锁协议(Locking Protocol)。对封锁方式加不同的规则,就形成了各种不同级别的封锁协议。不同级别的封锁协议所能达到的一致性级别是不同的。

7、什么样的并发调度是正确的调度?

可串行性(Serializability)是并发事务正确调度的准则。按照这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。

8、理解并解释下列术语的含义:

封锁、活锁、死锁、排他锁、共享锁、可串行化的调度、两段锁协议。

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

2)活锁:如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……,T2有可能永远等待,这就是活锁。

3)死锁:如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁,接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁。这样T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁。

4)共享锁:

若事务T对数据对象A加上S锁,则事务T可以读A,但不能修改A。其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证其他事务可以读A,但在T 释放A上的S锁之前不能对A做任何修改。

5)排他锁:

若事务T对数据对象A加上X锁,则只允许T读取和修改A,但不允许其它事务再对A加任何类型的锁和进行任何操作,直到T释放A上的锁。这就保证其他事务在T释放A 上的锁之前不能再读取和修改A 。

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

7)所谓两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。具体内容如下:

①在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁;

②在释放一个封锁之后,事务不再申请和获得任何其他封锁。

9、数据库中为什么要有恢复子系统?它的功能是什么?

系统故障会丢失这些事务对数据的修改,使数据库处于不一致状态。

恢复子系统在系统重启时,撤销所有未完成的事务,并重做已经提交的事务,以保证将数据库真正恢复到一致状态。

10、数据库运行过程中可能产生的故障有几类?哪些故障影响事务的正常执行?哪些

故障破坏数据库数据?

1)事务内部的故障

事务内部的故障有的是可以通过事务程序本身发现的,有的是非预期的,不能由事务程序处理的。

事务故障意味着事务没有达到预期的终点,因此,数据库可能处于不正确的状态。恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经作出的任何对数据库的修改,使得该事务好像根本没有启动一样。这类恢复操作称为事务撤销(UNDO)。

2)系统故障

系统故障又称为软故障,是指造成系统停止运转,要使得系统重新启动的故障。例如,硬件错误(如CPU故障)、操作系统故障、DBMS代码错误、系统断电等都是系统故障。这样的故障会影响正在运行的所有事务,但不破坏数据库。

3)其他故障

介质故障或由计算机病毒引起的故障或破坏可归为其他故障。

介质故障常称为硬故障,指外存故障,如磁盘损坏、磁头碰撞等。这类故障会对数据库造成破坏,并影响正在操作数据库的所有事务。这类故障发生的可能性小得多,但破坏性最大。

各种故障对数据库的影响有两种可能性:一是数据库本身被破坏;二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。

11、数据库恢复技术有哪些?

1)利用备份技术

2)利用事务日志

3)利用镜像技术

12、什么是数据库的备份?

数据备份是指定期或不定期地对数据库数据进行复制,可以将数据复制到本地机器上,也可以复制到其他机器上,也称为数据转储。

13、什么是日志文件?为什么要设日志文件?

日志文件(log)是用来记录事务对数据库的更新操作的文件。

具体的作用是:

a)事务故障恢复和系统故障恢复必须用日志文件。

b)在动态备份方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库。

14、登记日志文件时为什么必须先写日志文件,后写数据库?

如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。所以为了安全,一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改,这就是“先写日志文件”的原则。

15、什么是数据库镜像?它有什么用途?

所谓镜像就是在不同的设备上同时存有两份数据库,把一个设备称为主设备,另一个称为镜像设备。主设备和镜像设备互为镜像关系,每当主数据库更新时,DBMS自动把整个数据库或其中的关键数据复制到另一个镜像设备上。保证镜像数据与主数据库的一致。

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

由于数据库镜像是通过复制数据实现的,频繁地复制数据自然会降低系统运行效率,因此在实际应用中用户往往只选择对关键数据和日志文件镜像,而不是对整个数据库进行镜像。

相关文档
最新文档