数据库系统原理及应用教程 第4版 教学课件 作者 刘瑞新第8章_第1页
数据库系统原理及应用教程 第4版 教学课件 作者 刘瑞新第8章_第2页
数据库系统原理及应用教程 第4版 教学课件 作者 刘瑞新第8章_第3页
数据库系统原理及应用教程 第4版 教学课件 作者 刘瑞新第8章_第4页
数据库系统原理及应用教程 第4版 教学课件 作者 刘瑞新第8章_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本章教学目标、重点和难点教学目标:使学生掌握数据库安全性控制方法,掌握数据库完整性控制方法,了解数据库并发控制的基本概念和方法,了解数据库系统故障的种类,熟悉数据恢复的实现技术。教学重点:数据库安全性控制,数据库完整性约束条件及完整性控制的一般方法,并发控制的基本概念,封锁及封锁协议,数据恢复的实现技术。教学难点:用户、角色和权限管理方法,数据库完整性功能及实现方法,并发控制机制。第8章数据库保护技术8.1数据库安全性控制8.2数据库完整性控制8.3数据库并发控制8.4数据库恢复技术

8.1数据库安全性

数据库的安全性是指保护数据库,以防止不合法的使用造成的数据泄密、更改或破坏。

8.1.1数据库安全性控制的一般方法用户DBMSOSDB

用户标识和鉴别存取控制操作系统安全保护密码存储1.用户标识与鉴别(1)用输入用户名(用户标识号)来标明用户身份。

系统内部记录着所有合法用户的标识。系统对输入的用户名与合法用户名对照,鉴别此用户是否为合法用户。

(2)通过回答口令标识用户身份。

系统常常要求用户输入口令,只有口令正确才能进入系统。为保密起见,口令由用户自己定义并可以随时变更。为防止口令被人窃取,用户在终端上输入口令时,不把口令的内容显示在屏幕上,而用字符“*”替代其内容。

(3)通过回答对随机数的运算结果表明用户身份。

系统提供一个随机数,用户根据预先约定的计算过程或计算函数进行计算,并将计算结果输给到计算机。系统根据用户计算结果判定用户是否合法。2.存取控制(1)存取机制的构成。

1)定义用户权限,并将用户权限登记到数据字典中。

2)当用户提出操作请求时,系统进行权限检查,拒绝用户的非法操作。

(2)存取机制的类别。

1)自主存取控制(DAC)。用户对于不同的对象有不同的存取权限;不同的用户对同一对象的存取权限也各不相同;用户可将自己拥有的存取权限转授给其他用户。

2)强制存取控制(MAC)。每一个数据对象被标以一定的密级;每一个用户也被授予某一个级别的许可证;对于任意一个对象,只有具有合法许可证的用户才可以存取。

3.自主存取控制方法(1)关系中的用户权限。用户权限主要包括数据对象和操作类型两个要素。定义用户的存取权限称为授权,通过授权规定用户可以对哪些数据进行什么样的操作。(2)SQL的数据控制功能。

GRANT语句(授权)和REVOKE语句(收权)。

1)数据对象的创建者自动获得对于该数据对象的所有操作权限。

2)获得数据操作权的用户可以通过GRANT语句把权限转授给其他用户。(3)授权机制的性能。

1)权限定义中数据对象范围越小授权系统就越灵活。授权粒度越细,授权子系统就越灵活,但系统定义与检查权限的开销也会增大。

2)权限定义中能够谓词的授权系统比较灵活。

3)权限定义中能够谓词、且存取谓词中能够引用系统变量的授权系统更加灵活。(4)自主存取控制的不足之处。系统对权限的授予状况无法进行有效的控制可能造成数据的无意泄露。4.强制存取控制方法

(1)主体、客体及敏感度标记。主体是系统中的活动实体,它包括用户和进程;客体是系统中的被动实体,包括基表、视图等;DBMS为主体和客体的每个实例都设置一个敏感度标记,如绝密、机密、可信、公开;主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。(2)主体对客体的存取规则。

1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。

2)仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。

(3)由DAC和MAC共同构成的安全机制。系统在安全检察时,首先进行自主存取控制检察,然后进行强制存取控制检察,两者都通过后,用户才能执行其数据存取操作。

