资源预览内容
第1页 / 共95页
第2页 / 共95页
第3页 / 共95页
第4页 / 共95页
第5页 / 共95页
第6页 / 共95页
第7页 / 共95页
第8页 / 共95页
第9页 / 共95页
第10页 / 共95页
亲,该文档总共95页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
返回返回返回返回第第5 5章章 数据库安全保护数据库安全保护1返回返回返回返回本章概要本章概要 随着计算机的普及,数据库的使用也越来越广泛。随着计算机的普及,数据库的使用也越来越广泛。v例如,一个企业的全部信息,国家机构的事务管理信息,国例如,一个企业的全部信息,国家机构的事务管理信息,国防情报等机密信息,都集中地存放在数据库中。防情报等机密信息,都集中地存放在数据库中。在前面我们已经讲到,数据库系统中的数据是由在前面我们已经讲到,数据库系统中的数据是由DBMSDBMS统一进行管理和控制的。统一进行管理和控制的。为了适应和满足数据共享的环境和要求,为了适应和满足数据共享的环境和要求,DBMSDBMS要保证要保证整个系统的正常运转,防止数据意外丢失和不一致数整个系统的正常运转,防止数据意外丢失和不一致数据的产生,以及当数据库遭受破坏后能迅速地恢复正据的产生,以及当数据库遭受破坏后能迅速地恢复正常,这就是常,这就是数据库的安全保护数据库的安全保护。DBMSDBMS对数据库的安全保护功能是通过四方面实现的,对数据库的安全保护功能是通过四方面实现的,即安全性控制、完整性控制、并发性控制和数据库恢即安全性控制、完整性控制、并发性控制和数据库恢复。复。本章就是从这四方面来介绍数据库的安全保护功能:本章就是从这四方面来介绍数据库的安全保护功能:v要求掌握安全性、完整性、并发性和数据库恢复的含义,要求掌握安全性、完整性、并发性和数据库恢复的含义,v掌握这四方面分别实现安全保护功能的方法。掌握这四方面分别实现安全保护功能的方法。 2返回返回返回返回5.1.1 5.1.1 数据库安全性的含义数据库安全性的含义数数据据库库的的安安全全性性是是指指保保护护数数据据库库,以以防防止止非非法法使使用用所所造成数据的泄露、更改或破坏。造成数据的泄露、更改或破坏。安全性问题有许多方面,其中包括:安全性问题有许多方面,其中包括:(1 1)法法律律、社社会会和和伦伦理理方方面面,例例如如请请求求查查询询信信息息的的人人是是不不有合法的权力。有合法的权力。(2 2)物物理理控控制制方方面面,例例如如计计算算机机机机房房或或终终端端是是否否应应该该加加锁锁或用其他方法加以保护。或用其他方法加以保护。(3 3)政政策策方方面面,确确定定存存取取原原则则,允允许许哪哪些些用用户户存存取取哪哪些些数数据。据。(4 4)运行方面,使用口令时,如何使口令保持秘密。)运行方面,使用口令时,如何使口令保持秘密。(5 5)硬硬件件控控制制方方面面,CPUCPU是是否否提提供供任任何何安安全全性性方方面面的的功功能能,诸如存储保护键或特权工作方式。诸如存储保护键或特权工作方式。5.1 5.1 数据库的安全性数据库的安全性3返回返回返回返回(6 6)操操作作系系统统安安全全性性方方面面,在在主主存存储储器器和和数数据据文文件件用用过过以以后后,操操作作系系统统是是否否把把它它们们的的内内容容清清除除掉掉。(7 7)数数据据库库系系统统本本身身安安全全性性方方面面。这这里里讨讨论论的的是是数数据据库库本本身身的的安安全全性性问问题题,即即主主要要考考虑虑安安全保护的策略,尤其是控制访问的策略。全保护的策略,尤其是控制访问的策略。5.1.2 5.1.2 安全性控制的一般方法安全性控制的一般方法安安全全性性控控制制是是指指要要尽尽可可能能地地杜杜绝绝所所有有可可能能的的数数据据库库非非法法访问。访问。用用户户非非法法使使用用数数据据库库可可以以有有很很多多种种情情况况。例例如如,编编写写合合法法的的程程序序绕绕过过DBMSDBMS授授权权机机制制,通通过过操操作作系系统统直直接接存存取取、修改或备份有关数据。修改或备份有关数据。用用户户访访问问非非法法数数据据,无无论论它它们们是是有有意意的的还还是是无无意意的的, ,都都应应该该加加以以严严格格控控制制,因因此此,系系统统还还要要考考虑虑数数据据信信息息的的流流动问题并加以控制,否则有隐蔽的危险性。动问题并加以控制,否则有隐蔽的危险性。4返回返回返回返回因为数据的流动可能使无权访问的用户获得访因为数据的流动可能使无权访问的用户获得访问权利。问权利。v例如,甲用户可以访问文件例如,甲用户可以访问文件F1F1,但无权访问文件但无权访问文件F2F2,如果乙用户把文件如果乙用户把文件F2F2移至文件移至文件F1F1中之后,则由于中之后,则由于乙用户的操作,使甲用户获得了对文件乙用户的操作,使甲用户获得了对文件F2F2的访问权。的访问权。此外,用户可以多次利用允许的访问结果,经过逻此外,用户可以多次利用允许的访问结果,经过逻辑推理得到他无权访问的数据。辑推理得到他无权访问的数据。为防止这一点,访问的许可权还要结合过去访为防止这一点,访问的许可权还要结合过去访问的情况而定。问的情况而定。可见安全性的实施是要花费一定代价的,安全可见安全性的实施是要花费一定代价的,安全保护策略就是要以最小的代价来防止对数据的保护策略就是要以最小的代价来防止对数据的非法访问,层层设置安全措施。非法访问,层层设置安全措施。 5返回返回返回返回实实际际上上,安安全全性性问问题题并并不不是是数数据据库库系系统统所所独独有有的,所有计算机系统中都存在这个问题。的,所有计算机系统中都存在这个问题。在在计计算算机机系系统统中中,安安全全措措施施是是一一级级一一级级层层层层设设置的,安全控制模型如图置的,安全控制模型如图5.15.1所示。所示。 图5.1 安全控制模型用户标识和鉴定用户用户存取权限控制DBMSMMS操作系统安全保护OS密码存储DB6返回返回返回返回根据图根据图5.15.1的安全模型,当用户进入计算机系的安全模型,当用户进入计算机系统时,系统首先根据输入的用户标识进行身份统时,系统首先根据输入的用户标识进行身份的鉴定,只有合法的用户才准许进入系统。的鉴定,只有合法的用户才准许进入系统。对已进入系统的用户,对已进入系统的用户,DBMSDBMS还要进行存取控制,还要进行存取控制,只允许用户进行合法的操作。只允许用户进行合法的操作。DBMSDBMS是建立在操作系统之上的,安全的操作系是建立在操作系统之上的,安全的操作系统是数据库安全的前提。统是数据库安全的前提。操作系统应能保证数据库中的数据必须由操作系统应能保证数据库中的数据必须由DBMSDBMS访问,而不允许用户越过访问,而不允许用户越过DBMSDBMS,直接通过操作直接通过操作系统访问。系统访问。数据最后可以通过密码的形式存储到数据库中。数据最后可以通过密码的形式存储到数据库中。7返回返回返回返回5.1.2.1 5.1.2.1 用户标识和鉴定用户标识和鉴定(Identification and AuthenticationIdentification and Authentication)数数据据库库系系统统是是不不允允许许一一个个未未经经授授权权的的用用户户对对数数据据库库进进行操作的。行操作的。用用户户标标识识和和鉴鉴定定是是系系统统提提供供的的最最外外层层的的安安全全保保护护措措施施,其其方方法法是是由由系系统统提提供供一一定定的的方方式式让让用用户户标标识识自自己己的的名名字字或或身身份份,系系统统内内部部矛矛盾盾记记录录着着所所有有合合法法用用户户的的标标识识,每每次次用用户户要要求求进进入入系系统统时时,由由系系统统进进行行核核实实,通通过过鉴鉴定后才提供机器的使用权。定后才提供机器的使用权。用用户户标标识识和和鉴鉴定定的的方方法法有有多多种种,为为了了获获得得更更强强的的安安全全性,往往是多种方法并举,常用的方法有以下几种:性,往往是多种方法并举,常用的方法有以下几种:8返回返回返回返回1 1用用一一个个用用户户名名或或用用户户标标识识符符来来标标明明用用户户的的身身份份,系系统统以以此此来来鉴鉴别别用用户户的的合合法法性性。如如果果正正确确,则则可可进进入入下下一一步的核实,否则,不能使用计算机。步的核实,否则,不能使用计算机。 2 2用用户户标标识识符符是是用用户户公公开开的的标标识识,它它不不足足以以成成为为鉴鉴别别用用户户身身份份的的凭凭证证。为为了了进进一一步步核核实实用用户户身身份份,常常采采用用用用户户名名与与口口令令(PasswordPassword)相相结结合合的的方方法法, ,系系统统通通过过核核对对口令判别用户身份的真伪。口令判别用户身份的真伪。v系系统统有有一一张张用用户户口口令令表表,为为每每个个用用户户保保持持一一个个记记录录,包包括括用用户名和口令两部分数据。户名和口令两部分数据。v用户先输入用户名,然后系统要求用户输入口令。用户先输入用户名,然后系统要求用户输入口令。v为了保密,用户在终端上输入的口令不显示在屏幕上。为了保密,用户在终端上输入的口令不显示在屏幕上。v系统核对口令以鉴别用户身份。系统核对口令以鉴别用户身份。3 3通过用户名和口令来鉴定用户的方法简单易行,但该通过用户名和口令来鉴定用户的方法简单易行,但该方法在使用时,由于用户名和口令的产生和使用比较方法在使用时,由于用户名和口令的产生和使用比较简单,也容易被窃取,因此还可采用更复杂的方法。简单,也容易被窃取,因此还可采用更复杂的方法。 9返回返回返回返回v例例如如,每每个个用用户户都都预预先先约约定定好好一一个个过过程程或或者者函函数数,鉴鉴别别用用户户身身份份时时,系系统统提提供供一一个个随随机机数数,用用户户根根据据自自己己预预先先约约定定的的计计算算过过程程或或者者函函数数进进行行计计算算,系系统统根据计算结果辨别用户身份的合法性。根据计算结果辨别用户身份的合法性。v例例如如,让让用用户户记记住住一一个个表表达达式式,如如T=X+2Y,T=X+2Y,系系统统告告诉诉用用户户X=1,Y=2,X=1,Y=2,如如果果用用户户回回答答T=5T=5,则则证证实实了了该该用用户的身份。户的身份。v当当然然,这这是是一一个个简简单单的的例例子子,在在实实际际使使用用中中,还还可可以以设设计计复复杂杂的的表表达达式式,以以使使安安全全性性更更好好。系系统统每每次次提提供供不不同同的的X X,Y Y值值,其其他他人人可可能能看看到到的的是是X X、Y Y的的值值,但不能推算出确切的变换公式但不能推算出确切的变换公式T T。10返回返回返回返回5.1.2.2 5.1.2.2 用户存取权限控制用户存取权限控制用用户户存存取取权权限限指指的的是是不不同同的的用用户户对对于于不不同同的的数数据对象允许执行的操作权限。据对象允许执行的操作权限。在在数数据据库库系系统统中中,每每个个用用户户只只能能访访问问他他有有权权存存取的数据并执行有权使用的操作。取的数据并执行有权使用的操作。因此,必须预先定义用户的存取权限。因此,必须预先定义用户的存取权限。对对于于合合法法的的用用户户,系系统统根根据据其其存存取取权权限限的的定定义义对其各种操作请求进行控制,确保合法操作。对其各种操作请求进行控制,确保合法操作。存存取取权权限限由由两两个个要要素素组组成成,数数据据对对象象和和操操作作类类型。型。定定义义一一个个用用户户的的存存取取权权限限就就是是要要定定义义这这个个用用户户可以在哪些数据对象上进行哪些类型的操作。可以在哪些数据对象上进行哪些类型的操作。11返回返回返回返回在在数数据据库库系系统统中中,定定义义用用户户存存取取权权限限称称为为授授权权(AuthorizationAuthorization)。)。第第三三章章讨讨论论SQLSQL的的数数据据控控制制功功能能时时,我我们们已已知知道授权有两种:系统特权和对象特权。道授权有两种:系统特权和对象特权。v系系统统特特权权是是由由DBADBA授授予予某某些些数数据据库库用用户户,只只有有得得到到系统特权,才能成为数据库用户。系统特权,才能成为数据库用户。v对对象象特特权权可可以以由由DBADBA授授予予,也也可可以以由由数数据据对对象象的的创创建建者者授授予予,使使数数据据库库用用户户具具有有对对某某些些数数据据对对象象进进行行某些操作的特权。某些操作的特权。在在系系统统初初始始化化时时,系系统统中中至至少少有有一一个个具具有有DBADBA特特权权的的用用户户,DBADBA可可以以通通过过GRANTGRANT语语句句将将系系统统特特权或对象特权授予其他用户。权或对象特权授予其他用户。对对于于已已授授权权的的用用户户可可以以通通过过REVOKEREVOKE语语句句收收回回所所授予的特权。授予的特权。12返回返回返回返回这这些些授授权权定定义义经经过过编编译译后后以以一一张张授授权权表表的的形形式式存存放放在在数据字典中。数据字典中。授授权权表表主主要要有有三三个个属属性性,用用户户标标识识、数数据据对对象象和和操操作作类型类型。v用用户户标标识识不不但但可可以以是是用用户户个个人人,也也可可以以是是团团体体、程程序序和和终终端端。在非关系系统中,存取控制的数据对象仅限于数据本身。在非关系系统中,存取控制的数据对象仅限于数据本身。v而而关关系系系系统统中中,存存取取控控制制的的数数据据对对象象不不仅仅有有基基本本表表、属属性性列列等等数数据据本本身身,还还有有内内模模式式、外外模模式式、模模式式等等数数据据字字典典中中的的内内容。容。v下表列出了关系系统中的存取权限。下表列出了关系系统中的存取权限。数据对象操作类型模式模式建立、修改、检索外模式建立、修改、检索内模式建立、修改、检索数据表查找、插入、修改、删除属性列查找、插入、修改、删除13返回返回返回返回对对于于授授权权表表,一一个个衡衡量量授授权权机机制制的的重重要要指指标标就就是是授权粒度授权粒度,即可以定义的数据对象的范围;,即可以定义的数据对象的范围;在在关关系系数数据据库库中中,授授权权粒粒度度包包括括关关系系、记记录录或或属性属性。一一般般来来说说,授授权权定定义义中中粒粒度度越越细细,授授权权子子系系统统就越灵活就越灵活例例如如,表表5.25.2是是一一个个授授权权粒粒度度很很粗粗的的表表,它它只只能能对整个关系授权。对整个关系授权。v如如USER1USER1拥有对关系拥有对关系S S的一切权限;的一切权限;vUSER2USER2拥拥有有对对关关系系C C的的SELECTSELECT权权和和对对关关系系SCSC的的UPDATEUPDATE权;权;vUSER3USER3只可以向关系只可以向关系SCSC中插入新记录。中插入新记录。14返回返回返回返回表表5.2 5.2 授权表授权表1 1用户标识数据对象操作类型USER1关系SALLUSER2关系CSELECTUSER2关系SCUPDATEUSER3关系SCINSERT15返回返回返回返回表表5.35.3是一个授权粒度较为精细,它可以精确是一个授权粒度较为精细,它可以精确到关系的某一属性。到关系的某一属性。vUSER1USER1拥有对关系拥有对关系S S的一切权限;的一切权限;vUSER2USER2只能查询关系只能查询关系C C的的CNOCNO属性和修改关系属性和修改关系SCSC的的SCORESCORE属性;属性;vUSER3USER3可以向关系可以向关系SCSC中插入新记录。中插入新记录。 表表5.3 5.3 授权表授权表2 2 用户标识数据对象操作类型USER1关系SALLUSER2列C.CNOSELECTUSER2列SC.SCOREUPDATEUSER3关系SCINSERT16返回返回返回返回表表5.35.3的的授授权权表表中中的的授授权权只只涉涉及及到到数数据据名名(关关系系、记记录录或或属性的名字),而未提到具体的值。属性的名字),而未提到具体的值。系系统统不不必必访访问问具具体体的的数数据据本本身身,就就可可以以执执行行这这种种控控制制。这这种控制称为种控制称为“值独立值独立”的控制。的控制。表表5.45.4中中的的授授权权表表则则不不但但可可以以对对属属性性列列授授权权,还还可可以以提提供供与数值有关的授权,即可以对关系中的一组记录授权。与数值有关的授权,即可以对关系中的一组记录授权。v比如,比如,USER1USER1只能对计算机系的学生进行操作。只能对计算机系的学生进行操作。对对于于提提供供与与数数据据值值有有关关的的授授权权,系系统统必必须须能能够够支支持持存存取取谓谓词的操作。词的操作。表表5.4 5.4 授权表授权表3 3用户标识数据对象操作类型存取谓词USER1关系SALLDEPT=计算机USER2列C.CNOSELECTUSER2列SC.SCOREUPDATEUSER3关系SCINSERT17返回返回返回返回可可见见授授权权粒粒度度越越细细,授授权权子子系系统统就就越越灵灵活活,能能够够提供的安全性就越完善。提供的安全性就越完善。但但另另一一方方面面,如如果果用用户户比比较较多多,数数据据库库比比较较大大,授授权权表表将将很很大大,而而且且每每次次数数据据库库访访问问都都要要用用到到这这张表做授权检查,这将影响数据库的性能。张表做授权检查,这将影响数据库的性能。所所幸幸的的是是,在在大大部部分分数数据据库库中中,需需要要保保密密的的数数据据是是少少数数,对对于于大大部部分分公公开开的的数数据据,可可以以一一次次性性地地授权给授权给PUBLICPUBLIC,而不必再对每个用户个别授权。而不必再对每个用户个别授权。对对于于表表5.45.4中中与与数数据据值值有有关关的的授授权权,可可以以通通过过另另外一种数据库安全措施,即定义视图。外一种数据库安全措施,即定义视图。18返回返回返回返回5.1.2.3 5.1.2.3 定义视图定义视图为为不不同同的的用用户户定定义义不不同同的的视视图图,可可以以限限制制各各个个用用户户的的访访问范围。问范围。通通过过视视图图机机制制把把要要保保密密的的数数据据对对无无权权存存取取这这些些数数据据的的用用户户隐隐藏藏起起来来,从从而而自自动动地地对对数数据据提提供供一一定定程程度度的的安安全全保保护。例如,护。例如,USER1USER1只能对计算机系的学生进行操作,只能对计算机系的学生进行操作,v一种方法是通过授权机制对一种方法是通过授权机制对USER1USER1授权,如表授权,如表5.55.5所示,所示,v另一种简单的方法就是定义一个计算机系的视图。另一种简单的方法就是定义一个计算机系的视图。但但视视图图机机制制的的安安全全保保护护功功能能太太不不精精细细,往往往往不不能能达达到到应应用用系系统统的的要要求求,其其主主要要功功能能在在于于提提供供了了数数据据库库的的逻逻辑辑独独立性。立性。在在实实际际应应用用中中,通通常常将将视视图图机机制制与与授授权权机机制制结结合合起起来来使使用用,首首先先用用视视图图机机制制屏屏蔽蔽一一部部分分保保密密数数据据,然然后后在在视视图图上面再进一步定义存取权限。上面再进一步定义存取权限。19返回返回返回返回5.1.2.4 5.1.2.4 数据加密(数据加密(Data EncryptionData Encryption)前前面面介介绍绍的的几几种种数数据据库库安安全全措措施施,都都是是防防止止从从数数据据库库系系统统窃窃取取保保密密数数据据,不不能能防防止止通通过过不不正正常常渠渠道道非非法法访访问问数数据据,例例如如,偷偷取取存存储储数数据据的的磁磁盘盘,或或在在通通信信线线路路上上窃窃取取数数据据,为为了了防防止止这这些些窃窃密密活活动,比较好的办法是对数据加密。动,比较好的办法是对数据加密。数数据据加加密密是是防防止止数数据据库库中中数数据据在在存存储储和和传传输输中中失失密的有效手段。密的有效手段。加加密密的的基基本本思思想想是是根根据据一一定定的的算算法法将将原原始始数数据据(术术语语为为明明文文,Plain Plain texttext)加加密密成成为为不不可可直直接接识识别别的的格格式式(术术语语为为密密文文,ClipherClipher texttext),数数据以密码的形式存储和传输。据以密码的形式存储和传输。20返回返回返回返回加密方法有两种,加密方法有两种,v一一种种是是替替换换方方法法,该该方方法法使使用用密密钥钥(Encryption Encryption KeyKey)将将明明文文中的每一个字符转换为密文中的一个字符。中的每一个字符转换为密文中的一个字符。v另另一一种种是是转转换换方方法法,该该方方法法将将明明文文中中的的字字符符按按不不同同的的顺顺序序重重新新排列。排列。通通常常将将这这两两种种方方法法结结合合起起来来使使用用,就就可可以以达达到到相相当当高高的的安全程度。安全程度。v例例如如美美国国19771977年年制制定定的的官官方方加加密密标标准准,数数据据加加密密标标准准(Data Data Encryption StandardEncryption Standard,简称简称DESDES)就是使用这种算法的例子。就是使用这种算法的例子。数据加密后,对于不知道解密算法的人,即使利用系统数据加密后,对于不知道解密算法的人,即使利用系统安全措施的漏洞非法访问数据,也只能看到一些无法辨安全措施的漏洞非法访问数据,也只能看到一些无法辨认的二进制代码。认的二进制代码。合法的用户检索数据时,首先提供密码钥匙,由系统进合法的用户检索数据时,首先提供密码钥匙,由系统进行译码后,才能得到可识别的数据。行译码后,才能得到可识别的数据。 21返回返回返回返回目目前前不不少少数数据据库库产产品品提提供供了了数数据据加加密密例例行行程程序序,用用户户可可根根据据要要求求自自行行进进行行加加密密处处理理,还还有有一一些些未未提提供供加加密密程程序序的的产产品品也也提提供供了了相相应应的的接接口口,通话用户用其他厂商的加密程序对数据加密。通话用户用其他厂商的加密程序对数据加密。用用密密码码存存储储数数据据,在在存存入入时时需需加加密密,在在查查询询时时需需解解密密,这这个个过过程程会会占占用用大大量量系系统统资资源源,降降低低了数据库的性能。了数据库的性能。因因此此数数据据加加密密功功能能通通常常允允许许用用户户自自由由选选择择,只只对对那那些些保保密密要要求求特特别别高高的的数数据据,才才值值得得采采用用此此方法。方法。22返回返回返回返回5.1.2.5 5.1.2.5 审计(审计(AuditAudit)前前面面介介绍绍的的各各种种数数据据库库安安全全性性措措施施,都都可可将将用用户户操操作作限限制在规定的安全范围内。制在规定的安全范围内。但但实实际际上上任任何何系系统统的的安安全全性性措措施施都都不不是是绝绝对对可可靠靠的的,窃窃密者总有办法打破这些控制。密者总有办法打破这些控制。对对于于某某些些高高度度敏敏感感的的保保密密数数据据,必必须须以以审审计计功功作作为为预预防防手段。手段。审审计计功功能能是是一一种种监监视视措措施施,跟跟踪踪记记录录有有关关数数据据的的访访问问活活动。动。审审计计追追踪踪把把用用户户对对数数据据库库的的所所有有操操作作自自动动记记录录下下来来,存存放在一个特殊文件上中,即审计日志(放在一个特殊文件上中,即审计日志(Audit LogAudit Log)中。中。记录的内容一般包括:记录的内容一般包括:v操作类型,如修改、查询等;操作类型,如修改、查询等;v操作终端标识与操作者标识;操作终端标识与操作者标识;v操作日期和时间;操作日期和时间;23返回返回返回返回操操作作所所涉涉及及到到的的相相关关数数据据,如如基基本本表表、视视图图、记记录录、属属性性等等;数数据据的的前前象象和和后后象象。利利用用这这些些信信息息,可可以以重重现现导导致致数数据据库库现现有有状状况况的的一一系系列列事事件件,以以进进一一步步找找出出非非法法存存取数据的人、时间和内容等。取数据的人、时间和内容等。使使用用审审计计功功能能会会大大大大增增加加系系统统的的开开销销,所所以以DBMSDBMS通通常常将将其其作作为为可可选选特特征征,提提供供相相应应的的操操作作语语句句可可灵灵活活地地打打开开或或关闭审计功能。关闭审计功能。例例如如,可可使使用用如如下下SQLSQL语语句句打打开开对对表表S S的的审审计计功功能能,对对表表S S的的每每次次成成功功的的查查询询、增增加加、删删除除、修修改改操操作作都都作作审审计计追踪:追踪:AUDIT SELECT,INSERT,DELETE,UPDATE,AUDIT SELECT,INSERT,DELETE,UPDATE,ON S WHENEVER SUCCESSFULON S WHENEVER SUCCESSFUL要关闭对表要关闭对表S S的审计功能可以使用如下语句:的审计功能可以使用如下语句:NO AUDIT ALL ON SNO AUDIT ALL ON S。 24返回返回返回返回5.2.1 5.2.1 数据库完整性的含义数据库完整性的含义数数据据库库的的完完整整性性是是指指保保护护数数据据库库中中数数据据的的正正确确性性、有有效效性性和和相相容容性性,防防止止错错误误的的数数据据进进入入数数据据库库造造成成无无效效操作。操作。有关完整性的含义在第一章中已作简要介绍。有关完整性的含义在第一章中已作简要介绍。v比比如如年年龄龄属属于于数数值值型型数数据据,只只能能含含0,1,90,1,9,不不能能含含字字母母或或特特殊符号;殊符号;v月份只能用月份只能用1 11212之间的正整数表示;之间的正整数表示;v表表示示同同一一事事实实的的两两个个数数据据应应相相同同,否否则则就就不不相相容容,如如一一个个人人不能有两个学号。不能有两个学号。显显然然,维维护护数数据据库库的的完完整整性性非非常常重重要要,数数据据库库中中的的数数据据是是否否具具备备完完整整性性关关系系到到数数据据能能否否真真实实地地反反映映现现实实世世界。界。5.2 5.2 完整性控制完整性控制25返回返回返回返回数数据据库库的的完完整整性性和和安安全全性性是是数数据据库库保保护护的的两两个个不不同的方面。同的方面。安安全全性性是是保保护护数数据据库库,以以防防止止非非法法使使用用所所造造成成数数据据的的泄泄露露、更更改改或或破破坏坏,安安全全性性措措施施的的防防范范对对象象是非法用户和非法操作;是非法用户和非法操作;完完整整性性是是防防止止合合法法用用户户使使用用数数据据库库时时向向数数据据库库中中加加入入不不符符合合语语义义的的数数据据,完完整整性性措措施施的的防防范范对对象象是不合语义的数据。是不合语义的数据。但但从从数数据据库库的的安安全全保保护护角角度度来来讲讲,安安全全性性和和完完整整性又是密切相关的。性又是密切相关的。26返回返回返回返回5.2.2 5.2.2 完整性规则的组成完整性规则的组成为为了了实实现现完完整整性性控控制制,数数据据库库管管理理员员应应向向DBMS提提出出一一组组完完整整性性规规则则,来来检检查查数数据据库库中中的的数数据据,看看其其是是否否满足语义约束。满足语义约束。这这些些语语义义约约束束构构成成了了数数据据库库的的完完整整性性规规则则,这这组组规规则则作为作为DBMS控制数据完整性的依据。控制数据完整性的依据。它它定定义义了了何何时时检检查查、检检查查什什么么、查查出出错错误误又又怎怎样样处处理理等事项。等事项。具体地说,完整性规则主要由以下三部分构成:具体地说,完整性规则主要由以下三部分构成:1 触发条件:规定系统什么时候使用规则检查数据;触发条件:规定系统什么时候使用规则检查数据;2 约约束束条条件件:规规定定系系统统检检查查用用户户发发出出的的操操作作请请求求违违背背了了什么样的完整性约束条件;什么样的完整性约束条件;3 违违约约响响应应:规规定定系系统统如如果果发发现现用用户户的的操操作作请请求求违违背背了了完完整整性性约约束束条条件件,应应该该采采取取一一定定的的动动作作来来保保证证数数据据的的完完整性,即违约时要做的事情。整性,即违约时要做的事情。27返回返回返回返回完完整整性性规规则则从从执执行行时时间间上上可可分分为为立立即即执执行行约约束束(Immediate Constraints)和和延延迟迟执执行行约约束束(Deferred Constrainsts)。)。v立立即即执执行行约约束束是是指指在在执执行行用用户户事事务务过过程程中中,某某一一条条语语句句执执行行完完成成后后,系系统统立立即即对对此此数数据据进进行行完完整整性性约约束束条条件检查。件检查。v延延迟迟执执行行约约束束是是指指在在整整个个事事务务执执行行结结束束后后,再再对对约约束束条件进行完整性检查,结果正确后才能提交。条件进行完整性检查,结果正确后才能提交。某某一一条条语语句句执执行行完完成成后后,系系统统立立即即对对此此数数据据进进行行完整性约束条件检查。完整性约束条件检查。28返回返回返回返回v例例如如,银银行行数数据据库库中中“借借贷贷总总金金额额应应平平衡衡”的的约约束束就就应应该该属属于于延延迟迟执执行行约约束束,从从账账号号A转转一一笔笔钱钱到到账账号号B为为一一个个事事务务,从从账账号号A转转出出去去钱钱后后,账账就就不不平平了了,必必须须等等转转入入账账号号B后后,账账才才能能重重新新平衡,这时才能进行完整性检查。平衡,这时才能进行完整性检查。如如果果发发现现用用户户操操作作请请求求违违背背了了立立即即执执行行约约束束,则则可可以以拒拒绝该操作,以保护数据的完整性。绝该操作,以保护数据的完整性。如如果果发发现现用用户户操操作作请请求求违违背背了了延延迟迟执执行行约约束束,而而又又不不知知道道是是哪哪个个事事务务的的操操作作破破坏坏了了完完整整性性,则则只只能能拒拒绝绝整整个个事事务,把数据库恢复到该事务执行前的状态。务,把数据库恢复到该事务执行前的状态。一一条条完完整整性性规规则则可可以以用用一一个个五五元元组组(D,O,A,C,P)来形式化地表示。其中:来形式化地表示。其中:vD(data):):代表约束作用的数据对象;代表约束作用的数据对象;vO(operation):):代表触发完整性检查的数据库操作,即当用户代表触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则;发出什么操作请求时需要检查该完整性规则; 29返回返回返回返回vA(assertion):代代表表数数据据对对象象必必须须满满足足的的语语义义约约束束,这是规则的主体;这是规则的主体;vC(condition):代代表表选选择择A作作用用的的数数据据对对象象值值的的谓谓词;词;vP(procdure):代代表表违违反反完完整整性性规规则则时时触触发发执执行行的的操作过程。操作过程。例如,对于例如,对于“学号不能为空学号不能为空”的这条完整性约束,的这条完整性约束,vD:代表约束作用的数据对象为代表约束作用的数据对象为SNO属性;属性;vO(operation):当当用用户户插插入入或或修修改改数数据据时时需需要要检检查查该完整性规则;该完整性规则;vA(assertion):):SNO不能为空;不能为空;vC(condition):):A可作用于所有记录的可作用于所有记录的SNO属性;属性;vP(procdure):):拒绝执行用户请求。拒绝执行用户请求。 30返回返回返回返回关系模型的完整性包括关系模型的完整性包括实体完整性实体完整性,参照完整性参照完整性和和用户用户定义完整性定义完整性。对于违反实体完整性和用户定义完整性规则的操作一般对于违反实体完整性和用户定义完整性规则的操作一般都是采用拒绝执行的方式进行处理。都是采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单的拒绝执而对于违反参照完整性的操作,并不都是简单的拒绝执行,一般在接受这个操作的同时,执行一些附加的操作,行,一般在接受这个操作的同时,执行一些附加的操作,以保证数据库的状态仍然是正确的。以保证数据库的状态仍然是正确的。例如在删除被参照关系中的元组时,应该将参照关系中例如在删除被参照关系中的元组时,应该将参照关系中所有的外码值与被参照关系中要删除元组主码值相对应所有的外码值与被参照关系中要删除元组主码值相对应的元组一起删除。的元组一起删除。v比如,要删除比如,要删除S S关系中关系中SNO=S1SNO=S1的元组,而的元组,而SCSC关系中又关系中又有两个有两个SNO=S1SNO=S1的元组。的元组。v这时根据应用环境的语义,因为当一个学生毕业或退学后,这时根据应用环境的语义,因为当一个学生毕业或退学后,他的个人记录从他的个人记录从S S关系中删除,选课记录也应随之从关系中删除,选课记录也应随之从SCSC表表中删除,所以应该将中删除,所以应该将SCSC关系中两个关系中两个SNO=S1SNO=S1的元组一起的元组一起删除。删除。31返回返回返回返回这这些些完完整整性性规规则则都都由由DBMSDBMS提提供供的的语语句句进进行行描描述述,经过编译后存放在数据字典中。经过编译后存放在数据字典中。一旦进入系统,就开始执行该组规则。一旦进入系统,就开始执行该组规则。其其主主要要优优点点是是违违约约由由系系统统来来处处理理,而而不不是是由由用用户处理。户处理。另另外外,规规则则集集中中在在数数据据字字典典中中,而而不不是是散散布布在在各各应应用用程程序序之之中中,易易于于从从整整体体上上理理解解和和修修改改,效率较高。效率较高。数数据据库库系系统统的的整整个个完完整整性性控控制制都都是是围围绕绕着着完完整整性性约约束束条条件件进进行行的的,从从这这个个角角度度来来看看,完完整整性性约束条件是完整性控制机制的核心。约束条件是完整性控制机制的核心。32返回返回返回返回5.2.3 5.2.3 完整性约束条件的分类完整性约束条件的分类5.2.3.1 5.2.3.1 从约束条件使用的对象分为值的约束和结构的约束从约束条件使用的对象分为值的约束和结构的约束1 1值值的的约约束束:即即对对数数据据类类型型、数数据据格格式式、取取值值范范围等进行规定。围等进行规定。v(1 1)对对数数据据类类型型的的约约束束,包包括括数数据据的的类类型型、长长度度、单位和精度等。单位和精度等。q例如,规定学生姓名的数据类型应为字符型,长度为8。v(2 2)对数据格式的约束。)对数据格式的约束。q例如,规定出生日期的数据格式为YY.MM.DD。v(3 3)对取值范围的约束。对取值范围的约束。q例如,月份的取值范围为112,日期131。v(4 4)对对空空值值的的约约束束。空空值值表表示示未未定定义义或或未未知知的的值值,它它与与零零值值和和空空格格不不同同。有有的的列列值值允允许许空空值值,有有的的则则不允许。不允许。q例如,学号和课程号不可以为空值,但成绩可以为空值。33返回返回返回返回2 2结构约束结构约束:即对数据之间联系的约束。:即对数据之间联系的约束。数数据据库库中中同同一一关关系系的的不不同同属属性性之之间间,应应满满足足一一定定的的约约束束条条件件,同同时时,不不同同关关系系的的属属性性之之间间也也有联系,也应满足一定的约束条件。有联系,也应满足一定的约束条件。常见的结构约束有如下四种:常见的结构约束有如下四种:(1 1)函数依赖约束:说明了同一关系中不同属性之)函数依赖约束:说明了同一关系中不同属性之间应满足的约束条件。间应满足的约束条件。q如:2NF,3NF,BCNF这些不同的范式应满足不同的约束条件。v大部分函数依赖约束都是隐含在关系模式结构中的,大部分函数依赖约束都是隐含在关系模式结构中的,特别是对于规范化程度较高的关系模式,都是由模特别是对于规范化程度较高的关系模式,都是由模式来保持函数依赖的。式来保持函数依赖的。 34返回返回返回返回(2 2)实实体体完完整整性性约约束束:说说明明了了关关系系键键的的属属性性列列必必须须唯唯一,其值不能为空或部分为空。一,其值不能为空或部分为空。(3 3)参参照照完完整整性性约约束束:说说明明了了不不同同关关系系的的属属性性之之间间的的约约束束条条件件,即即外外部部键键的的值值应应能能够够在在参参照照关关系系的的主主键键值中找到或取空值。值中找到或取空值。(4 4)统统计计约约束束,规规定定某某个个属属性性值值与与一一个个关关系系多多个个元元组组的统计值之间必须满足某种约束条件。的统计值之间必须满足某种约束条件。q例如,规定系主任的奖金不得高于该系的平均奖金的40%。,不得低于该系的平均奖金的20%。这里该系平均奖金的值就是一个统计计算值。其其中中,实实体体完完整整性性约约束束和和参参照照完完整整性性约约束束是是关关系系模模型型的的两两个个极极其其重重要要的的约约束束,被被称称为为关关系系的的两个不变性。统计约束实现起来开销很大。两个不变性。统计约束实现起来开销很大。35返回返回返回返回5.2.3.2 5.2.3.2 从约束对象的状态分为静态约束和动态约束从约束对象的状态分为静态约束和动态约束1 1静态约束静态约束v静静态态约约束束是是指指对对数数据据库库每每一一个个确确定定状状态态所所应应满满足足的的约约束束条条件件,是是反反映映数数据据库库状状态态合合理理性性的的约约束束,这这是是最重要的一类完整性约束。最重要的一类完整性约束。v上面介绍的值的约束和结构的约束均属于静态约束。上面介绍的值的约束和结构的约束均属于静态约束。2 2动态约束动态约束v动动态态约约束束是是指指数数据据库库从从一一种种状状态态转转变变为为另另一一种种状状态态时时,新新旧旧值值之之间间所所应应满满足足的的约约束束条条件件,动动态态约约束束反反映的是数据库状态变迁的约束。映的是数据库状态变迁的约束。v例例如如,学学生生年年龄龄在在更更改改时时只只能能增增长长,职职工工工工资资在在调调整时不得低于其原来的工资。整时不得低于其原来的工资。36返回返回返回返回5.3.1 5.3.1 数据库并发性的含义数据库并发性的含义上一节讨论的完整性是保证各个事务本身能得到正确上一节讨论的完整性是保证各个事务本身能得到正确的数据,只考虑一个用户使用数据库的情况,但实际的数据,只考虑一个用户使用数据库的情况,但实际上数据库中有许多用户。上数据库中有许多用户。每个用户在存取数据库中的数据时,可能是串行执行,每个用户在存取数据库中的数据时,可能是串行执行,即每个时刻只有一个用户程序运行,也可能是多个用即每个时刻只有一个用户程序运行,也可能是多个用户并行地存取数据库。户并行地存取数据库。数据库的最大特点之一就是数据资源是共享的,串行数据库的最大特点之一就是数据资源是共享的,串行执行意味着一个用户在运行程序时,其他用户程序必执行意味着一个用户在运行程序时,其他用户程序必须等到这个用户程序结束才能对数据库进行存取,这须等到这个用户程序结束才能对数据库进行存取,这样如果一个用户程序涉及大量数据的输入样如果一个用户程序涉及大量数据的输入/ /输出交换,输出交换,则数据库系统的大部分时间将处于闲置状态。则数据库系统的大部分时间将处于闲置状态。5.3 5.3 并发控制与封锁并发控制与封锁37返回返回返回返回因此,为了充分利用数据库资源,很多时候数据库用因此,为了充分利用数据库资源,很多时候数据库用户都是对数据库系统并行存取数据,这样就会发生多户都是对数据库系统并行存取数据,这样就会发生多个用户并发存取同一数据块的情况,如果对并发操作个用户并发存取同一数据块的情况,如果对并发操作不加控制可能会产生不正确的数据,破坏数据的完整不加控制可能会产生不正确的数据,破坏数据的完整性,并发控制就是解决这类问题,以保持数据库中数性,并发控制就是解决这类问题,以保持数据库中数据的一致性,即在任何一个时刻数据库都将以相同的据的一致性,即在任何一个时刻数据库都将以相同的形式给用户提供数据。形式给用户提供数据。5.3.2 5.3.2 事务(事务(TransactionTransaction)5.3.2.1 5.3.2.1 事务的定义事务的定义在在上上一一节节中中就就曾曾提提到到过过事事务务的的概概念念,DBMSDBMS的的并并发发控控制制也是以事务为基本单位进行的。也是以事务为基本单位进行的。那么到底什么是事务呢?那么到底什么是事务呢?38返回返回返回返回事事务务是是数数据据库库系系统统中中执执行行的的一一个个工工作作单单位位,它它是是由由用用户定义的一组操作序列。户定义的一组操作序列。一一个个事事务务可可以以是是一一组组SQLSQL语语句句、一一条条SQLSQL语语句句或或整整个个程程序,一个应用程序可以包括多个事务。序,一个应用程序可以包括多个事务。事事务务的的开开始始与与结结束束可可以以由由用用户户显显式式控控制制。如如果果用用户户没没有有显显式式地地定定义义事事务务,则则由由DBMSDBMS按按照照缺缺省省规规定定自自动动划划分分事务。在事务。在SQLSQL语言中,定义事务的语句有三条:语言中,定义事务的语句有三条:vBEGIN TRANSACTIONBEGIN TRANSACTIONvCOMMITCOMMITvROLLBACKROLLBACKvBEGIN TRANSACTIONBEGIN TRANSACTION表示事务的开始;表示事务的开始;vCOMMITCOMMIT表示事务的提交,即将事务中所有对数据库的更新写表示事务的提交,即将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,此时事务正常结束;回到磁盘上的物理数据库中去,此时事务正常结束;vROLLBACKROLLBACK表示事务的回滚,即在事务运行的过程中发生了某表示事务的回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销,再回滚到事务开始时的状态。已完成的更新操作全部撤销,再回滚到事务开始时的状态。 39返回返回返回返回5.3.2.2 5.3.2.2 事务的特征事务的特征事事务务是是由由有有限限的的数数据据库库操操作作序序列列组组成成,但但并并不不是是任任意意的的数数据据库库操操作作序序列列都都能能成成为为事事务务,为为了了保保护护数数据据的的完完整性,一般要求事务具有以下四个特征:整性,一般要求事务具有以下四个特征:1 1原子性(原子性(AtomicAtomic)一一个个事事务务是是一一个个不不可可分分割割的的工工作作单单位位,事事务务在在执执行行时时,应应该该遵遵守守“要要么么不不做做,要要么么全全做做”(nothing nothing or or allall)的原则,即不允许事务部分的完成。的原则,即不允许事务部分的完成。即即使使因因为为故故障障而而使使事事务务未未能能完完成成,它它执执行行的的部部分分结结果果要被取消。要被取消。40返回返回返回返回2 2一致性(一致性(ConsistencyConsistency)事事务务对对数数据据库库的的作作用用是是数数据据库库从从一一个个一一致致状状态态转变到另一个一致状态。转变到另一个一致状态。所所谓谓数数据据库库的的一一致致状状态态是是指指数数据据库库中中的的数数据据满满足完整性约束。足完整性约束。v例例如如,银银行行企企业业中中,“从从帐帐号号A A转转移移资资金金额额R R到到帐帐号号B”B”是是一一个个典典型型的的事事务务,这这个个事事务务包包括括两两个个操操作作,从从帐帐号号A A中中减减去去资资金金额额R R和和在在帐帐号号B B中中增增加加资资金金额额R R,如如果果只只执执行行其其中中一一个个操操作作,则则数数据据库库处处于于不不一一致致状状态态,帐帐务务会会出出现现问问题题。也也就就是是说说,两两个个操操作作要要么么全全做做,要么全不做,否则就不能成为事务。要么全不做,否则就不能成为事务。可见事务的一致性与原子性是密切相关的。可见事务的一致性与原子性是密切相关的。41返回返回返回返回3 3隔离性(隔离性(IsolationIsolation)如如果果多多个个事事务务并并发发地地执执行行,应应像像各各个个事事务务独独立立执执行行一一样样,一一个个事事务务的的执执行行不不能能被被其其他他事事务务干干扰。扰。即即一一个个事事务务内内部部的的操操作作及及使使用用的的数数据据对对并并发发的的其他事务是隔离的。其他事务是隔离的。并以控制就是为了保证事务间的隔离性。并以控制就是为了保证事务间的隔离性。4 4持久性(持久性(DurabilityDurability)指指一一个个事事务务一一旦旦提提交交,它它对对数数据据库库中中数数据据的的改改变变就就应应该该是是持持久久的的,即即使使数数据据库库因因故故障障而而受受到到破坏,破坏,DBMSDBMS也应该能够恢复。也应该能够恢复。42返回返回返回返回事事务务上上述述四四个个性性质质的的英英文文术术语语的的第第一一个个字字母母为为ACIDACID。因此,这四个性质以称为事务的因此,这四个性质以称为事务的ACIDACID准则。准则。下下面面是是一一个个事事务务的的例例子子,从从帐帐号号A A转转移移资资金金额额R R到到帐帐号号B B:BEGIN TRANSACTIONBEGIN TRANSACTION READ A AA-R IF A0/* A 款不足款不足*/ THEN BEGIN DISPLAY “A款不足款不足”ROLLBACK ENDELSE /* 拨款拨款 */ BEGIN BB+R DISPLAY “拨款完成拨款完成” COMMIT END43返回返回返回返回这是对一个简单事务的完整的描述。这是对一个简单事务的完整的描述。该事务有两个出口:该事务有两个出口:v当当A 帐号的款项不足时,事务以帐号的款项不足时,事务以ROLLBACK(撤销)命令结束,即撤销该事务的影响;撤销)命令结束,即撤销该事务的影响;v另一个出口是以另一个出口是以COMMIT(提交)命令结束,完提交)命令结束,完成从帐号成从帐号A到帐号到帐号B的拨款。的拨款。q在COMMIT之前,即在数据库修改过程中,数据可能是不一致的,事务本身也可能被撤销。q只有在COMMIT之后,事务对数据库所产生的变化才对其他事务开放,这就可以避免其他事务访问不一致或不存在的数据。44返回返回返回返回5.3.3 5.3.3 并发操作与数据的不一致性并发操作与数据的不一致性当当同同一一数数据据库库系系统统中中有有多多个个事事务务并并发发运运行行时时,如如果果不不加加以适当控制,可能产生数据的不一致性。以适当控制,可能产生数据的不一致性。 例例11并并发发取取款款操操作作。假假设设存存款款余余额额R=1000R=1000元元,甲甲事事务务T T1 1取取走走存存款款100100元元,乙乙事事务务T T2 2取取走走存存款款200200元元,如如果果正正常常操操作作,即即甲甲事事务务T T1 1执执行行完完毕毕再再执执行行乙乙事事务务T T2 2,存存款款余余额额更更新新后后应应该该是是700700元元。但但是是如如果果按按照照如如下下顺顺序序操操作作,则则会会有有不不同的结果:同的结果:v甲事务甲事务T T1 1读取存款余额读取存款余额R R =1000=1000元;元;v乙事务乙事务T T2 2读取存款余额读取存款余额R R =1000=1000元;元;v甲甲事事务务T T1 1取取走走存存款款100100元元,修修改改存存款款余余额额R R = =R R 100=900100=900,把把R R =900=900写回到数据库;写回到数据库;v乙乙事事务务T T2 2取取走走存存款款200200元元,修修改改存存款款余余额额R R = =R R 200=800200=800,把把R R =800=800写回到数据库。写回到数据库。 45返回返回返回返回结结果果两两个个事事务务共共取取走走存存款款300300元元,而而数数据据库库中中的存款却只少了的存款却只少了200200元。元。得得到到这这种种错错误误的的结结果果是是由由甲甲乙乙两两个个事事务务并并发发操操作作引引起起的的,数数据据库库的的并并发发操操作作导导致致的的数数据据库库不不一致性主要有以下三种:一致性主要有以下三种: 1 1丢失更新丢失更新(Lost UpdateLost Update)当两个事务当两个事务T T1 1和和T T2 2读入同一数据做修改,并发读入同一数据做修改,并发执行时,执行时, T T2 2把把T T1 1或或T T1 1把把T T2 2的修改结果覆盖掉,的修改结果覆盖掉, 46返回返回返回返回造造成成了了数数据据的的丢丢失失更更新新问问题题,导导致致数数据据的的不不一一致。致。仍以例仍以例6.16.1中的操作为例进行分析。中的操作为例进行分析。v在在表表5.55.5中中,数数据据库库中中R R的的初初值值是是10001000,事事务务T T1 1包包含含三三个个操操作作:读读入入R R初初值值(FIND FIND R R);计计算算(R=R-R=R-100100););更新更新R R(UPDATE RUPDATE R)。)。v事事务务T T2 2也也包包含含三三个个操操作作:FIND FIND R R;计计算算(R=R-200R=R-200);UPDATE RUPDATE R。v如如果果事事务务T T1 1和和T T2 2顺顺序序执执行行,则则更更新新后后,R R的的值值是是700700。但但如如果果T T1 1和和T T2 2按按照照表表5.55.5所所示示的的并并发发执执行行,R R的的值值是是800800,得得到到错错误误的的结结果果,原原因因在在于于在在t t7 7时时刻刻丢丢失失了了T T1 1对数据库的更新操作。对数据库的更新操作。v因此,这个并发操作不正确。因此,这个并发操作不正确。47返回返回返回返回表表5.5 5.5 丢失更新问题丢失更新问题时间事务T1数据库中R的值事务T2T01000t1FIND Rt2FIND Rt3R=R-100t4R=R-200t5UPDATE Rt6900UPDATE Rt780048返回返回返回返回2 2污读(污读(Dirty ReadDirty Read)事事务务T T1 1更更新新了了数数据据R R,事事务务T T2 2读读取取了了更更新新后后的的数数据据R R,事事务务T T1 1由由于于某某种种原原因因被被撤撤消消,修修改改无无效效,数数据据R R恢恢复复原原值值。事事务务T T2 2得得到到的的数数据据与与数数据据库库的的内内容容不不一一致致,这这种种情况称为情况称为“污读污读”。在在表表5.65.6中中,事事务务T T1 1把把R R的的值值改改为为900900,但但此此时时尚尚未未做做COMMITCOMMIT操操作作,事事务务T T2 2将将修修改改过过的的值值900900读读出出来来,之之后后事事务务T T1 1执执行行ROLLBACKROLLBACK操操作作,R R的的值值恢恢复复为为10001000,而而事事务务T T2 2将仍在使用已被撤消了的将仍在使用已被撤消了的R R值值900900。原原因因在在于于在在t t4 4时时刻刻事事务务T T2 2读读取取了了T T1 1未未提提交交的的更更新新操操作作结结果果,这这种种值值是是不不稳稳定定的的,在在事事务务T T1 1结结束束前前随随时时可可能能执执行行ROLLBACKROLLBACK操作。操作。对对于于这这些些未未提提交交的的随随后后又又被被撤撤消消的的更更新新数数据据称称为为“脏脏数据数据”。v比如,这里事务比如,这里事务T T2 2在在t t2 2时刻读取的就是时刻读取的就是“脏数据脏数据”。49返回返回返回返回表表5.6 5.6 污读问题污读问题 时间事务T1数据库中R的值事务T2t01000t1FIND Rt2R=R-100t3UPDATE Rt4900FIND Rt5ROLLBACKt6100050返回返回返回返回3 3不可重读(不可重读(Unrepeatable ReadUnrepeatable Read)事事务务T T1 1读读取取了了数数据据R R,事事务务T T2 2读读取取并并更更新新了了数数据据R R,当当事事务务T T1 1再再读读取取数数据据R R以以进进行行核核对对时时,得得到到的的两两次次读读取取值值不不一致,这种情况称为一致,这种情况称为“不可重读不可重读”。在在表表5.75.7中中,在在t t0 0时时刻刻事事务务T T1 1读读取取R R的的值值为为10001000,但但事事务务T T2 2在在t t4 4时时刻刻将将R R的的值值更更新新为为为为800800。所所以以T T1 1所所使使用用的的值值已已经与开始读取的值不一致。经与开始读取的值不一致。时间事务T1数据库中R的值事务T2t01000t1FIND Rt2FIND Rt3R=R-200t4UPDATE Rt5800表表5.7 5.7 不可重读问题不可重读问题51返回返回返回返回产产生生上上述述三三类类数数据据不不一一致致性性的的主主要要原原因因就就是是并并发发操操作作破坏了事务的隔离性。破坏了事务的隔离性。并并发发控控制制就就是是要要求求DBMSDBMS提提供供并并发发控控制制功功能能以以正正确确的的方方式式高高度度并并发发事事务务,避避免免并并发发事事务务之之间间的的相相互互干干扰扰造造成成数据的不一致性,保证数据库的完整性。数据的不一致性,保证数据库的完整性。5.3.4 5.3.4 封锁封锁实实现现并并发发控控制制的的方方法法主主要要有有两两种种:封封锁锁(LockLock)技技术术和时标(和时标(TimestampingTimestamping)技术。这里只介绍封锁技术。技术。这里只介绍封锁技术。5.3.4.1 5.3.4.1 封锁类型(封锁类型(Lock TypeLock Type)所谓封锁就是当一个事务在对某个数据对象(可以是所谓封锁就是当一个事务在对某个数据对象(可以是数据项、记录、数据集、以至整个数据库)进行操作数据项、记录、数据集、以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性之前,必须获得相应的锁,以保证数据操作的正确性和一致性。和一致性。52返回返回返回返回封锁是目前封锁是目前DBMSDBMS普遍采用的并发控制方法,基本普遍采用的并发控制方法,基本的封锁类型有两种:排它锁和共享锁。的封锁类型有两种:排它锁和共享锁。 1 1排它锁(排它锁(Exclusive LockExclusive Lock)v排排它它锁锁又又称称写写锁锁,简简称称为为X X锁锁,其其采采用用的的原原理理是是禁禁止止并并发发操作。操作。v当当事事务务T T对对某某个个数数据据对对象象R R实实现现X X封封锁锁后后,其其他他事事务务要要等等T T解解除除X X封封锁锁以以后后,才才能能对对R R进进行行封封锁锁。这这就就保保证证了了其其他他事事务在务在T T释放释放R R上的锁之前,不能再对上的锁之前,不能再对R R进行操作。进行操作。2 2共享锁(共享锁(Share LockShare Lock)v共共享享锁锁又又称称读读锁锁,, ,简简称称为为S S锁锁,其其采采用用的的原原理理是是允允许许其其他他用用户户对对同同一一数数据据对对象象进进行行查查询询,但但不不能能对对该该数数据据对对象象进行修改。进行修改。v当当事事务务T T对对某某个个数数据据对对象象R R实实现现S S封封锁锁后后,其其他他事事务务只只能能对对R R加加S S锁,而不能加锁,而不能加X X锁,直到锁,直到T T释放释放R R上的上的S S锁。锁。v这这就就保保证证了了其其他他事事务务在在T T释释放放R R上上的的S S锁锁之之前前,只只能能读读取取R R,而不能再对而不能再对R R作任何修改。作任何修改。53返回返回返回返回5.3.4.2 5.3.4.2 封锁协议(封锁协议(Lock ProtocolLock Protocol)封锁可以保证合理的进行并发控制,保证数据的一致性。封锁可以保证合理的进行并发控制,保证数据的一致性。实实际际上上,锁锁是是一一个个控控制制块块,其其中中包包括括被被加加锁锁记记录录的的标标识识符及持有锁的事务的标识符等。符及持有锁的事务的标识符等。在在封封锁锁时时,要要考考虑虑一一定定的的封封锁锁规规则则,例例如如,何何时时开开始始封封锁锁、封封锁锁多多长长时时间间、何何时时释释放放等等, ,这这些些封封锁锁规规则则称称为为封封锁协议。锁协议。对对封封锁锁方方式式规规定定不不同同的的规规则则,就就形形成成了了各各种种不不同同的的封封锁锁协议。协议。封封锁锁协协议议在在不不同同程程序序上上对对正正确确控控制制并并发发操操作作提提供供了了一一定定的保证。的保证。上上面面讲讲述述过过的的并并发发操操作作所所带带来来的的丢丢失失更更新新、污污读读和和不不可可重重读读等等到到数数据据不不一一致致性性问问题题,可可以以通通过过三三级级封封锁锁协协议议在在不同程度上给予解决,下面介绍三级封锁协议。不同程度上给予解决,下面介绍三级封锁协议。54返回返回返回返回1 1一级封锁协议一级封锁协议一一级级封封锁锁协协议议的的内内容容是是:事事务务T T在在修修改改数数据据对对象象之之前前必必须对其须对其加加X X锁,直到事务结束。锁,直到事务结束。具具体体地地说说,就就是是任任何何企企图图更更新新记记录录R R的的事事务务必必须须先先执执行行“XLOCK XLOCK R”R”操操作作,以以获获得得对对该该记记录录进进行行寻寻址址的的能能力力并并对它取得对它取得X X封锁。封锁。如如果果未未获获准准“X X 封封锁锁”,那那么么这这个个事事务务进进入入等等待待状状态态,一直到获准一直到获准“X X封锁封锁”,该事务才继续做下去。,该事务才继续做下去。该该事事务务规规定定事事务务在在更更新新记记录录R R时时必必须须获获得得排排它它性性封封锁锁,使使得得两两个个同同时时要要求求更更新新R R的的并并行行事事务务之之一一必必须须在在一一个个事事务务更更新新操操作作执执行行完完成成之之后后才才能能获获得得X X封封锁锁,这这样样就就避避免免了了两两个个事事务务读读到到同同一一个个R R值值而而先先后后更更新新时时所所发发生生的的丢丢失失更新问题。更新问题。55返回返回返回返回利用一级封锁协议可以解决表利用一级封锁协议可以解决表5.55.5中的数据丢失中的数据丢失更新问题,如表更新问题,如表5.85.8所示。所示。事务事务T T1 1先对先对R R进行进行X X封锁(封锁(XLOCKXLOCK),),事务事务T T2 2执行执行“XLOCK R”操作,未获准操作,未获准“X X封锁封锁”,则进入等,则进入等待状态,直到事务待状态,直到事务T T1 1更新更新R R值以后,解除值以后,解除X X封锁封锁操作(操作(UNLOCK XUNLOCK X)。)。此后事务此后事务T T2 2再执行再执行“XLOCK R”操作,获准操作,获准“X X封封锁锁”,并对,并对R R值进行更新(此时值进行更新(此时R R已是事务已是事务T T1 1更更新过的值,新过的值,R=900R=900)。)。这样就能得出正确的结果。这样就能得出正确的结果。 56返回返回返回返回表表5.8 5.8 无丢失更新问题无丢失更新问题时间事务T1数据库中R的值事务T2t0XLOCK R1000t1FIND Rt2XLOCK Rt3R=R-100WAITt4UPDATE RWAITt5UNLOCK X900WAITt6XLOCK Rt7R=R-200T8UPDATE Rt9700UNLOCK X57返回返回返回返回一一级级封封锁锁协协议议只只有有当当修修改改数数据据时时才才进进行行加加锁锁,如如果果只只是是读读取取数数据据并并不不加加锁锁,所所以以它它不不能能防防止止“污污读读”和和“重重读读”数据。数据。2 2二级封锁协议二级封锁协议二二级级封封锁锁协协议议的的内内容容是是:在在一一级级封封锁锁协协议议的的基基础础上上,另另外外加加上上事事务务T T在在读读取取数数据据R R之之前前必必须须先先对对其其加加S S锁锁,读读完完后释放后释放S S锁。锁。所所以以二二级级封封锁锁协协议议不不但但可可以以解解决决更更新新时时所所发发生生的的数数据据丢丢失问题,还可以进一步防止失问题,还可以进一步防止“污读污读”。利利用用二二级级封封锁锁协协议议可可以以解解决决表表5.65.6中中的的数数据据“污污读读”问问题,如表题,如表5.95.9所示。所示。事事务务T T1 1先先对对R R进进行行X X封封锁锁(XLOCKXLOCK),把把R R的的值值改改为为900900,但但尚尚未未提提交交。这这时时事事务务T T2 2请请求求对对数数据据R R加加S S锁锁,因因为为T T1 1已已对对R R加了加了X X锁,锁,T T2 2只能等待,直到事务只能等待,直到事务T T1 1释放释放X X锁。锁。58返回返回返回返回之之后后事事务务T T1 1因因某某种种原原因因撤撤销销,数数据据R R恢恢复复原原值值10001000,并并释释放放R R上上的的X X锁锁。事事务务T T2 2可可对对数数据据R R加加S S锁锁,读读取取R=1000R=1000,得得到到了了正正确确的的结结果果,从从而而避避免免了了事事务务T T2 2读读取取“脏脏数数据据”。时间事务T1数据库中R的值事务T2t0XLOCK R1000t1FIND Rt2R=R-100t3UPDATE Rt4900SLOCK Rt5ROLLBACKWAITt6UNLOCK R1000SLOCK Rt7FIND RT8UNLOCK S59返回返回返回返回二二级级封封锁锁协协议议在在读读取取数数据据之之后后,立立即即释释放放S S锁锁,所以它仍然不能防止所以它仍然不能防止“重读重读”数据。数据。3 3三级封锁协议三级封锁协议三三级级封封锁锁协协议议的的内内容容是是:在在一一级级封封锁锁协协议议的的基基础础上上,另另外外加加上上事事务务T T在在读读取取数数据据R R之之前前必必须须先先对对其其加加S S锁锁,读读完完后后并并不不释释放放S S锁锁,而而直直到到事事务务T T结束才释放。结束才释放。所所以以三三级级封封锁锁协协议议除除了了可可以以防防止止更更新新丢丢失失问问题题和和“污污读读”数数据据外外,还还可可进进一一步步防防止止不不可可重重读读数数据据,彻彻底底解解决决了了并并发发操操作作所所带带来来的的三三个个不不一一致性问题。致性问题。利利用用三三级级封封锁锁协协议议可可以以解解决决表表5.75.7中中的的不不可可重重读问题,如表读问题,如表5.105.10所示。所示。60返回返回返回返回在在表表5.105.10中中,事事务务T T1 1读读取取R R的的值值之之前前先先对对其其加加S锁锁,这这样样其其他他事事务务只只能能对对R R加加S S锁锁,而而不不能能加加X X锁锁,即即其其他他事事务务只只能能读读取取R R,而而不不能能对对R R进进行行修修改。改。所所以以当当事事务务T T2 2在在t t3 3时时刻刻申申请请对对R R加加X X锁锁时时被被拒拒绝绝,使使其其无无法法执执行行修修改改操操作作,只只能能等等待待事事务务T T1 1释释放放R R上上的的S S锁锁,这这时时事事务务T T1 1再再读读取取数数据据R R进进行行核核对对时时,得得到到的的值值仍仍是是10001000,与与开开始始所所读读取取的的数数据据是是一一致的,即可重读。致的,即可重读。在在事事务务T T1 1释释放放S S锁锁后后,事事务务T T2 2可可以以对对R R加加X X锁锁,进进行更新操作,这样便保证了数据的一致性。行更新操作,这样便保证了数据的一致性。61返回返回返回返回表表5.10 5.10 可重读问题可重读问题时间事务T1数据库中R的值事务T2t01000t1SLOCK Rt2FIND Rt3XLOCK Rt4COMMITWAITt5UNLOCK SWAITt6XLOCK Rt7FIND RT8R=R-200t9UPDATE Rt10UNLOCK X62返回返回返回返回5.3.4.3 5.3.4.3 封锁粒度(封锁粒度(Lock GranularityLock Granularity)封锁粒度指封锁的单位。封锁粒度指封锁的单位。根根据据对对数数据据的的不不同同处处理理,封封锁锁的的对对象象可可以以是是这这样样一一些些逻逻辑单元:字段、记录、表、数据库等。辑单元:字段、记录、表、数据库等。封锁粒度与系统的并发度和并发控制的开销密切相关。封锁粒度与系统的并发度和并发控制的开销密切相关。封封锁锁粒粒度度越越小小,系系统统中中能能够够被被封封锁锁的的对对象象就就越越多多,并并发发度度越越高高,但但封封锁锁机机构构复复杂杂,系系统统开开销销也也就就越越大大。相相反反,封封锁锁粒粒度度越越大大,系系统统中中能能够够被被封封锁锁的的对对象象就就越越少少,并并发发度越小,封锁机构简单,相应系统开销也就越小。度越小,封锁机构简单,相应系统开销也就越小。因因此此,在在实实际际应应用用中中,选选择择封封锁锁粒粒度度时时应应同同时时考考虑虑封封锁锁机机构构和和并并发发度度两两个个因因素素,对对系系统统开开销销与与并并发发度度进进行行权权衡衡,以求得最优的效果。以求得最优的效果。由由于于同同时时封封锁锁一一个个记记录录的的概概率率很很小小,一一般般数数据据库库系系统统都都在记录级上进行封锁,以获得更高的并发度。在记录级上进行封锁,以获得更高的并发度。63返回返回返回返回5.3.4.4 死锁和活锁死锁和活锁封封锁锁技技术术可可有有效效解解决决并并行行操操作作的的一一致致性性问问题题,但也可产生新的问题,即活锁和死锁问题。但也可产生新的问题,即活锁和死锁问题。1 1活锁(活锁(LivelockLivelock)当当某某个个事事务务请请求求对对某某一一数数据据的的排排它它性性封封锁锁时时,由由于于其其他他事事务务对对该该数数据据的的操操作作而而使使这这个个事事务务处处于永久等待状态,这种状态称为于永久等待状态,这种状态称为活锁活锁。例例如如,事事务务T T1 1在在对对数数据据R R封封锁锁后后,事事务务T T2 2又又请请求求封封锁锁R R,于于是是T T2 2等等待待。T T3 3也也请请求求封封锁锁R R。当当T T1 1释释放放了了R R上上的的封封锁锁后后首首先先批批准准了了T T3 3的的请请求求,T T2 2继继续续等等待待。然然后后又又有有又又T T4 4请请求求封封锁锁R R,T T3 3释释放放了了R R上上的的封封锁锁后后又又批批准准了了T T4 4的的请请求求T T2 2可可能能永永远远处处于等待状态,从而发生了活锁。如表于等待状态,从而发生了活锁。如表5.115.11所示。所示。64返回返回返回返回表表5.11 5.11 活锁活锁时间事务T1事务T2事务T3事务T4t0LOCK Rt1LOCK Rt2WAITLOCK Rt3UNLOCKWAITWAITLOCK Rt4WAITLOCK RWAITt5WAITWAITt6WAITUNLOCKWAITt7WAITLOCK RT8WAIT65返回返回返回返回避避免免活活锁锁的的简简单单方方法法是是采采用用先先来来先先服服务务的的策策略略,按按照照请请求求封封锁锁的的次次序序对对事事务务排排队队,一一旦旦记记录录上上的的锁锁释释放放,就就使使申请队列中的第一个事务获得锁。申请队列中的第一个事务获得锁。有有关关活活锁锁的的问问题题我我们们不不再再详详细细讨讨论论,因因为为死死锁锁的的问问题题较较为常见,这里主要讨论有关死锁的问题。为常见,这里主要讨论有关死锁的问题。1 1死锁(死锁(DeadlockDeadlock)在在同同时时处处于于等等待待状状态态的的两两个个或或多多个个事事务务中中,其其中中的的每每一一个个在在它它能能够够进进行行之之前前,都都等等待待着着某某个个数数据据、而而这这个个数数据据已被它们中的某个事务所封锁,这种状态称为死锁。已被它们中的某个事务所封锁,这种状态称为死锁。例例如如,事事务务T T1 1在在对对数数据据R R1 1封封锁锁后后,又又要要求求对对数数据据R R2 2封封锁锁,而而事事务务T T2 2已已获获得得对对数数据据R R2 2的的封封锁锁,又又要要求求对对数数据据R R1 1封封锁锁,这这样样两两个个事事务务由由于于都都不不能能得得到到封封锁锁而而处处于于等等待待状状态态,发发生了死锁。如表生了死锁。如表5.125.12所示。所示。66返回返回返回返回表表5.12 5.12 死锁死锁时间事务T1事务T2t0LOCK R1t1LOCK R2t2t3LOCK R2t4WAITt5WAITLOCK R1t6WAITWAITt7WAITWAIT67返回返回返回返回(1)(1)死锁产生的条件死锁产生的条件发生死锁的必要条件有以下四条:发生死锁的必要条件有以下四条:互互斥斥条条件件:一一个个数数据据对对象象一一次次只只能能被被一一个个事事务务所所使使用,即对数据的封锁采用排它式;用,即对数据的封锁采用排它式;不不可可抢抢占占条条件件:一一个个数数据据对对象象只只能能被被占占有有它它的的事事务务所释放,而不能被别的事务强行抢占。所释放,而不能被别的事务强行抢占。部部分分分分配配条条件件:一一个个事事务务已已经经封封锁锁分分给给它它的的数数据据对对象,但仍然要求封锁其他数据;象,但仍然要求封锁其他数据;循循环环等等待待条条件件:允允许许等等待待其其他他事事务务释释放放数数据据对对象象,系统处于加锁请求相互等待的状态。系统处于加锁请求相互等待的状态。68返回返回返回返回(2 2)死锁的预防)死锁的预防死死锁锁一一旦旦发发生生,系系统统效效率率将将会会大大大大下下降降,因因而而要要尽尽量量避避免死锁的发生。免死锁的发生。在在操操作作系系统统的的多多道道程程序序运运行行中中,由由于于多多个个进进程程的的并并行行执执行需要分别占用不同资源时,也会发生死锁。行需要分别占用不同资源时,也会发生死锁。要想预防死锁的产生,就得破坏形成死锁的条件。要想预防死锁的产生,就得破坏形成死锁的条件。同同操操作作系系统统预预防防死死锁锁的的方方法法类类似似,在在数数据据库库环环境境下下,常常用的方法有以下两种:用的方法有以下两种:一一次加锁法次加锁法一一次次加加锁锁法法是是每每个个事事物物必必须须将将所所有有要要使使用用的的数数据据对对象象全全部部依依次次加加锁锁,并并要要求求加加锁锁成成功功,只只要要一一个个加加锁锁不不成成功功,表表示示本本次次加加锁锁失失败败,则则应应该该立立即即释释放放所所有有已已加加锁锁成成功功的的数据对象,然后重新开始从头加锁。数据对象,然后重新开始从头加锁。一次加锁法的程序框图如图一次加锁法的程序框图如图5.25.2。69返回返回返回返回YYNYN开始加锁加锁第1个数据加锁成功吗?加锁成功吗?对第m个表加锁加锁成功吗?加锁第2个数据释放所有已加锁的数据N一次加锁成功图图5.2 5.2 一次加锁法一次加锁法 70返回返回返回返回如如表表5.125.12发发生生死死锁锁的的例例子子,可可以以通通过过一一次次加加锁锁法法加加以以预防。预防。事事务务T T1 1启启动动后后,立立即即对对数数据据R R1 1和和R R2 2依依次次加加锁锁,加加锁锁成成功功后,执行后,执行T T1 1,而事务而事务T T2 2等待。等待。直直到到T T1 1执执行行完完后后释释放放R R1 1和和R R2 2上上的的锁锁,T T2 2继继续续执执行行。这这样样就不会发生死锁。就不会发生死锁。一一次次加加锁锁法法虽虽然然可可以以有有效效地地预预防防死死锁锁的的发发生生,但但也也存存在一些问题。在一些问题。v首首先先,对对某某一一事事务务所所要要使使用用的的全全部部数数据据一一次次性性加加锁锁,扩扩大大了了封锁的范围,从而降低了系统的并发度。封锁的范围,从而降低了系统的并发度。v其其次次,数数据据库库中中的的数数据据是是不不断断变变化化的的,原原来来不不要要求求封封锁锁的的数数据据,在在执执行行过过程程中中可可能能会会变变成成封封锁锁对对象象,所所以以很很难难事事先先精精确确地地确确定定每每个个事事务务所所要要封封锁锁的的数数据据对对象象,这这样样只只能能在在开开始始扩扩大大封封锁锁范范围围,将将可可能能要要封封锁锁的的数数据据全全部部加加锁锁,这这就就进进一一步步降降低低了并发度,影响了系统的运行效率。了并发度,影响了系统的运行效率。71返回返回返回返回顺序加锁法顺序加锁法顺顺序序加加锁锁法法是是预预先先对对所所有有可可加加锁锁的的数数据据对对象象规规定定一一个个加加锁锁顺顺序序,每每个个事事务务都都需需要要按按此此顺顺序序加加锁锁,在在释释放放时时,按按逆序进行。逆序进行。例例如如对对于于表表5.125.12发发生生的的死死锁锁,我我们们可可以以规规定定封封锁锁顺顺序序为为R R1 1、R R2 2,事事务务T T1 1和和T T2 2都都需需要要按按此此顺顺序序加加锁锁。T T1 1先先封封锁锁R R1 1,再再封封锁锁R R2 2。当当T T2 2再再请请求求封封锁锁R R1 1时时,因因为为T T1 1已已经经对对R R1 1加加锁锁,T T2 2只只能能等等待待。待待T T1 1释释放放R R1 1后后,T T2 2再再封封锁锁R R1 1,则则不不会会发发生生死死锁。锁。顺顺序序加加锁锁法法同同一一次次加加锁锁法法一一样样,也也存存在在一一些些问问题题。因因为为事事务务的的封封锁锁请请求求可可以以随随着着事事务务的的执执行行而而动动态态地地决决定定,所所以以很很难难事事先先确确定定封封锁锁对对象象,从从而而更更难难确确定定封封锁锁顺顺序序。即即使使确确定定了了封封锁锁顺顺序序,随随着着数数据据操操作作的的不不断断变变化化,维维护护这这些数据的封锁顺序要需要很大的系统开销。些数据的封锁顺序要需要很大的系统开销。72返回返回返回返回在在数数据据库库系系统统中中,由由于于可可加加锁锁的的目目标标集集合合不不但但很很大大,而且是动态变化的;而且是动态变化的;可可加加锁锁的的目目标标常常常常不不是是按按名名寻寻址址,而而是是按按内内容容寻寻址址,预预防防死死锁锁常常要要付付出出很很高高的的代代价价,因因而而上上述述两两种种在在操操作作系系统统中中广广泛泛使使用用的的预预防防死死锁锁的的方方法法并并不不很很适适合合数数据据库库的特点。的特点。一一般般情情况况下下,在在数数据据库库系系统统中中,可可以以允允许许发发生生死死锁锁,在死锁发生后可以自动诊断并解除死锁。在死锁发生后可以自动诊断并解除死锁。73返回返回返回返回(3 3)死锁的诊断与解除)死锁的诊断与解除数据库系统中诊断死锁的方法与操作系统类似。数据库系统中诊断死锁的方法与操作系统类似。可以利用事务信赖图的形式来测试系统中是否存在死可以利用事务信赖图的形式来测试系统中是否存在死锁。锁。例如在图例如在图5.3中,事务中,事务T1需要数据需要数据R,但但R已经被事务已经被事务T2封锁,那么从封锁,那么从T1到到T2划一个箭头。划一个箭头。如果在事务依赖图中沿着箭头方向存在一个循环,那如果在事务依赖图中沿着箭头方向存在一个循环,那么死锁的条件就形成了,系统就会出现死锁。么死锁的条件就形成了,系统就会出现死锁。图图5.3 事务依赖图事务依赖图 数据RT1T274返回返回返回返回如如果果已已经经发发现现死死锁锁,DBADBA从从依依赖赖相相同同资资源源的的事事务务中中抽抽出出某某个个事事务务作作为为牺牺牲牲品品,将将它它撤撤销销,解解除除它它的的所所有有封封锁锁,释释放放此此事事务务占占用用的的所所有有数数据据资资源源,分分配配给给其其他他事事务务,使使其其他他事事务务得得以以继继续续运行下去,这样就有可能消除死锁。运行下去,这样就有可能消除死锁。在在解解除除死死锁锁的的过过程程中中,抽抽取取牺牺牲牲事事务务的的标标准准是是根根据据系系统统状状态态及及其其应应用用的的实实际际情情况况来来确确定定的的,通通常常采采用用的的方方法法之之一一是是选选择择一一个个处处理理死死锁锁代代价价最小的事务,将其撤销。最小的事务,将其撤销。不不重重要要的的用用户户,取取消消其其操操作作,释释放放封封锁锁的的数数据据,恢复对数据库所作的改变。恢复对数据库所作的改变。 75返回返回返回返回5.4.1 5.4.1 数据库恢复的含义数据库恢复的含义虽虽然然数数据据库库系系统统中中已已采采取取一一定定的的措措施施,来来防防止止数数据据库库的的安安全全性性和和完完整整性性的的破破坏坏,保保证证并并发发事事务务的的正正确确执执行行,但但数数据据库库中中的的数数据据仍仍然然无无法法保保证证绝绝对对不不遭遭受受破破坏坏,比比如如计计算算机机系系统统中中硬硬件件的的故故障障、软软件件的的的的错错误误,操操作作员员的的失失误误,恶恶意意的的破破坏坏等等都都有有可可能能发发生生,这这些些故故障障的的发发生生影影响响数数据据库库数数据据的的正正确确性性,甚甚至至可可能能破破坏坏数数据据库库,使使数据库中的数据全部或部分丢失。数据库中的数据全部或部分丢失。因因此此,系系统统必必须须具具有有检检测测故故障障并并把把数数据据从从错错误误状状态态中中恢恢复复到到某某一一正正确确状状态态的的功功能能,这这就就是是数数据库的恢复。据库的恢复。5.4 5.4 数据库的恢复数据库的恢复76返回返回返回返回5.4.2 5.4.2 数据库恢复的原理服及其实现技术数据库恢复的原理服及其实现技术数数据据库库恢恢复复的的基基本本原原理理十十分分简简单单,就就是是数数据据的的冗余。冗余。数数据据库库中中任任何何一一部部分分被被破破坏坏的的或或不不正正确确的的数数据据都都可可以以利利用用存存储储在在系系统统其其他他地地方方的的冗冗余余数数据据来来修复。修复。因此恢复系统应该提供两种类型的功能:因此恢复系统应该提供两种类型的功能:v一一种种是是生生成成冗冗余余数数据据,即即对对可可能能发发生生的的故故障障作作某某些些准备;准备;v另另一一种种是是冗冗余余重重建建,即即利利用用这这些些冗冗余余数数据据恢恢复复数数据据库。库。生成冗余数据最常用的技术是登记日志文件和生成冗余数据最常用的技术是登记日志文件和数据转储,在实际应用中,这两种方法常常结数据转储,在实际应用中,这两种方法常常结合起来一起使用。合起来一起使用。 77返回返回返回返回5.4.2.1 5.4.2.1 登记日志文件(登记日志文件(LoggingLogging)日日志志文文件件是是用用来来记记录录事事务务对对数数据据库库的的更更新新操操作作的的文文件件。对对数数据据库库的的每每次次修修改改,都都将将被被修修改改项项目目的的旧旧值值和和新新值值写写在在一一个个叫叫做做运运行行日日志志的的文文件件中,目的是为数据库的恢复保留详细的数据。中,目的是为数据库的恢复保留详细的数据。典型的日志文件主要包含以下内容:典型的日志文件主要包含以下内容:1 1更新数据库的事务标识(标明是哪个事务);更新数据库的事务标识(标明是哪个事务);2 2操作的类型(插入、删除或修改)操作的类型(插入、删除或修改)3 3操作对象;操作对象;4 4更更新新前前数数据据的的旧旧值值(对对于于插插入入操操作作而而言言,没没有有旧旧值);值);78返回返回返回返回5 5更新前数据的新值(对于删除操作而言,没有新值);更新前数据的新值(对于删除操作而言,没有新值);6 6事事务务处处理理中中的的各各个个关关键键时时刻刻(事事务务的的开开始始、结结束束及及其其真真正正回回写的时间)。写的时间)。日志文件是系日志文件是系统运行的运行的历史史记载,必,必须高度可靠。高度可靠。所所以以一一般般都都是是双双副副本本的的,并并且且独独立立地地写写在在两两个个不不同同类型的型的设备上。上。日志的信息量很大,一般保存在海量存日志的信息量很大,一般保存在海量存储器上。器上。在在对对数数据据库库修修改改时时,在在运运行行日日志志中中要要写写入入一一个个表表示示这这个修改的运行记录。个修改的运行记录。为为了了防防止止在在这这两两个个操操作作之之间间发发生生故故障障后后,运运行行日日志志中中没没有有记记录录下下这这个个修修改改,以以后后也也无无法法撤撤消消这这个个修修改改。为为保保证证数数据据库库是是可可恢恢复复的的,登登记记日日志志文文件件必必须须遵遵循循两两条条原则原则:原则原则:79返回返回返回返回v1.1.至至少少要要等等到到相相应应运运行行记记录录的的撤撤消消部部分分已已经经写写入入日日志志文文件件中中以以后,才允许该事务往物理数据库中写入记录;后,才允许该事务往物理数据库中写入记录;v2.2.直直到到事事务务的的所所有有运运行行记记录录的的撤撤消消和和重重做做两两部部分分都都已已写写入入日日志志文件中以后,才允许事务完成提交处理。文件中以后,才允许事务完成提交处理。这两条原则称为日志文件的先写原则。这两条原则称为日志文件的先写原则。先先写写原原则则蕴蕴含含了了如如下下意意义义:如如果果出出现现故故障障,只只可可能能在在日日志志文文件件中中登登记记所所做做的的修修改改,但但没没有有修修改改数数据据库库,这这样样在在系系统统重重新新启启动动进进行行恢恢复复时时,只只是是撤撤消消或或重重做做因因发发生生事事故故而而没没有有做做过过的的修修改改,并并不不会会影影响响数数据据库库的的正正确确性性。而而如如果果先先写写了了数数据据库库修修改改,而而在在运运行行记记录录中中没没有有登登记记这这个个修修改,则以后就无法恢复这个修改了。改,则以后就无法恢复这个修改了。所所以以这这了了安安全全,一一定定要要先先定定日日志志文文件件,后后写写数数据据库库的的修修改。改。80返回返回返回返回5.4.2.2 5.4.2.2 数据转储(数据转储(Data DumpData Dump)数数据据转转储储是是指指定定期期地地将将整整个个数数据据库库复复制制到到多多个个存存储储设设备备如如磁磁带带、磁磁盘盘上上保保存存起起来来的的过过程程,它它是是数数据据库库恢恢复复中采用的基本手段。中采用的基本手段。转转储储的的数数据据文文本本称称为为后后备备副副本本或或后后援援副副本本,当当数数据据库库遭遭到到破破坏坏后后就就可可利利用用后后援援副副本本把把数数据据库库有有效效地地加加以以恢恢复。复。转转储储是是十十分分耗耗费费时时间间和和资资源源的的,不不能能频频繁繁地地进进行行,应应该根据数据库使用情况确定一个适当的转储周期。该根据数据库使用情况确定一个适当的转储周期。按照转储方式转储可以分为海量转储和增量转储。按照转储方式转储可以分为海量转储和增量转储。海量转储是指每次转储全部数据库。海量转储是指每次转储全部数据库。增量转储每次只转储上次转储后被更新过的数据。增量转储每次只转储上次转储后被更新过的数据。81返回返回返回返回上上次次转转储储以以来来对对数数据据库库的的更更新新修修改改情情况况记记录录在在日日志志文文件件中中,利利用用日日志志文文件件就就可可进进行行这这种种转转储储,将将更更新新过过的的那那些些数数据据重重新新写写入入上上次次转转储储的的文文件件中中,就就完完成成了了转转储储操操作作,这这与与转转储储整整个个数数据据库库的的效效果果是是一一样样的的,但但花花的的时间要少得多。时间要少得多。按照按照转储状状态转储又可分又可分为静静态转储和和动态转储。v静静态转储期期间不允不允许有任何数据存取活有任何数据存取活动,因而需在当前用,因而需在当前用户事事务结束之后束之后进行,新用行,新用户事事务又需在又需在转储结束之后才能束之后才能进行,行,这就降低了数据就降低了数据库的可用性。的可用性。v动态转储则不同,它允不同,它允许转储期期间继续运行用运行用户事事务,但,但产生的副本并不能保生的副本并不能保证与当前状与当前状态一致。解决的一致。解决的办法是把法是把转储期期间各事各事务对数据数据库的修改活的修改活动登登记下来,建立日志文件。下来,建立日志文件。v因此,因此,备用副本加上日志文件就能把数据用副本加上日志文件就能把数据库恢复到某一恢复到某一时刻刻的正确状的正确状态。 82返回返回返回返回5.4.3 5.4.3 数据库的故障和恢复的策略数据库的故障和恢复的策略数数据据库库系系统统在在运运行行中中发发生生故故障障后后,有有些些事事务务尚尚未未完完成成就就被被迫迫中中断断,这这些些未未完完成成事事务务对对数数据据库库所做的修改有一部分已写入物理数据库。所做的修改有一部分已写入物理数据库。这这时时数数据据库库就就处处于于一一种种不不正正确确的的状状态态,或或者者说说是是不不一一致致的的状状态态,这这时时可可利利用用日日志志文文件件和和数数据据库库转转储储的的后后备备副副本本将将数数据据库库恢恢复复到到故故障障前前的的某某个一致性状态。个一致性状态。数数据据库库运运行行过过程程中中可可能能会会出出现现各各种种各各样样的的故故障障,这这些些故故障障可可分分为为以以下下三三类类:事事务务故故障障、系系统统故故障障和和介质故障介质故障。根根据据故故障障类类型型的的不不同同,应应该该采采取取不不同同的的恢恢复复策策略。略。83返回返回返回返回5.4.3.1 5.4.3.1 事务故障(事务故障(Transaction FailureTransaction Failure)及其恢复及其恢复事事务务故故障障表表示示由由非非预预期期的的、不不正正常常的的程程序序结结束束所所造造成成的故障。的故障。造造成成程程序序非非正正常常结结束束的的原原因因包包括括输输入入数数据据错错误误、运运算算溢出、违反存储保护、并行事务发生死锁等。溢出、违反存储保护、并行事务发生死锁等。发生事务故障时,被迫中断的事务可能已对数据库进发生事务故障时,被迫中断的事务可能已对数据库进行了修改,为了消除该事务对数据库的影响,要利用行了修改,为了消除该事务对数据库的影响,要利用日志文件中所记载的信息,强行回滚(日志文件中所记载的信息,强行回滚(ROLLBACKROLLBACK)该该事务,将数据库恢复到修改前的初始状态。事务,将数据库恢复到修改前的初始状态。为此,要检查日志文件中由这些事务所引起的发生变为此,要检查日志文件中由这些事务所引起的发生变化的记录,取消这些没有完成的事务所做的一切改变。化的记录,取消这些没有完成的事务所做的一切改变。这类恢复操作称为事务撤消(这类恢复操作称为事务撤消(UNDOUNDO),),具体做法如下:具体做法如下: 84返回返回返回返回1 1反向扫描日志文件,查找该事务的更新操作。反向扫描日志文件,查找该事务的更新操作。2 2对对该该事事务务的的更更新新操操作作执执行行反反操操作作,即即对对已已经经插插入入的的新新记记录录进进行行删删除除操操作作,对对已已删删除除的的记记录录进进行行插插入入操操作作,对对修修改改的的数数据据恢恢复复旧旧值值,用用旧旧值值代代替替新新值值。这这样样由由后后向向前前逐逐个个扫扫描描该该事事务务己己做做所所有有更更新新操操作作,并并做做同同样样处处理理,直直到到扫扫描描到到此此事事务务的的开开始始标标记记,事事务故障恢复完毕。务故障恢复完毕。因因此此,一一个个事事务务是是一一个个工工作作单单位位,也也是是一一个个恢恢复单位。复单位。一一个个事事务务越越短短,越越便便于于对对它它进进行行UNDOUNDO操操作作。如如果果一一个个应应用用程程序序运运行行时时间间较较长长,则则应应该该把把该该应应用用程程序序分分成成多多个个事事务务,用用明明确确的的COMMITCOMMIT语语句句结结束各个事务。束各个事务。85返回返回返回返回5.4.3.2 5.4.3.2 系统故障(系统故障(System FailureSystem Failure)及其恢复及其恢复系系统统故故障障是是指指系系统统在在运运行行过过程程中中,由由于于某某种种原原因因,造造成成系系统统停停止止运运转转,致致使使所所有有正正在在运运行行的的事务都以非正常方式终止,要求系统重新启动。事务都以非正常方式终止,要求系统重新启动。引引起起系系统统故故障障的的原原因因可可能能有有:硬硬件件错错误误如如CPUCPU故障、操作系统或故障、操作系统或DBMSDBMS代码错误、突然断电等。代码错误、突然断电等。这这时时,内内存存中中数数据据库库缓缓冲冲区区的的内内容容全全部部丢丢失失,存存储储在在外外部部存存储储设设备备上上的的数数据据库库并并未未破破坏坏,但但内容不可靠了。内容不可靠了。86返回返回返回返回系统故障发生后,对数据库的影响有两种情况:系统故障发生后,对数据库的影响有两种情况:v一种情况是一些未完成事务对数据库的更新已写入一种情况是一些未完成事务对数据库的更新已写入数据库,这样在系统重新启动后,要强行撤消数据库,这样在系统重新启动后,要强行撤消(UNDOUNDO)所有未完成事务,清除这些事务对数据库所有未完成事务,清除这些事务对数据库所做的修改。这些未完成事务在日志文件中只有所做的修改。这些未完成事务在日志文件中只有BEGIN TRANSCATIONBEGIN TRANSCATION标记,而无标记,而无COMMITCOMMIT标记。标记。v另一种情况是有些己提交的事务对数据库的更新结另一种情况是有些己提交的事务对数据库的更新结果还保留在缓冲区中,尚未写到磁盘上的物理数据果还保留在缓冲区中,尚未写到磁盘上的物理数据库中,这也使数据库处于不一致状态,因此应将这库中,这也使数据库处于不一致状态,因此应将这些事务己提交的结果重新写入数据库。这类恢复操些事务己提交的结果重新写入数据库。这类恢复操作称为事务的重做(作称为事务的重做(REDOREDO)。)。这种己提交事务在日这种己提交事务在日志文件中既有志文件中既有BEGIN TRANSCATIONBEGIN TRANSCATION标记,也有标记,也有COMMITCOMMIT标记。标记。87返回返回返回返回因因此此,系系统统故故障障的的恢恢复复要要完完成成两两方方面面的的工工作作,既既要要撤撤消消所所有有未未完完成成的的事事务务,还还需需要要重重做做所所有有己己提提交交的的事事务务,这这样样才才能能将将数数据据库库真真正正恢恢复复到到一致的状态。具体做法如下:一致的状态。具体做法如下:1 1正正向向扫扫描描日日志志文文件件,查查找找尚尚未未提提交交的的事事务务,将将其其事事务务标标识识记记入入撤撤消消队队列列。同同时时查查找找已已经经提提交交的的事事务务,将其事务标识记入重做队列。将其事务标识记入重做队列。2 2对对撤撤消消队队列列中中的的各各个个事事务务进进行行撤撤消消处处理理。方方法法同同事务故障中所介绍的撤消方法相同。事务故障中所介绍的撤消方法相同。3 3对对重重做做队队列列中中的的各各个个事事务务进进行行重重做做处处理理。进进行行重重做做处处理理的的方方法法是是:正正向向扫扫描描日日志志文文件件,按按照照日日志志文文件件中中所所登登记记的的操操作作内内容容,重重新新执执行行操操作作,使使数数据据库库恢复到最近某个可用状态。恢复到最近某个可用状态。88返回返回返回返回系系统统发发生生故故障障后后,由由于于无无法法确确定定哪哪些些未未完完成成的的事事务务己己更更新新过过数数据据库库,哪哪些些事事务务的的提提交交结结果果尚尚未未写写入入数数据据库库,这这样样系系统统重重新新启启动动后后,就就要要撤撤消消所所有有的的未未完完成成事事务务,重重做做所所有有的的已已经经提提交交的的事务。事务。但但是是,在在故故障障发发生生前前已已经经运运行行完完毕毕的的事事务务有有些些是是正正常常结结束束的的,有有些些是是异异常常结结束束的的。所所以以无无需需把它们全部撤消或重做。把它们全部撤消或重做。通通常常采采用用设设立立检检查查点点(CheckpointCheckpoint)的的方方法法来来判判断断事事务务是是否否正正常常结结束束。每每隔隔一一段段时时间间,比比如如说说5 5分分钟钟,系系统统就就产产生生一一个个检检查查点点,做做下下面面一一些事情:些事情:1 1把仍保留在日志缓冲区中的内容写到日志文件中;把仍保留在日志缓冲区中的内容写到日志文件中;2 2在日志文件中写一个在日志文件中写一个“检查点记录检查点记录”;89返回返回返回返回3 3把把数数据据库库缓缓冲冲区区中中的的内内容容写写到到数数据据库库中中,即即把把更更新的内容写到物理数据库中;新的内容写到物理数据库中;4 4把把日日志志文文件件中中检检查查点点记记录录的的地地址址写写到到“重重新新启启动动文件文件”中。中。每每全全检检查查点点记记录录包包含含的的信信息息有有:在在检检查查点点时时间间的的所所有有活活动动事事务务一一览览表表,每每个个事事务务最最近近日日志志记录的地址。记录的地址。在在重重新新启启动动时时,恢恢复复管管理理程程序序先先从从“重重新新启启动动文文件件”中中获获得得检检查查点点记记录录的的地地址址,从从日日志志文文件件中中找找到到该该检检查查点点记记录录的的内内容容,通通过过日日志志往往回回找找,就就能能决决定定哪哪些些事事务务需需要要撤撤消消,恢恢复复到到初始的状态,哪些事务需要重做。初始的状态,哪些事务需要重做。90返回返回返回返回5.4.3.35.4.3.3介质故障(介质故障(Media FailureMedia Failure)及其恢复及其恢复介介质质故故障障是是指指系系统统在在运运行行过过程程中中,由由于于辅辅助助存存储储器器介介质质受受到到破破坏坏,使使存存储储在在外外存存中中的的数数据据部部分分丢丢失失或或全全部部丢失。丢失。这这类类故故障障比比事事务务故故障障和和系系统统故故障障发发生生的的可可能能性性要要小小,但但这这是是最最严严重重的的一一种种故故障障,破破坏坏性性很很大大,磁磁盘盘上上的的物物理理数数据据和和日日志志文文件件可可能能被被破破坏坏,这这需需要要装装入入发发生生介介质质故故障障前前最最新新的的后后备备数数据据库库副副本本,然然后后利利用用日日志志文文件件重重做该副本后所运行的所有事务。做该副本后所运行的所有事务。具体方法如下:具体方法如下:1装装入入最最新新的的数数据据库库副副本本,使使数数据据库库恢恢复复到到最最近近一一次次转转储储时时的的可用状态。可用状态。2装装入入最最新新的的日日志志文文件件副副本本,根根据据日日志志文文件件中中的的内内容容重重做做已已完完成的事务。首先正向扫描成的事务。首先正向扫描91返回返回返回返回日日志志文文件件,找找出出发发生生故故障障前前已已提提交交的的事事务务,将将其其记记入入重做队例。重做队例。再再对对重重做做队队列列中中的的各各个个事事务务进进行行重重做做处处理理,方方法法是是:正正向向扫扫描描日日志志文文件件,对对每每个个重重做做事事务务重重新新执执行行登登记记的的操作,即将日志文件中数据己更新后的值写入数据库。操作,即将日志文件中数据己更新后的值写入数据库。通通过过以以上上对对三三类类故故障障的的分分析析,我我们们可可以以看看出出故故障障发发生生后对数据库的影响有两种可能性:后对数据库的影响有两种可能性:1数数据据库库没没有有被被破破坏坏,但但数数据据可可能能处处于于不不一一致致状状态态。这这是是由由事事务务故故障障和和系系统统故故障障引引起起的的,这这种种情情况况在在恢恢复复时时,不不需需要要重重装装数数据据库库副副本本,直直接接根根据据日日志志文文件件,撤撤销销故故障障发发生生时时未未完完成成的的事事务务,并并重重做做己己完完成成的的事事务务,使使数数据据库库恢恢复复到到正正确确的的状状态态。这这类类故故障障的的恢恢复复是是系系统统在在重重新新启启动动时时自自动动完完成成的的,不不需需要要用用户干预。户干预。2数数据据库库本本身身被被破破坏坏。这这是是由由介介质质故故障障引引起起的的,这这种种情情况况在在恢恢复复时时,把把最最近近一一次次转转储储的的数数据据装装入入,然然后后借借助助于于日日志志文文件件,再再在在此此基基础础上上对对数数据据库库进进行行更更新新,从从而而重重建建了了数数据据库库。这这类类故故障障的的恢恢复复不不能能自自动动完完成成,需需要要DBA的的介介入入,先先由由DBA重重装装最最近近转转储储的的数数据据库库副副本本和和相相应应的的日日志志文文件件的的副副本本,再再执执行行系系统提供的恢复命令,具体的恢复操作由统提供的恢复命令,具体的恢复操作由DBMS来完成。来完成。92返回返回返回返回数数据据库库恢恢复复的的基基本本原原理理就就是是利利用用数数据据的的冗冗余余的的,十十分分简简单单,实实现现的的方方法法也也比比较较清清楚楚,但但真真正正实实现现起起来来相相当当复复杂杂,实实现现恢恢复复的的程程序序非非常常庞庞大大,常常占整个系统代码的百分之十以上。常常占整个系统代码的百分之十以上。数数据据库库系系统统所所采采用用的的恢恢复复技技术术是是否否行行之之有有效效,不不仅仅对对系系统统的的可可靠靠程程度度起起着着决决定定性性使使用用,而而且且对对系系统统的的运运行行效效率率也也有有很很大大的的影影响响,是是衡衡量量系系统性能优劣的重要指标。统性能优劣的重要指标。93返回返回返回返回数数据据库库的的重重要要特特征征是是它它能能为为多多个个用用户户提提供供数数据据共共享享。在在多多个个用用户户使使用用同同一一数数据据库库系系统统时时,要要保保证证整整个个系系统统的的正正常常运运转转,DBMSDBMS必必须须具具备备一一整整套套完完整整而而有有效效的的安安全全保保护护措措施施。本本章章从从安安全全性性控控制制、完完整整性性控控制制、并并发发性性控控制制和和数数据据库库恢恢复复四四方方面面讨讨论论了了数数据据库的安全保护功能。库的安全保护功能。数数据据库库的的安安全全性性是是指指保保护护数数据据库库,以以防防止止因因非非法法使使用用数数据据库库所所造造成成数数据据的的泄泄露露、更更改改或或破破坏坏。实实现现数数据据库库系系统统安安全全性性的的方方法法有有用用户户标标识识和和鉴鉴定定、存存取取控控制制、视视图图定定义义、数数据据加加密密和和审审计计等等多种,其中,最重要的是存取控制技术和审计技术。多种,其中,最重要的是存取控制技术和审计技术。数数据据库库的的完完整整性性是是指指保保护护数数据据库库中中数数据据的的正正确确性性、有有效效性性和和相相容容性性。完完整整性性和和安安全全性性是是两两个个不不同同的的概概念念,安安全全性性措措施施的的防防范范对对象象是是非非法法用用户户和和非非法法操操作作,完完整整性性措措施施的的防防范范对对象象是是合合法法用用户户的的不不合合语语义义的的数数据据。这这些些语语义义约约束束构构成成了了数数据据库库的的三三条条完完整整性性规规则则,即即触触发发条条件件、约约束束条条件件和和违违约约响响应应。完完整整性性约约束束条条件件从从使使用用对对象象分分为为值值的的约约束束和和结结构构的的约约束束,从从约约束束对对象象的的状状态态又又可分为静态约束和动态约束。可分为静态约束和动态约束。 小小 结结 94返回返回返回返回小小 结结并并发发控控制制是是为为了了防防止止多多个个用用户户同同时时存存取取同同一一数数据据,造造成成数数据据库库的的不不一一致致性性。事事务务是是数数据据库库的的逻逻辑辑工工作作单单位位,并并发发操操作作中中只只有有保保证证系系统统中中一一切切事事务务的的原原子子性性、一一致致性性、隔隔离离性性和和持持久久性性,才才能能保保证证数数据据库库处处于于一一致致状状态态。并并发发操操作作导导致致的的数数据据库库不不一一致致性性主主要要有有丢丢失失更更新新、污污读读和和不不可可重重读读三三种种。实实现现并并发发控控制制的的方方法法主主要要是是封封锁锁技技术术,基基本本的的封封锁锁类类型型有有排排它它锁锁和和共共享享锁锁两两种种,三三个个级级别别的的封封锁锁协协议议可可以以有有效效解解决决并并发发操操作作的的一一致致性性问问题题。对对数数据据对对象象施施加加封封锁锁,会会带带来来活活锁锁和和死死锁锁问问题题,并并发发控控制制机机制制可可以以通通过过采采取取一一次次加加锁锁法法或或顺顺序序加加锁锁法法预预防防死死锁锁的的产产生生。死死锁锁一一旦旦发发生生,可可以以选选择择一一个处理死锁代价最小的事务将其撤销。个处理死锁代价最小的事务将其撤销。数据库的恢复数据库的恢复是指系统发生故障后,把数据从错误状态中是指系统发生故障后,把数据从错误状态中恢复到某一正确状态的功能。对于事务故障、系统故障和恢复到某一正确状态的功能。对于事务故障、系统故障和介质故障三种不同的故障类型,介质故障三种不同的故障类型,DBMSDBMS有不同的恢复方法。有不同的恢复方法。登记日志文件和数据转储是恢复中常用的技术,恢复的基登记日志文件和数据转储是恢复中常用的技术,恢复的基本原理是利用存储在日志文件和数据库后备副本中的冗余本原理是利用存储在日志文件和数据库后备副本中的冗余数据来重建数据库。数据来重建数据库。 95
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号