1、(完整word版)数据库简答题1. 什么是数据的安全性?答:数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏2. 什么是数据库的完整性?答:数据库的完整性是指数据的正确性和相容性。3. 数据库的安全性和完整性有什么关系?答:数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。4. 试述实现数据库安全性控制的常用方法和技
2、术。答:实现数据库安全性控制的常用方法和技术有:(1)用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。(2)存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如C2级中的自主存取控制(DAC),B1级中的强制存取控制(MAC)。(3)视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。(4)审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA可以利用审
3、计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。(5)数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。5. 什么是数据库的审计功能,为什么要提供审计功能?答:审计功能是指DBMS 的审计模块在用户对数据库执行操作的同时把所有操作自动记录到系统的审计日志中。因为任何系统的安全保护措施都不是完美无缺的,蓄意盗窃破坏数据的人总可能存在。利用数据库的审计功能,DBA 可以根据审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。6. 什么是数据库的完整性约束条件?完整性约束条件可分为哪几类?
4、DBMS的完整性控制机制应具有哪些功能?答:Q1:完整性约束条件是指数据库中的数据应该满足的语义约束条件。Q2:一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。静态列级约束是对一个列的取值域的说明,包括以下几个方面:(1)对数据类型的约束,包括数据的类型、长度、单位可精度等;(2)对数据格式的约束;(3)对取值范围或取值集合的约束;(4)对空值的约束;(5)其他约束。静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态
5、关系约束有: (1)实体完整性约束; (2)参照完整性约束; (3)函数依赖约束。动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:(1)修改列定义时的约束;(2)修改列值时的约束。动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。Q3:DBMS的完整性控制机制应具有三个方面的功能:(1)定义功能,即提供定义完整性约束条件的机制;(2)检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;(3)违约反应,如果发现用户的操作请求使数据违背了完整性约束条件,则
6、采取一定的动作来保证数据的完整性。7. SQL中提供了哪些数据控制语句(自主存取控制)的语句?请试举几例说明他们的使用方法答:SQL 中的自主存取控制是通过GRANT语句和REVOKE语句来实现的。如:GRANT SELECT , INSERT ON StudentTO 王平WITH GRANT OPTION ;就将Student 表的SELECT 和INSERT 权限授予了用户王平,后面的“WITH GRANT OPTION ”子句表示用户王平同时也获得了“授权”的权限,即可以把得到的权限继续授予其他用户。REVOKE INSERT ON Student FROM 王平CASCADE ;就将
7、Student 表的INSERT 权限从用户王平处收回,选项CASCADE 表示,如果用户王平将Student 的INSERT 权限又转授给了其他用户,那么这些权限也将从其他用户处收回。8. 什么是事务?它有哪些属性?答:事务是数据库的逻辑工作单位,它是用户定义的一组操作序列,这些操作要么全做,要么全不做。事务有四种属性(ACID),原子性、一致性、隔离性、持久性。9. 在数据库中为什么要并发控制?答:数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据
8、库管理系统必须提供并发控制机制。10. 并发操作可能会引起哪几类数据不一致?用什么方法能避免这些不一致的情况?答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏数据。(1) 丢失修改:两个事务 Tl 和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了) Tl 提交的结果,导致 Tl 的修改被丢失。 (2) 不可重复读:不可重复读是指事务 Tl 读取数据后,另一事务执行更新操作,使 Tl 无法再现前一次读取结果。(3) 读“脏”数据:读“脏数据是指事务 Tl 修改某一数据,并将其写回磁盘,事务T2读取同一数据后, Tl 由于某种原因被撤销,这时 Tl 已修改过的数据恢复原值
9、,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。避免不一致性的方法和技术就是并发控制。最常用的技术是封锁技术。也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。11. 什么是封锁?基本的封锁类型有几种?试述他们的含义。答:封锁就是事务 T 在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务 T 就对该数据对象有了一定的控制,在事务 T 释放它的锁之前,其他的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术。基本的封锁类型有两种:排它锁(简称X锁)和共享锁(简称S锁)。排它锁又称为写锁。
10、若事务 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 做任何修改。12. 什么是封锁协议?答:在运用X锁和S锁这两种基本封锁,对一定粒度的数据对象加锁时,还需要约定一些规则
11、,例如,应何时申请X锁或S锁、持锁时间、何时释放等,称这些规则为封锁协议。13. 如何用封锁机制保证数据的一致性?答: DBMS 在对数据进行读、写操作之前首先对该数据执行封锁操作,例如事务 Tl 在对 A 进行修改之前先对 A 执行 xock ( A ) ,即对 A 加 x 锁。这样,当T2请求对 A 加 x 锁时就被拒绝,T2只能等待 Tl 释放 A 上的锁后才能获得对 A 的 x 锁,这时它读到的 A 是 Tl 更新后的值,再按此新的 A 值进行运算。这样就不会丢失 Tl 的更新。14. 什么样的并发调度是正确的调度?答:可串行化的调度是正确的调度。可串行化的调度的定义:多个事务的并发执
12、行是正确的,当且仅当其结果与按某一次序串行执行它们时的结果相同,称这种调度策略为可串行化的调度。15. 如何保证并行操作的可串行性?答:保证并行操作的可串行性:对任何数据集合进行读写操作之前,事务首先应获得对此数据集合的封锁,在释放一个封锁之前,事务不再获得任何其他封锁。16. 不同级别的封锁协议的主要区别是什么?答:三级封锁协议:在运用X锁和S锁对数据对象加锁时,还需要约定一些规则 ,例如何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。【一级封锁协议】一级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释
13、放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。使用一级封锁协议可以解决丢失修改问题。 在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,它不能保证可重复读和不读“脏”数据。【二级封锁协议】二级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后方可释放S锁。二级封锁协议除防止了丢失修改,还可以进一步防止读“脏”数据。但在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。【三级封锁协议】三级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直
14、到事务结束才释放。 三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。上述三级协议的主要区别在于什么操作需要申请封锁,以及何时释放。17. 不同封锁协议与系统一致性级别的关系是什么?答:不同的封锁协议对应不同的一致性级别。一级封锁协议可防止丢失修改,并保证事务T是可恢复的。在一级封锁协议中,对读数据是不加S锁的,所以它不能保证可重复读和不读“脏”数据。二级封锁协议除防止了丢失修改,还可进一步防止读脏数据。在二级封锁协议中,由于读完数据后立即释放S锁,所以它不能保证可重复读。在三级封锁协议中,无论是读数据还是写数据都是加长锁,即都要到事务结束时才释放封锁。所以三级封锁协议
15、除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。18. 试述两段封锁协议的概念。答:所谓两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。1)在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;2)在释放一个封锁之后,事务不再申请和获得对该数据的封锁。所谓“两段”锁的含义是,事务分为两个阶段,第一阶段是获得封锁,也称为扩展阶段。在这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在这个阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。19. 试证明,若并发事务遵守两段锁协议,则对这些事务
16、的并发调度是可串行化的。证明:首先以两个并发事务 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 或
17、Xlockx 1 )如果操作 先执行,则 Tl 获得锁,T2等待由于遵守两段锁协议, Tl 在成功获得 x 和 Y 中全部对象及非潜在冲突对象的锁后,才会释放锁。这时如果存在 w x 或 Y ,T2已获得 w 的锁,则出现死锁;否则, Tl 在对 x 、 Y 中对象全部处理完毕后,T2才能执行。这相当于按 Tl 、T2的顺序串行执行,根据可串行化定义, Tl 和几的调度是可串行化的。2 )操作 先执行的情况与( l )对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。证毕。20. 举例说明,对并发事务的一个调度是可串行化的,而这些并发事务并不一定遵
18、守两段锁协议。(P109)21. 什么是活锁?什么是死锁?答:如果事务 Tl 封锁了数据 R ,事务T2又请求封锁 R ,于是T2等待。T3也请求封锁 R ,当 Tl 释放了 R 上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁 R ,当T3释放了 R 上的封锁之后系统又批准了T4的请求 T2有可能永远等待,这就是活锁的情形。活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。如果事务 Tl 封锁了数据 A ,T2封锁了数据B,然后 Tl 又请求封锁B,因T2已封锁了B,于是 Tl 等待T2释放B上的锁。接着T2又申请封锁A,因 Tl 已封锁了A,T2也只
19、能等待 Tl 释放A上的锁。这样就出现了 Tl 在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。22.试述活锁的产生原因和解决方法。答:活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。23.请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?答:数据库系统一般采用允许死锁发生, DBMS 检测到死锁后加以解除的方法。 DBMS 中
20、诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。超时法是:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单,但有可能误判死锁,事务因其他原因长时间等待超过时限时,系统会误认为发生了死锁。若时限设置得太长,又不能及时发现死锁发生。 DBMS 并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有锁,使其他事务得以继续运行下去。当然,对撤销的事务所执行的数据修改操作必须加以恢复。24.什么是数据库的审计功能,为什么要提供审计功能?答:审计功能是指DBMS 的审计模块在用户对数据库执行操作的同时把所
21、有操作自动记录到系统的审计日志中。因为任何系统的安全保护措施都不是完美无缺的,蓄意盗窃破坏数据的人总可能存在。利用数据库的审计功能,DBA 可以根据审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。25. 什么是数据库的备份与恢复?答:数据库备份;是指制作数据库结构、对象和数据的拷贝,以便在数据库遭到破坏的时候能够修复数据库。数据库恢复:就是让数据库根据备份的数据回到备份时的状态。26. 数据库转储的意义是什么?试比较各种数据转储方法。答:数据转储是数据库恢复中采用的基本技术。所谓转储即DBA 定期地将数据库复制到磁带或另一个磁盘上保存起来的过程。当数据库
22、遭到破坏后可以将后备副本重新装入,将数据库恢复到转储时的状态。静态转储:在系统中无运行事务时进行的转储操作,如上图所示。静态转储简单,但必须等待正运行的用户事务结束才能进行。同样,新的事务必须等待转储结束才能执行。显然,这会降低数据库的可用性。动态转储:指转储期间允许对数据库进行存取或修改。动态转储可克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行。但是,转储结束时后援副本上的数据并不能保证正确有效。因为转储期间运行的事务可能修改了某些数据,使得后援副本上的数据不是数据库的一致版本。为此,必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件( 109 fil
23、e )。这样,后援副本加上日志文件就能得到数据库某一时刻的正确状态。转储还可以分为海量转储和增量转储两种方式。海量转储是指每次转储全部数据库。增量转储则指每次只转储上一次转储后更新过的数据。从恢复角度看,使用海量转储得到的后备副本进行恢复一般说来更简单些。但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效。27. 什么是日志文件?为什么要设立日志文件?答:(1)日志文件是用来记录事务对数据库的更新操作的文件。(2) 设立日志文件的目的是:进行事务故障恢复;进行系统故障恢复;协助后备副本进行介质故障恢复。28. 登记日志文件时为什么必须先写日志文件,后写数据库?答:把对数据的修改写
24、到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO 操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。29. 数据库运行过程中常见的故障有哪几类?各类故障如何恢复?答:事务故障的恢复:事务故障的恢复是由DBMS自动完成的,对用户是透明的。 DBMs 执行恢复步骤是:(1)反向扫描文件日志(即从最后向前扫描日志文件)
25、,查找该事务的更新操作;(2)对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库;(3)继续反向扫描日志文件,做同样处理;(4)如此处理下去,直至读到此事务的开始标记,该事务故障的恢复就完成了。系统故障的恢复:系统故障可能会造成数据库处于不一致状态:一是未完成事务对数据库的更新可能已写入数据库;二是已提交事务对数据库的更新可能还留在缓冲区,没来得及写入数据库。因此恢复操作就是要撤销(UNDO )故障发生时未完成的事务,重做(REDO )已完成的事务。系统的恢复步骤是:(1)正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO 队列)和未完成的事务队列(uNDO 队列
26、)。(2)对撤销队列中的各个事务进行UNDO 处理。进行UNDO 处理的方法是,反向扫描日志文件,对每个UNDO 事务的更新操作执行逆操作,即将日志记录中“更新前的值”Before Image )写入数据库。( 3 )对重做队列中的各个事务进行REDO 处理。进行REDO 处理的方法是:正向扫描日志文件,对每个REDO 事务重新执行日志文件登记的操作。即将日志记录中“更新后的值”Afte , Image )写入数据库。介质故障的恢复:介质故障是最严重的一种故障。恢复方法是重装数据库,然后重做已完成的事务。具体过程是:( 1 ) DBA 装入最新的数据库后备副本(离故障发生时刻最近的转储副本),
27、 使数据库恢复到转储时的一致性状态;( 2 ) DBA 装入转储结束时刻的日志文件副本;( 3 ) DBA 启动系统恢复命令,由DBMS 完成恢复功能,即重做已完成的事务。30.数据库中为什么要有恢复子系统?它的功能是什么?答:因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。恢复子系统的功能是:把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)。31.数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据?答:数据库系统中可能发生各种各样的故障,大致可以分以下几类:(1)事务内部的故障;(2)系统故障;(3)介质故障;(4)计算机病毒。事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据库数据。32.数据库恢复的基本技术有哪些?答:数据转储和登录日志文件是数据库恢复的基本技术。当系统运行过程中发生故障,利用转储的数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。