5.视图、审计和数据加密机制视图:为不同的用户定义不同的视图,通过视图把数据对象限制在一定范围内,把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。审计:把用户对数据库的所有操作自动记录下来放入审计日志中,一旦发生数据被非法存取,DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。加密:根据一定的算法将原始数据(明文,Plaintext)变换为不可直接识别的格式(密文,Ciphertext),从而使得不知道解密算法的人无法获得数据的内容。

1)替换方法。使用密钥将明文中的每一个字符转换为密文中的字符。

2)置换方法。仅将明文的字符按不同的顺序重新排列。

加密方法主要有两种:8.1.2SQLServer的安全体系结构

1.SQLServer的安全体系结构

(1)WindowsNT操作系统的安全防线:建立用户组,设置帐号并注册,同时决定不同的用户对不同系统资源的访问级别。

(2)SQLServer的运行安全防线:

通过另一种帐号设置来创建附加安全层。

(3)SQLServer数据库的安全防线:

特定数据库都有自己的用户和角色,该数据库只能由它的用户或角色访问,其他用户无权访问其数据。

(4)SQLServer数据库对象的安全防线:

对权限进行管理,保证合法用户既使进入了数据库也不能有超越权限的数据存取操作,即合法用户必须在自己的权限范围内进行数据操作。

2.SQLServer的安全认证模式(1)Windows(S)安全认证模式

通过使用Windows网络用户的安全性来控制用户对SQL服务器的登录访问。它允许一个网络用户登录到一个SQL服务器上时不必再提供一个单独的登录帐号及口令。(2)混合安全认证模式

如果用户网络协议支持可信任连接,则可使用Windows(S)安全模式;如果用户网络协议不支持可信任连接,则在Windows(S)安全认证模式下会登录失败,SQLServer安全认证模式将有效。SQLServer安全认证模式要求用户必须输入有效的SQLServer登录帐号及口令。3.设置SQLServer的安全认证模式1)在企业管理器中,扩展开SQL服务器组,右键击SQL服务器,在弹出单中选择“属性”项.

2)在属性对话框中,选择“安全性”选项卡。

3)在安全性栏选择安全认证模式。

8.1.3SQLServer的用户和角色管理1.登录的管理

登录(亦称Login用户)通过帐号和口令访问SQLServer的数据库。

(1)查看安全性文件夹的内容

进入企业管理器,打开SQL服务器,选择安全性文件夹。

(2)创建一个登录用户用右键击登录文件夹,在弹出单中选择“新建登录”,出现登录属性对话框。;选择常规选项卡,输入用户的一般特征;选择服务器角色选项卡,确定用户所属服务器角色;选择数据库访问选项卡,确定用户能访问的数据库和所属的数据库角色。2.数据库用户的管理

(1)dbo用户:数据库拥有者或数据库创建者,在其所拥有的数据库中拥有所有的操作权限。dbo的身份可被重新分配给另一个用户,系统管理员Sa可以作为他所管理系统的任何数据库的dbo用户。(2)guest用户:如果guest用户在数据库存在,则允许任意一个登录用户作为guest用户访问数据库。可以将自己数据库的guest用户删除,以防止非数据库用户的登录用户对数据库进行访问。

(3)创建新的数据库用户1)在企业管理器中,右击用户文件夹,在弹出单中选择“新建数据库用户”;2)在登录名栏中,选择SQL服务器登录用户名,在用户名栏中输入数据库用户名。在数据库角色栏中选择参加的角色。

3.数据库角色的管理

(1)在数据库角色中增加或移去用户1)展开SQL服务器、数据库文件夹,选中角色文件夹。2)用选中要加入的角色,右击它,在弹出单中选择“属性”。3)单击“添加”按钮后,出现选择该数据库用户的对话框,选择要加入角色的用户,单击“确定”。4)要移走一个用户,在用户栏中选中它,后单击“删除”。

(2)创建新的数据库角色1)打开SQL服务器组、服务器的数据库文件夹。2)选中角色子文件夹,右击任意角色,在弹出单中选择“新建数据库角色”。3)输入新角色名;在用户栏增加或移去角色的用户;确定角色的类型。

8.1.4SQLServer的权限管理

1.SQLServer权限种类:对象权限和语句权限

