二是提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排它锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。
*13. 试述你了解的某一个实际的DBMS产品中采用的恢复策略。 答: 下面简单介绍一下Oracle的恢复技术:
Oracle中恢复机制也采用了转储和登记日志文件两个技术。
Oracle向DBA提供了多种转储后备副本的方法,如文件拷贝、利用Oracle的Export实用程序、用SQL命令Spool以及自己编程实现等。相应地,Oracle也提供了多种重装后备副本的方法,如文件拷贝、利用Oracle的Import实用程序、利用SQL*LOADER以及自己编程实现等。
在Oracle 早期版本(V.5)中,日志文件以数据块为单位,也就是说,Oracle的恢复操作是基于数据块的,不是基于操作的。Oracle中记录数据库更新前的旧值的日志文件称为数据库前像文件(Before Image,简称BI文件),记录数据库更新后的新值的日志文件称为数据库的后像文件(After Image,简称AI文件)。BI文件是必须配置的,AI文件是可以任选的。
Oracle7为了能够在出现故障时更有效地恢复数据,也为了解决读“脏”数据问题,提供了REDO日志文件和回滚段(Rollback Segment)。REDO日志文件中记录了被更新数据的前像和后像。回滚段记录更新数据的前像,设在数据库缓冲区中。在利用日志文件进行故障恢复时,为减少扫描日志文件的遍数,Oracle7首先扫描REDO日志文件,重做所有操作,包括未正常提交的事务的操作,然后再根据回滚段中的数据,撤销未正常提交的事务的操作。 详细技术希望同学自己设法了解Oracle最新版本的介绍,例如通过INTERNET访问Oracle公司的网站。也可以了解其他DBMS厂商的产品情况。
*14. 试用恢复的基本技术设计一个恢复子系统,给出这个子系统的恢复策略,包括: (a) 当产生某一类故障时如何恢复数据库的方法; (b) 日志文件的结构; (c) 登记日志文件的方法;
(d) 利用日志文件恢复事务的方法; (e) 转储的类型;
(f) 转储的后备副本和日志文件如何配合使用。
*解析:这是一个大作业。可以综合复习和运用学到的知识。设计一个恢复子系统。
例如,日志文件的结构你可以记录为单位,也可以以数据块为单位。不同的日志文件结构,登记的日志内容,日志文件恢复事务的方法也就不同了。
对于研究生,还应该上机模拟实现你设计的恢复子系统。
数据库并发控制
一、选择题
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. 零级封锁协议 6. 如果事务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
26
8.如果有两个事务,同时对数据库中同一数据进行操作,不会引起冲突的操作是( ) 。
A. 一个是DELETE,一个是SELECT B. 一个是SELECT,一个是DELETE C. 两个都是UPDATE D. 两个都是SELECT 9. 在数据库系统中,死锁属于( )。
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锁的,所以它不能保证可重复读和不读“脏”数据。
27
二级封锁协议除防止了丢失修改,还可进一步防止读“脏”数据。在二级封锁协议中,由于读完数据后立即释放S锁,所以它不能保证可重复读。
在三级封锁协议中,无论是读数据还是写数据都加长锁,即都要到事务结束时才释放封锁。所以三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。 7. 试述活锁的产生原因和解决方法。
答: 活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。
避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。 8. 请给出预防死锁的若干方法。
答: 在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求已被其他事务封锁的数据加锁,从而出现死等待。
防止死锁的发生其实就是要破坏产生死锁的条件。预防死锁通常有两种方法: (1)一次封锁法
要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。 (2)顺序封锁法
预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 不过,预防死锁的策略不大适合数据库系统的特点。
9. 请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?
答:数据库系统一般采用允许死锁发生,DBMS检测到死锁后加以解除的方法。 DBMS中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。
超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。若时限设置得太长,又不能及时发现死锁发生。
DBMS并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。当然,对撤销的事务所执行的数据修改操作必须加以恢复。
10. 什么样的并发调度是正确的调度?
答: 可串行化(Serializable)的调度是正确的调度。
可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度。 11. 试述两段锁协议的概念。
答: 两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。
· 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁; · 在释放一个封锁之后,事务不再申请和获得任何其他封锁。 “两段”的含义是,事务分为两个阶段:
第一阶段是获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。
第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务释放已经获得的锁,但是不能再申请任何锁。 12. 为什么要引进意向锁? 意向锁的含义是什么?
答: 引进意向锁是为了提高封锁子系统的效率。该封锁子系统支持多种封锁粒度。
原因是:在多粒度封锁方法中一个数据对象可能以两种方式加锁—显式封锁和隐式封锁。因此系统在对某一数据对象加锁时不仅要检查该数据对象上有无(显式和隐式)封锁与之冲突;还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突;显然,这样的检查方法效率很低。为此引进了意向锁。
意向锁的含义是:对任一结点加锁时,必须先对它的上层结点加意向锁。
例如事务T要对某个元组加X锁,则首先要对关系和数据库加IX锁。换言之,对关系和数据库加IX锁,表
28
示它的后裔结点—某个元组拟(意向)加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产品的并发控制机制。 答:(略)
数据库安全性
一、选择题
1. 以下( )不属于实现数据库系统安全性的主要技术和方法。
A. 存取控制技术 B. 视图技术 C. 审计技术 D. 出入机房登记和加锁 2. SQL中的视图提高了数据库系统的( )。
A. 完整性 B. 并发控制 C. 隔离性 D. 安全性
3. SQL语言的GRANT和REMOVE语句主要是用来维护数据库的( )。
A. 完整性 B. 可靠性 C. 安全性 D. 一致性 4. 在数据库的安全性控制中,授权的数据对象的( ),授权子系统就越灵活。
A. 范围越小 B. 约束越细致 C. 范围越大 D. 约束范围大 选择题答案:
(1) D (2) D (3) C (4) A 三、简答题
1. 什么是数据库的安全性?
答: 数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。 2. 数据库安全性和计算机系统的安全性有什么关系?
答: 安全性问题不是数据库系统所独有的,所有计算机系统都有这个问题。只是在数据库系统中大量数据集中存放,而且为许多最终用户直接共享,从而使安全性问题更为突出。 系统安全保护措施是否有效是数据库系统的主要指标之一。
数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的, 3.试述实现数据库安全性控制的常用方法和技术。 答: 实现数据库安全性控制的常用方法和技术有:
1)用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。
2)存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如C2级中的自主存取控制(DAC),B1级中的强制存取控制(MAC);
3)视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
4)审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中, DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
29
5)数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。 具体内容请参见《概论》9.2。
4.什么是数据库中的自主存取控制方法和强制存取控制方法?
答:自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。
强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。
*解析:自主存取控制中自主的含义是:用户可以将自己拥有的存取权限“自主”地授予别人。即用户具有一定的“自主”权。
5.SQL语言中提供了哪些数据控制(自主存取控制)的语句?请试举几例说明它们的使用方法。 答:SQL中 的自主存取控制是通过GRANT 语句和 REVOKE 语句来实现的。如: GRANT SELECT, INSERT ON Student TO 王平 WITH GRANT OPTION;
就将Student表的SELECT和INSERT权限授予了用户王平,后面的“WITH GRANT OPTION”子句表示用户王平同时也获得了“授权”的权限,即可以把得到的权限继续授予其他用户。 REVOKE INSERT ON Student FROM 王平 CASCADE;
就将Student表 的INSERT权限从用户王平处收回,选项 CASCADE 表示,如果用户王平将 Student 的 INSERT 权限又转授给了其他用户,那么这些权限也将从其他用户处收回。 6.今有两个关系模式:
职工(职工号,姓名,年龄,职务,工资,部门号) 部门(部门号,名称,经理名,地址,电话号)
请用SQL的GRANT和REVOKE语句(加上视图机制)完成以下授权定义或存取控制功能: (a) 用户王明对两个表有SELECT权力;
GRANT SELECT ON 职工,部门 TO 王明; (b) 用户李勇对两个表有INSERT和DELETE权力; GRANT INSERT,DELETE ON 职工,部门 TO 李勇; (c) *每个职工只对自己的记录有SELECT权力;
GRANT SELECT ON 职工 WHEN USER()= NAME TO ALL;
这里假定系统的GRANT语句支持WHEN子句和USER()的使用。用户将自己的名字作为ID。注意,不同的系统这些扩展语句可能是不同的。读者应该了解你使用的DBMS产品的扩展语句。 (d) 用户刘星对职工表有SELECT权力,对工资字段具有更新权力; GRANT SELECT,UPDATE(工资) ON 职工 TO 刘星; (e) 用户张新具有修改这两个表的结构的权力;
GRANT ALTER TABLE ON 职工,部门 TO 张新;
(f) 用户周平具有对两个表所有权力(读,插,改,删数据),并具有给其他用户授权的权力; GRANT ALL PRIVILIGES ON 职工,部门 TO 周平 WITH GRANT OPTION;
(g) 用户杨兰具有从每个部门职工中SELECT最高工资,最低工资,平均工资的权力,他不能查看每个人的工资。
答: 首先建立一个视图。然后对这个视图定义杨兰的存取权限。 CREATE VIEW 部门工资 AS
SELECT 部门.名称,MAX(工资),MIN(工资),AVG(工资) FROM 职工,部门
WHERE 职工.部门号 = 部门. 部门号 GROUP BY 职工.部门号;
GRANT SELECT ON 部门工资 TO 杨兰;
7.把习题8中(a)~(g) 的每一种情况,撤销各用户所授予的权力。 答:(a) REVOKE SELECT ON 职工,部门 FROM 王明;
(b) REVOKE INSERT,DELETE ON 职工,部门 FROM 李勇;
30
数据库系统概论复习题
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)