Transact-SQL数据库对象SELECT(查询)表、视图、表和视图中的列UPDATE(修改)表、视图、表的列INSERT(插入)表、视图DELETE(删除)表、视图EXECUTE(调用过程)存储过程DRI(声明参照完整性)表、表中的列Transact-SQL语句权限说明CREATEDATABASE创建数据库,由SA授予SQL服务器用户或角色CREATEDEFAULT创建缺省CREATEPROCEDURE创建存储过程CREATERULE创建规则CREATETABLE创建表CREATEVIEW创建视图BACKUPDATABASE备份数据库BACKUPLOG备份日志文件2.对象权限的管理

1)选中一个数据库对象。击鼠标右键,使之弹出菜单。

2)选择“全部任务”中的“管理权限”项。出现对象权限对话框。

3)选择“列出全部用户/用户定义的数据库角色”项,或选择“仅列出对此对象具有权限的用户/用户定义的数据库角色”项。

4)在权限表中对各用户或角色的各种对象操作权授予或撤消。

3.语句权限的管理

1)用鼠标右键击指定的数据库文件夹。出现数据库属性对话框。

2)选择“权限”选项卡,单击表中的各复选小方块可分别对各用户或角色授予、撤消和废除数据库的语句操作权限。8.2数据库完整性

8.2.1完整性约束条件及完整性控制数据完整性约束可以分为:表级约束,若干元组间、关系中以及关系之间联系的约束;元组级约束,元组中的字段组和字段间联系的约束;属性级约束,针对列的类型、取值范围、精度、排序等而制定的约束条件。完整性约束分为:静态约束,数据库每一确定状态时的数据对象所应满足的约束条件;动态约束,数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件1.完整性控制机制的功能及执行约束(1)完整性控制机制应具有的功能。

1)定义完整性功能,提供定义完整性约束条件的机制。

2)检查完整性功能,检查用户发出的操作请求,看其是否违背了完整性约束条件。

3)控制完整性功能,监视数据操作的整个过程,如果发现有违背了完整性约束条件的情况,则采取一定的动作来保证数据的完整性。(2)立即执行约束和延迟执行约束。

有关数据操作语句执行完后立即进行完整性检查为立即执行约束;在整个事务执行结束后再进行完整性检查为延迟执行约束。

2.实现参照完整性要考虑的几个问题(1)外码能够接受空值的问题。(2)在被参照关系中删除元组的问题。

1)级联删除:将外码表中所有外码值与主码表中要删除的元组主码值相同的元组一起删除。如果外码表同时又是另一个关系的主码表,则这种删除操作会继续级联下去。

2)受限删除:仅当外码表中没有任何元组的外码值与主码表中要删除元组的主码值相同时,系统才执行删除操作,否则拒绝此删除操作。

3)置空值删除:删除主码表的元组,并将外码表中相应元组的外码值置空值。

(3)在参照关系中插入元组时的问题。1)受限插入。仅当主码表存在相应的元组,其主码值与外码表插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。2)递归插入。该策略首先在主码表中插入相应的元组,其主码值等于外码表插入元组的外码值,然后向外码表插入元组。(4)修改关系的主码问题。1)不允许修改主码。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。2)允许修改主码。允许修改关系主码,但必须保证主码的唯一性和非空,否则拒绝修改。

(5)修改表是被参照关系的问题。1)级联修改。如果要修改主码表中的某个元组的主码值,则外码表中相应的外码值也作相应的修改。2)拒绝修改。如果外码表中,有外码值与主码表中要修改的主码值相同的元组,则拒绝修改。3)置空值修改。修改主码表的元组,并将外码表中相应元组的外码值置空值。

8.2.2SQLServer的数据库完整性及实现方法1.SQLServer的数据完整性的种类(1)域完整性。域完整性为列级和元组级完整性。它为列或列组指定一个有效的数据集,并确定该列是否允许为空。(2)实体完整性。实体完整性为表级完整性,它要求表中所有的元组都应该有一个惟一的标识符,这个标识符就是平常所说的主码。(3)参照完整性。参照完整性是表级完整性,它维护参照表中的外码与被参照表中主码的相容关系。如果在被参照表中某一元组被外码参照,那么这一行既不能被删除,也不能更改其主码。2.SQLServer数据完整性的两种方式(1)声明数据完整性:通过在对象定义中定义、系统本身自动强制来实现。声明数据完整性包括各种约束、缺省和规则。(2)过程数据完整性:通过使用脚本语言。完整性类型约束类型完整性功能描述域完整性DEFAULT插入数据时,如果没有明确提供列值,则用缺省值作为该列的值CHECK指定某个列或列组可以接受值的范围,或指定数据应满足的条件实体完整性PRIMARYKEY指定主码,确保主码值不重复,并不允许主码为空值UNIQUE指出数据应具有惟一值,防止出现冗余参照完整性FOREIGNKEY定义外码、被参照表和其主码8.3数据库并发控制

控制数据库,防止多用户并发使用数据库时造成数据错误和程序运行错误,保证数据的完整性。

8.3.1事务及并发控制的基本概念

1.事务的概念

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。在SQL语言中,定义事务的语句有三条:

BEGINTRANSACTION;

COMMIT;

ROLLBACK;2.事务并发操作可能产生的数据不一致问题

T1T2T1T2T1T21)读A=20

1)读A=50

读B=100求和=150

1)读C=100C←C*2写回C

2)读A=203)A←A-1写回A=19

2)

读B=100B←B*2写回B=2002)

读C=2004)A←A-1写回A=19(A少减一次)3)读A=50

读B=200

和=250(验算不对)

3)ROLLBACKC恢复100(错误的C值已读出)(a)丢失数据(b)不可重复读(c)读“脏”数据8.3.2封锁及封锁协议

封锁是使事务对它要操作的数据有一定的控制能力。封锁具有3个环节:申请加锁,事务在操作前要对它将使用的数据提出加锁请求;获得锁,当条件成熟时,系统允许事务对数据加锁,从而事务获得数据的控制权;释放锁,完成操作后事务放弃数据的控制权。

1.锁的类型

(1)排它锁(ExclusiveLocks,简称X锁)。

称为独占锁或写锁。一旦事务T对数据对象A加上排它锁(X锁),则只允许T读取和修改A,其他任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。(2)共享锁(ShareLocks,简称S锁)。

又称读锁。如果事务T对数据对象A加上共享锁(S锁),其他事务只能再对A加S锁,不能加X锁,直到事务T释放A上的S锁为止。

2.封锁协议(1)一级封锁协议:事务T在修改数据之前必须先对其加X锁,直到事务结束才释放。

(2)二级封锁协议:事务T对要修改数据必须先加X锁,直到事务结束才释放X锁;对要读取的数据必须先加S锁,读完后即可释放S锁。

(3)三级封锁协议:事务T在读取数据之前必须先对其加S锁,在要修改数据之前必须先对其加X锁,直到事务结束后才释放所有锁。

T1T2T1T2T1T21)XlockA获得

1)SlockASlockB

读A=50读B=100A+B=150

1)XlockC

读C=100C←C*2写回C=200

2)读A=20

XlockA等待3)A←A-1

写回A=19CommitUnlockA等待等待等待

2)

XlockB等待等待2)

SlockC等待等待3)读A=50

读B=100A+B=150CommitUnlockAUnlockB等待

3)ROLLBACK(C恢复为100)UnlockC

等待等待

4)

获得XlockA读A=19A←A-1写回A=18CommitUnlock

4)

获得Xlock读B=100B←B*2写回B=200CommitUnlockB4)

获得SlockC读C=100CommitCUnlockC(a)没有丢失修改(b)可重复读(c)不读“脏”数据用封锁机制解决三种数据不一致性的例子

X锁S锁一致性保证

操作结束释放事务结束释放操作结束释放事务结束释放不丢失修改不读“脏”数据可重复读一级协议

二级协议

√√

√√

三级协议

√√√√8.3.3封锁出现的问题及解决方法1.活锁和死锁

(1)活锁:在多个事务请求对同一数据封锁时,总是使某一用户等待的情况称为活锁。解决活锁的方法是采用先来先服务的方法,即对要求封锁数据的事务排队,使前面的事务先获得数据的封锁权。

(2)死锁:多事务交错等待的僵持局面称为死锁。解决死锁有两类方法:一是采用一定措施来预防死锁的发生;二是采用一定手段定期诊断系统中有无死锁,若有则解除之。防死锁通常有两种方法:

1)一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则该事务不能继续执行。

2)顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。2.并发调度的可串行性和

多个事务并发执行的结果与按串行执行的结果相同,这种调度策略称为可串行化(Serializable)的调度,反之称为不可串行化调度。3.两段锁协议1)在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。

2)在释放一个封锁之后,事务不再申请并获得对该数据的封锁。8.4数据库恢复技术

8.4.1故障的种类

1.事务内部的故障:有的是可以通过事务程序本身发现的,但是更多的则是非预期的,它们不能由事务处理程序处理。例如运算溢出、并发事务发生死锁而被选中撤消该事务、违反了某些完整性限制等。

2.系统故障:造成系统停止运转的任何事件,从而使得系统必须重新启动。

3.介质故障:外存故障,例如磁盘损坏、磁头碰撞,瞬时磁场干扰等。

4.计算机病毒:一种人为的故障或破坏。

5.用户操作错误:由于用户有意或无意的操作也可能删除数据库中的有用的数据或加入错误的数据,这同样会造成一些潜在的故障。

8.4.2数据恢复的实现技术1.数据转储

(1)静态转储和动态转储。

(2)海量转储和增量转储。2.登记日志文件(Logging)

(1)日志文件的格式和内容。

日志文件是用来记录对数据库的更新操作的文件。

(2)日志文件的作用。

日志文件的主要用于数据库恢复。

当数据库文件毁坏后,可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,再利用日志文件,把已完成的事务进行重做处理。

8.4.3SQLServer的数据备份和恢复机制1.SQLServer的备份形式和操作方式

(1)三种备份形式。

1)完全备份:海量备份,将数据库完全复制到备份文件中。

2)事务日志备份:将备份发生在数据库上的事务。

3)增量备份:备份最近一次完全备份以后数据库发生变化的数据。

(2)数据库进行备份和恢复操作的方式。

1)静态的备份和恢复方式。在进行数据备份或恢复操作时,SQL服务器不接受任何应用程序的访问请求,只执行备份或恢复操作。

2)动态的备份和恢复方式。在进行数据备份或恢复操作时,SQL服务器同时接受应用程序的访问请求。2.SQLServer的数据备份或恢复策略备份步骤是:

1)定期进行完全备份,例如一天一次或两天一次。

2)更频繁地进行事务日志备份,如一小时一次或两小时一次。恢复步骤是:

1)用最近一次完全备份恢复数据库。

2)用最近一次完全备份之后创建的所有事务日志备份,按顺序恢复完全备份之后发生在数据库上的所有操作。

3)在同时使用数据库完全备份和事务日志备份的基础上,再以增量备份作为补充。

3.SQLServer的数据备份方法(1)创建备份设备:找到备份文件夹,右键击它,在弹出单中选择“新建备份设备”项;在备份设备属性对话框中,输入备份设备的逻辑名字,确定备份设备的文件名,击“确定”按钮

(2)备份数据库1)右击要备份的数据库;在弹出单上选择“全部任务”中的“备份数据库”项。2)在常规卡中:选要数据库;取名称;选择完全备份、差异备份或事务日志;确定文件存放位置;选择备份覆盖模式;设置数据库备份计划。3)在选项卡中设置“完成后验证备份”复选框等选项。4.SQLServer的数据恢复方法

(1)用鼠标右键击要进行数据恢复的数据库。在弹出单中选择“全部任务”中的“还原数据库”项。

(2)

选择还原栏中的“数据库”;选择要恢复的数据库名和要还原的第一个备份文件;在备份设备表中,选择要使用的备份文件。

习题88.1答:数据库的安全性是指保护数据库,以防止不合法的使用数据泄密、更改或破坏。8.2数据库安全性和计算机系统的安全性有什么关系?8.2答:数据库安全性是计算机系统的安全性的一部分,数据库系统不仅要利用计算机系统的安全性保证自己系统的安全性,同时还会提供专门的手段和方法,使安全性能更好。例如,在用户要求进入计算机系统时,系统首先根据用户输入的用户标识进行身份鉴定,只有合法的用户才准许进入计算机系统;对已进入的用户,DBMS还要进行存取控制,只允许用户执行合法操作;操作系统也会提供相应的保护措施;数据最后还可以以密码形式存储到数据库中。8.3答:①用户标识与鉴别;②存取控制;③自主存取控制方法;④强制存取控制方法;⑤视图机制;⑥审计;⑦数据加密。8.4答:①GRANT(授权)语句例:GRANTSELECT,INSERTON学生

TO张勇

WITHGRANTOPTION;②REVOKE(收回)语句例:REVOKEINSERTON学生

FROM张勇;8.5答:数据库的完整性是指数据的正确性和相容性。8.6答:数据库的完整性是指数据的正确性和相容性。数据库的安全性是指保护数据库,以防止不合法的使用造成的数据泄密、更改或破坏。其相同点是两者都是对数据库中的数据进行控制,各自所实现的功能目标不同。8.7答:数据完整性约束是为了保证进入数据库中的数据的有效性而定义的数据规则。它可以分为以下两类:①针对不同的对象可以分为表级约束、元组级约束和属性级约束(也称列约束):表级约束是若干元组间、关系中及关系之间的约束;元组级约束则是元组中的字段组和字段间联系的约束;属性级约束主要是针对列的类型、取值范围、精度、排序等而制定的约束条件。②针对数据对象的状态可以分为静态约束和动态约束:静态约束是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态稳定时的约束;动态约束是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。8.8答:①定义和存储完整性功能;②检查完整性功能;③控制完整性功能。8.9答:①外码能够接受空值的问题;②在被参照关系中删除元组时,采用级联删除、受限删除或置空值删除的方法处理参照关系;③在参照关系中插入元组时,可以使用受限插入、递归插入两种方法处理参照关系;④修改关系的主码时,可以采用不允许修改主码、或允许修改关系主码,但必须保证主码的惟一性和非空性方法处理参照关系;⑤修改被参照关系时,可以采用级联修改、拒绝修改和置空值修改方法处理参照关系。8.10答:数据库的并发控制就是为了控制数据库,防止多用户并发使用数据库时造成数据错误和程序运行错误,保证数据的完整性。8.11答:并发操作可能会产生丢失修改、不可重复读和读“脏”数据的数据不一致问题。用封锁的方法能避免这些不一致的情况。8.12什么是封锁?8.12答:封锁是使事务对它要操作的数据有一定的控制能力。封锁具有三个环节:第一个环节是申请加锁;第二个环节是获得锁;第三个环节是释放锁。8.13答:基本的封锁类型有两种:排它锁(简称X锁)和共享锁(简称S锁)。排它锁也称为独占或写锁。一旦事务T对数据对象A加上排它锁,则只允许T读取和修改A,其他任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。共享锁又称读锁。如果事务T对数据对象A加上共享锁,其他事务只能再对A加S锁,不能加X锁,知道事务T释放A上的S锁为止。8.14答:封锁机制作为并发控制的重要手段,利用封锁的特性和封锁协议,它在并发操作保证事务的隔离性,用正确的方式调度并发操作,是一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。8.15什么是封锁协议?不同级别的封锁协议的主要区别是什么?答:在对数据对象加锁时,还需要约定一些规则,这些规则称为封锁协议。一级封锁协议:是事务T在修改数据之前必须先对其加X锁,直到事务结束才释放,一级封锁协议可有效地防止丢失修改,并能够保证事务T的可恢复性。一级封锁由于没有对数据进行加锁,所以不能保证可重复读和不读“脏”数据。二级封锁协议:是事务T对要修改的数据必须先加X锁,直到事务结束才释放X锁;要读取的数据必须先加S锁,读完后即可释放S锁。二级封锁协议不但能够防止丢失修改,还可进一步防止读“脏”数据。三级封锁协议:是事务T在读取数据之前必须先对其加S锁,在要修改数据之前必须先对其加X锁,直到事务结束后才释放所有锁。由于三级封锁协议强调即使事务读完数据A之后也不释放S锁,从而使得别的事务无法更改数据A。三级封锁协议不但防止了丢失修改和不读“脏”数据,而且防止了不可重复的读。8.16不同封锁协议与系统一致性级别的关系是什么?答:一级封锁协议可有效地防止丢失修改,并能够保证事务T的可恢复性。一级封锁由于没有对数据进行加锁,所以不能保证可重复读和不读“脏”数据。二级封锁协议不但能够防止丢失修改,还可进一步防止读“脏”数据。由于三级封锁协议强调即使事务读完数据A之后也不释放S锁,从而使别的事务无法更改数据A。三级封锁协议不但防止了丢失修改和不读“脏”数据,而且防止了不可重复读。8.17什么是活锁?什么是死锁?答:在多个事务请求对同一数据封锁时,总是使某一用户等待的情况称为活锁;多事务交错等待的僵持局面称为死锁。8.18试述活锁的产生原因和解决方法。答:活锁是封锁的无序造成的。解决方法是采用先来先服务的方法,即对要求封锁数据的事务排队,使前面的事务先获得数据的封锁权。8.19请给出预防死锁的若干方法。答:预防死锁通常有以下两种方法:①一次封锁法,就是要求每个事务必须一次将所有要使用的数据全部加锁,否则该事务不能继续执行;②顺序封锁法,是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。8.20请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?答:检测死锁发生的一种方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁,使其他事务得以继续运行下去。解除死锁问题有两类方法:一类方法是采用一定措施来预防死锁的发生;另一类方法是允许发生死锁,然后采用一定手段定期诊断系统中有无死锁,若有则解除之。8.21什么样的并发调度是正确的调度?答:如果一个事务运行过程中没有其他事务同时运行,即没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正常的,可串行性是并发事务正确性的准则,为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。8.22试述两段锁协议的概念。答:所谓两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁:①在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;②在释放一个封锁之后,事务不再申请并获得对该数据的封锁。即每个事务分成两个阶段,第一阶段是申请和获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。8.23为什么要引进意向锁?意向锁的含义是什么?答:事务T要对关系R1加X锁时,系统只需检查根结点数据库和关系R1是否已加了不相容的锁,而不再需要搜索和检查R1中的每一个元组是否加了X锁,对任一元组加锁,必须先对它所在的关系加意向锁。意向锁的含义是:如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任何一结加锁时,必须先对它的上层结点加意向锁。8.24理解并解释下列术语的含义:封锁、活锁、死锁、排它锁、共享锁、并发事务的调度、可串行化的调度、两段锁协议。答:①封锁:封锁是使事务对它要操作的数据有一定的控制能力。②活锁:这种在多个事务请求对同一数据封锁时,总是使某一用户等待的情况称为活锁。③死锁:这种多事务交错等待的僵持局面称为死锁。④排它锁:排它锁也称为独占或写锁。一旦事务T对数据对象A加上排它锁,则只允许T读取和修改A,其他任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。⑤共享锁:共享锁又称读锁。如果事务T对数据对象A加上共享锁,其他事务只能再对A加S锁,不能加X锁,知道事务T释放A上的S锁为止。⑥并发事务的调度:多个事务并发执行调度策略称为并发事务的调度。⑦可串行化的调度:如果多个事务并发执行的结果与按串行执行的结果相同,这种调度策略称为可串行化的调度。⑧两段锁协议:所谓两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁。8.25说明数据不一致性中读“脏”数据的含义。答:事务T1修改了某一数据并将其写回数据库,随后T2读入这个被T1修改过的数据,然而,T1由于某种原因被撤销了,于是它所修改的数据恢复原值。这样一来,T2所读取的数据就与数据库中的数据不同了,这种现象就称为读“脏”数据。8.26事务中的提交和回滚是什么意思?答:事务中的提交(COMMIT)是提交事务的所有操作。具体说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。事务中的回滚(ROLLBACK)是数据库滚回到事务开始时的状态。具体地说就是,在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤消,使数据库回滚到事务开始时的状态。8.27为什么要进行数据库转储,比较各种数据转储方法?答:所谓转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。当数据库遭到破坏后可以将后备副本重新装入,但重装后备副本只能将数据库恢复到转储时的状态,要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务。转储可分为静态转储和动态转储。静态转储是在系统中无运行事务时进行的转储操作。显然,静态转储得到的一定是一个数据一致性的副本,转储简单,但转储必须等待正运行的用户事务结束才能进行,会降低数据库的可用性。动态转储是指转储期间允许对数据库进行存取或修改。必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。转储还可以分为海量转储和增量转储两种方式。海量转储是指每次转储全部数据库。增量转储则指每次只转储上一次转储后更新过的数据。从恢复角度看,使用海量转储得到的后备副本进行恢复一般说来会更方便些。但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效。8.28并发控制可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏”数据。产生上述三类数据不一致性的主要原因是并发操作破坏了事务的隔离性。并发控制就是要用正确的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论