配色: 字号:
第9章 数据库保护技术
2022-06-07 | 阅:  转:  |  分享 
  
数据库原理及应用第9章数据库保护技术数据库应用系统运行时会受到来自各方面的干扰和破坏,比如硬件故障、软件错误、数据库管理员的误操作
、“黑客”攻击、病毒破坏等。数据库保护介绍数据库管理系统为保护数据库中数据的安全而采取的数据保护技术和措施。比如,事务管理、
安全性和完整性控制、数据恢复、并发控制等。主要内容9.1事务机制9.2数据库的安全性9.3数据库的完整性9.4数据库恢复
9.5并发控制第9章数据库保护技术9.1事务机制一、事务的概念1、事务的定义用户程序对数据库的更新操作可能是一个SQ
L语句,也可能是多个SQL语句序列,也可能是实现多种操作的一个完整程序。数据库事务(transaction)是访问并操作各种
数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的逻辑上的工作单位。一、事务的概念2、定义事务
操作的语句定义事务操作的语句:BEGINTRANSACTIONROLLBACKTRANSACTIONCOMMITT
RANSACTION一、事务的概念例9.1利用事务机制完成下面的需求:银行将10000元资金从李明的帐户转帐给李丽的帐户。本例说
明COMMITTRANSACTION命令使成功执行的事务提交,ROLLBACKTRANSACTION命令使执行不成功的事务回退
到该事务执行前的状态。BEGINTRANSACTIONtran_bank;--开始事务declare@t
ran_errorint;set@tran_error=0;BEGINtryupdatebanksettot
alMoney=totalMoney-10000whereuserName=''李明'';set@tran_err
or=@tran_error+@@error;updatebanksettotalMoney=totalMon
ey+10000whereuserName=''李丽'';set@tran_error=@tran_error+
@@error;ENDtryBEGINcatchprint''出现异常,错误编号:''+convert(varc
har,error_number())+‘,错误消息:''+error_message();set@tran_er
ror=@tran_error+1;ENDcatchif(@tran_error>0)BEGINROLLBA
CKTRANSACTION;--执行出错,回滚事务print''转账失败,取消交易'';ENDelseB
EGINCOMMITTRANSACTION;--没有异常,提交事务print''转账成功'';
ENDGO二、事务的特性每个事务都必须满足ACID特性:原子性(Atomicity)一致性(Consiste
ncy)隔离性(Isolation)持久性(Durability)二、事务的特性1、原子性(Atomicity)原子性
表示一个数据库事务中的全部操作是一个不可分割的操作序列,要么全部完成,要么全部不执行。◆一个序列执行了一半受干扰了怎么?实
现:由DBMS的事务管理子系统完成。二、事务的特性2、一致性(Consistency)一致性表示无论数据库系统处于何种状态,几
个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。实现:由系统的完整性约束模块实现,当然需要系统分析员和程序员按
要求进行完整性约束设置。二、事务的特性3、隔离性(Isolation)隔离性是指一个事务的操作及使用的数据对其它并发事务是隔离
的,并发执行的两个或多个事务可以同时运行而互不影响,事务执行的中间结果对其他事务是透明的。实现:由DBMS的并发控制子系统完
成。二、事务的特性4、持久性(Durability)持久性是指一个事务一旦提交,系统必须保证该事务对数据库的改变不被丢失,即使
数据库出现了故障也是如此。实现:由DBMS的恢复管理子系统完成。三、事务的类型自动提交事务显式事务隐式事务三、事务的
类型1.自动提交事务三、事务的类型1.自动提交事务为了维护数据库数据的一致性和完整性,数据库管理系统会为每一个登录使用
数据库的用户设置了一个工作区。许多情况下,用户对数据库中数据的更新操作都是临时存放在该工作区,但从外部表象来看用户并不会感知到工作
区的存在。基于这样的机制,就把用户对数据库中数据的更新结果从工作区永久地保存到数据库中的操作称为提交。当一个事务的执行没有发生
任何错误时,SQLServer自动把事务提交到数据库中的行为,称为自动提交。三、事务的类型2、显式事务当明确地给出一个启动和
结束事务的显示命令时,就称其为显式事务。显式的事务操作:BEGINTRANSACTION开始一个事务COMMITTRA
NSACTION提交一个正常完成的事务ROLLBACKTRANSACTION撤销一个没有正常完成的事务使事务回退到该事务执
行前的状态的应用。三、事务的类型例9.2大学教学管理数据库中,由于“王丽丽”同学需要调整学号,由原来的“201403001”改为
“201404001”。这里的修改不仅涉及到学生表S,还涉及到学习表SC,故采用事务进行修改操作,以保证这两个表中的数据一致性。
BEGINTRANSACTIONtran_scode/开始一个事务/UPDATE
SCSETS#=’201404001’WHERES#=’201403001’/更新学习表/IF@@ER
ROR<>0/@@ERROR值返回上一个SQL语句是否成功执行的状态,为零表示成功执行,非零表示出错,错则需要回滚/BE
GINPRINT‘修改学习表时出现错误’ROLLBACKTRANSACTION
/回滚事务/RETURNENDUPDATESSETS#=’201404001’WHERES#=’201
403001’/更新学生表/IF@@ERROR<>0BEGINPRINT‘修改学生表时出现错误’ROLL
BACKTRANSACTION/回滚事务/RETURNENDCOMMITTR
ANSACTIONtran_scode/提交事务/三、事务的类型3.隐式事务隐式事
务是指在前一个事务完成时,新事务隐式启动,但每个事务的完成仍分为COMMIT或ROLLBACK两种情况。可以隐式地启动一个事务的
语句主要包括:Create、AlterTable、Delete、Drop、Fetch、Grant、Insert、Open、Re
voke、Update等。三、事务的类型3.隐式事务注意:要使用隐式事务,需要利用:setimplicit_tran
saction将隐式事务模式打开。三、事务的类型例9.3设置一个隐式事务,通过SETIMPLICIT_TRANSACTION
SON打开隐式事务模式,随后进行数据插入的SQL操作,最后用COMMIT提交事务。--设置隐式事务'';SETIMPLICIT
_TRANSACTIONSON;--使用隐式事务'',此处不需要BEGINTRANSACTIONINSERTINTOCV
ALUES(''C404002'',''电子商务'',40);--调用@@TRANCOUNT系统变量值,进行事务计数PRINTN''第1
轮隐式事务计数=''+CAST(@@TRANCOUNTASNVARCHAR(10));INSERTINTOCVALUES
(''C404003'',''管理信息系统'',30);PRINTN''第2轮隐式事务计数=''+CAST(@@TRANCOUNTAS
NVARCHAR(10));COMMITTRANSACTION;PRINTN''隐式事务结束后计数=''+CAST(@@TRANC
OUNTASNVARCHAR(10));SETIMPLICIT_TRANSACTIONSOFF;GO三、事务的类型第9章
数据库保护技术9.2数据库的安全性数据库的安全性是指在数据库系统的建立和使用过程中,为防止数据库的不合法使用和因偶然或恶
意的原因,使数据库中数据遭到非法更改、破坏或泄露等所采取的各种技术、管理和安全保护措施的总称。一、数据库安全的威胁总体上来说:
●所有对数据库中数据的非法授权读取、修改、添加、删除等,都属于对数据库安全的威胁。●凡是在正常的业务中需要访问数据库时,使
授权用户不能得到正常数据库服务的情况都是对数据库安全形成了威胁。一、数据库安全的威胁1、数据损坏包括因存储设备全部或部分损坏
引起的数据损坏,因敌意攻击或恶意破坏造成的整个数据库或部分数据库表被删除、移走或破坏。比如:(1)自然的天灾或意外的事故导致数据
存储设备损坏,进而导致数据库中数据的损坏和丢失。(2)硬件或软件故障导致存储设备损坏,导致数据库中的数据损坏和丢失,或无法恢复。
(3)“黑客”攻击或敌意破坏引起的信息丢失。(4)数据库管理员或系统用户的误操作,导致应用系统的不正确使用而引起的信息丢失。一
、数据库安全的威胁2、数据篡改即对数据库中数据未经授权进行修改,使数据失去原来的真实性。比如:(1)授权用户滥用权限而引起的
信息窃取,或通过滥用权限而蓄意修改、添加、删除系统或别的用户的数据信息。(2)“黑客”攻击、病毒感染、敌意破坏而导致数据库数据的
篡改和被删除。(3)非法授权用户绕过DBMS等,直接对数据进行的篡改。一、数据库安全的威胁3、数据窃取数据窃取包括对敏感数据
的非授权读取、非法拷贝、非法打印等。比如:出于国家利益、商业利益、个人利益、情仇恩怨的报复等,通过不同手段从数据库中窃取国家机密、
军事秘密、新产品实验数据、市场需求分析信息、市场营销策略、销售计划、客户档案、医疗档案、银行储蓄数据等,都属于数据窃取的范畴。二
、数据库安全控制数据库安全控制的核心:提供对数据库信息的安全存取服务,也即:在向授权用户提供可靠的信息和数据服务的同时;又拒
绝非授权用户对数据的存取访问请求,保证数据库数据的可用性、完整性和安全性,进而保证所有合法数据库用户的合法权益。二、数据库安全
控制数据库的安全模型:用户DBMSOSDB用户标识与鉴别存取控制操作系统安全保护数据密码存储安全保护二、数据库安全控制1、用户
标识和鉴别用户标识:用户名用户身份鉴别:(1)用户口令;(2)鉴别用户与系统的对话;(3)用户的个人特征(指纹);(
4)人脸识别;(5)只有用户特有的物品身份证明(IC卡)。二、数据库安全控制2、存取控制概念:数据库的存取控制机制用于定
义和控制一个对象(系统管理员或用户)对另一个对象(用户)的存取访问权限。对数据库的存取访问权限的定义称为授权。数据库安全最重要
的一点就是确保把访问数据库的权限只授权给有资格的用户,同时令所有未被授权的人员无法接近数据。二、数据库安全控制2、存取控制数
据库用户:(1)数据库管理员(DataBaseAdministrator,简写为DBA)用户。(2)使用数据库应用系统的用
户,简称为数据库用户。用户对于不同的数据库对象有不同的存取权限,不同的用户对同一数据库对象也有不同的权限,而且用户还可以将自己拥
有的存取权限转授给其他用户。二、数据库安全控制1)数据库管理员及其特权数据库管理员具有管理数据库的一切特权,包括:(1)连接
登录数据库。(2)可以建立和撤消任何数据库用户。(3)可以授予和收回用户对数据库表的访问特权。(4)可以为任何用户的数据库表
建立所有用户都可使用的别名(即PUBLIC同义词)。(5)可以利用SQL语句访问任何用户建立的数据库表中的数据。(6)可以对整
个数据库或对某些数据库表进行跟踪审计。(7)可以进行数据库备份和恢复备份等。二、数据库安全控制2)数据库用户及授权数据库用户
由数据库管理员创建。数据库用户一般具有以下特权。(1)连接登录自己创建的数据库。(2)建立自己的数据库表和索引等。(3)可
以将自己所建的数据库表的查询(SELECT)权、插入(INSERT)新记录权、修改(UPDATE)记录权、删除(DELETE)记录
权授予别的用户,或通过回收特权命令收回这些特权。(4)可以通过审计命令AUDIT对自己所建数据库表、索引和聚簇的访问进行跟踪审查
。三、视图机制通过为不同的用户定义不同的视图,可以把数据对象限制在一定的范围内。也就是说,通过视图机制把要保密的数据对无权存取
的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。三、视图机制比如,对于学生信息:学生关系(学号,姓名,性别,出生年月,籍
贯,专业代码,班级)S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLASS)三
、视图机制通过建立如下的视图,就可使计算机科学与技术系仅看到本专业的学生:CREATEVIEWVIEW1ASSELEC
TS#,SNAME,SSEX,SBIRTHIN,CLASSFROMSWHERESCODE#=''S0401''三、视图
机制通过建立如下的视图,就可使后勤部门仅看到全部学生的学号、姓名、性别和班级信息:CREATEVIEWVIEW2ASS
ELECTS#,SNAME,SSEX,CLASSFROMS三、视图机制通过建立如下的视图,就可使人事部门看到学生的全部信
息:CREATEVIEWVIEW3ASSELECTS#,SNAME,SSEX,SBIRTHIN,PLACEOFB,S
CODE#,CLASSFROMS四、审计审计功能把用户对数据库的所有操作自动记录下来存放在审计日志,或跟踪审查记录中。
DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。四、审计记录的审计跟踪信
息一般包括以下内容。(1)操作类型,例如修改、查询等。(2)操作涉及的数据,例如表、视图、记录、属性列等。(3)操作日期和时
间。(4)操作终端标识与操作者标识等。四、审计一般用户对自己拥有的表或视图可进行的审计操作。(1)使用SQL语句选定审计选项
。(2)审计各种对该用户的表或视图的成功或不成功的访问企图。(3)指定对某些SQL操作作审计(比如对UPDATE操作作审计)。
(4)控制在跟踪审计记录表中记录审计信息的详细程度(比如是一个事务过程还是一次存取)。四、审计DBA除了可以进行上述审计操作外
,还可以进行的审计操作:(1)对成功或失败的Logon、Logoff、GRANT和REVOKE进行审计。(2)使系统填写跟踪审
计记录的操作开始工作或停止工作。(3)为某些数据库表设定缺省选项。四、审计SQL语言对表施加跟踪审计的一种命令格式为:AU
DITSELECT,INSERT,UPDATEDELETE,ON<表名>WHENEVERSUCCESSFUL;五
、SQLServer2012的安全机制SQLServer的安全性管理机制可分为三个层次:(1)服务器级别的安全机制。
主要通过登录帐户进行控制,也即要想访问一个数据库服务器,必须拥有一个登录帐户。(2)数据库级别的安全机制。主要通过用户帐户进行控
制,也即要想访问一个数据库,必须拥有该数据库的一个用户账户身份。(3)数据对象级别的安全机制。主要通过设置数据对象的访问权限进行
控制。五、SQLServer2012的安全机制1、身份验证SQLServer2012有两种身份验证模式。(1)W
indows身份验证模式SQLServer可以使用Windows操作系统的安全机制来验证用户身份。五、SQLServer
2012的安全机制1、身份验证SQLServer2012有两种身份验证模式。(2)SQLServer身份验证模式S
QLServer在sys.syslogins系统视图中检测输入的登录名和密码。五、SQLServer2012的安全机制
1、身份验证(2)SQLServer身份验证模式采用SQLServer身份验证模式连接到数据库服务器时,需要输入连接服务器
的登录名和密码,单击“连接”按钮,即可连接到数据库服务器。五、SQLServer2012的安全机制2、用户管理使用登录
名通过SQLServer的身份验证后,登录名本身并不能让用户访问服务器中的数据库资源。要访问数据库,还必须有数据库的用户账号。
五、SQLServer2012的安全机制3、角色管理在SQLServer中,角色是为了方便管理而按相似的工作属性对用
户进行分组的一种方式。在为不同的角色分配不同的权限后,如果数据库用户拥有某一个角色,则相应地拥有该角色所赋予的访问权限。五、S
QLServer2012的安全机制4、权限管理通过授予用户对不同数据库对象的访问权限,可以控制不同用户的操作行为,保证数
据库的安全性。权限管理语句:GRANT:允许一个数据库用户或角色执行所授权限指定的操作。DENY:拒绝一个数据库用户或角色的
特定权限,并且阻止它们从其他角色中继承这个权限。REVOKE:取消先前被授予或拒绝的权限。五、SQLServer2012的
安全机制4、权限管理授权示例:授予用户xia对学生表S的SELECT、INSERT和UPDATE权限。USEJXGL;
GO;GRANTSELECT,INSERT,UPDATEONSTOxia;五、SQLServer2012的安全机
制4、权限管理第9章数据库保护技术9.3数据库的完整性数据库的完整性是指数据库的任何状态变化都能反映真实存在的客观
世界的合理状态,数据库中的数据始终保持在正确的状态。关系数据库的完整性类型:1、域完整性2、实体完整性3、参照完整性4、
用户定义完整性一、域完整性约束1、概念域完整性是指数据库字段的取值应合理有效。也就是说:◆字段(属性)的取值应是域中的值
——这是关系模式规定的◆一个属性能否为NULL——应通过语义分析而得出(由语义决定)一、域完整性约束1、概念典型的域完整
性约束有:检查(CHECK)默认值(DEFAULT)不为空(NOTNULL)等。这些约束主要是:由表定义语句定义,由数据
库管理系统的自动检查机制维护。一、域完整性约束2、示例说明比如,创建学生关系表语中的CHECK和NOTNULL:CRE
ATETABLES(S#CHAR(9)PRIMARYKEY,SNAMECHAR(10)
NOTNULL,SSEXCHAR(2)CHECK(SSEXIN(′男′,′女′)),SBIRTHIN
DATETIMENOTNULL,PLACEOFBCHAR(16),SCODE#CHAR(5)NOTN
ULL,CLASSCHAR(5)NOTNULL);一、域完整性约束2、示例说明又比如,创建学习关系表语中的DE
FAULT:CREATETABLESC(S#CHAR(9),C#CHAR(7),GRADESMALL
INTDEFAULT(0),PRIMARYKEY(S#,C#));二、实体完整性约束1、概念实体完整性是指关系的主键
值不能重复也不能取“空值”。重复:一个表中存在两个相同元组空值:该元组的存在无意义现实世界中的一个实体集
一个关系实体完整性的定义主要是在创建表时,利用主键关键字“PRIMARYKEY”,通过定义表的列级完整性约束条件或表级完整性约
束条件来实现。二、实体完整性约束1、概念为什么称为实体完整性?二、实体完整性约束2、实体完整性的检查机制当定义了表的
实体完整性约束条件后,当进行给表中插入(录入)数据记录操作时,系统就会自动进行实体完整性约束检查:(1)对主键值的唯一性的检查。
方法是如果出现主键值不唯一,则拒绝插入或修改。(2)对主键中各属性的非空检查,方法是只要主键属性中有一个主属性为空,就拒绝插入或
修改。三、参照完整性约束参照完整性是一种用于实现关系之间相互联系的主键与外键引用的约束条件。三、参照完整性约束1、概念
1)外键可以为空值的情况如果参照关系S中外键的取值,要么与被参照关系R中某元组主键的值相同,要么取空值,那么在这两个关系间建立
关联的主键和外关键引用符合参照完整性规则要求。三、参照完整性约束示例:比如,在大学教学管理数据库中:专业关系:SS(SC
ODE#,SSNAME)学生关系:S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLAS
S)SCODE#是参照关系S中的非主属性,是被参照关系SS的主键,所以SCODE#是学生关系的外键,可以为空值(许多学校到
三年级时,才确定专业)。三、参照完整性约束1、概念2)外键不可以为空值的情况如果参照关系S的外键也是其主键属性,根据实
体完整性要求,主键值不得取空值,因此,参照关系S外键的取值实际上只能取相应被参照关系R中已经存在的主键值。三、参照完整性约束示
例:比如,在大学教学管理数据库中(参照下列两个关系模式):学生关系:S(S#,SNAME,SSEX,SBIRTHIN,PL
ACEOFB,SCODE#,CLASS)学习关系:SC(S#,C#,GRADE)如果将学习关系表SC作为参照关系(其主键为
{S#,C#}),学生关系表S作为被参照关系,以“学号S#”作为两个关系表进行关联的属性,则“学号S#”是学生关系表S
的主键,是学习关系SC的外键。学习关系通过外键“学号S#”参照学生关系S。三、参照完整性约束2、检查机制在更新数据记录
时,参照完整性保持了表与表之间已定义的关系,确保了主键值在所有表中的一致。三、参照完整性约束3、举例例9.3定义被参照关系
——课程关系C的参照关系——学习关系SC中的外键的例子。SC表的定义语句定义如下:CREATETABLESC(S#
CHAR(9),C#CHAR(7),GRADESMALLINTDEFAULT(0),PRIMARYKEY
(S#,C#),FOREIGNKEY(C#)REFERENCESC(C#));四、用户定义完整性约束1、概念用户定
义完整性则是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出的约束性条件。用户定义完整性主要包括字段有效性约束和记
录有效性。四、用户定义完整性约束1、概念在SQL中,可通过提供非空约束、对属性的CHECK约束、对元组的CHECK约束、触发
器等来实现用户定义完整性要求。四、用户定义完整性约束2、用户定义完整性的实现1)基于属性值的CHECK约束四、用户定义完整性约
束2、用户定义完整性的实现2)基于元组的约束通过CHECK使得表中的若干字段的取值满足某种约束条件。四、用户定义完整性约束
2、用户定义完整性的实现3)触发器动态约束触发器(Trigger)是一个能因某一个事件触发而由系统自动执行的SQL语句或语
句序列。触发器它可以实现查询、计算、评估、交流,及完成更复杂的功能任务。四、用户定义完整性约束一个触发器由三部分组成:(1
)事件。事件是指对数据库的插入、删除、修改操作。(2)条件。条件是触发器检测事件是否发生的条件。触发器的执行机制测试条件是否成立
,如果条件成立,就执行相应的动作,否则什么也不做。四、用户定义完整性约束一个触发器由三部分组成::(3)动作。当测试条件
满足时执行的对数据库的操作。如果触发器测试满足预定的条件,那么就由DBMS执行相应的动作。动作可以在事件发生前、发生时或发生后被
触发而执行。动作可以是触发事件不发生;动作也可以是一系列对数据库的操作,甚至可以是与触发事件本身无关的其它操作。五、SQLSe
rver2012的完整性约束完整性约束是SQLServer2012数据库实现数据的强制完整性的标准机制。根据数据完整性
约束类型的不同,它所作用的数据库对象和范围也不同,系统为此提供了各种实现机制以强制数据的完整性。五、SQLServer20
12的完整性约束表9.1SQLServer2012的数据完整性分类表完整性类型实现机制描述域完整性DEFAULT指定列
的默认值CHECK指定允许值NULL是否允许空值实体完整性主键约束每行的惟一标识UNIQUE不允许有重复key参照完整性外键约束定
义的列的值必须与某表的主键值或惟一键值一致用户定义完整性CHECK指定允许值触发器由用户定义不属于其他任何完整性类别的特定业务规则
五、SQLServer2012的完整性约束1、域完整性约束在SQLServer2012中的实现◆DEFAULT约束
五、SQLServer2012的完整性约束例9.4在大学教学管理数据库中,为学习关系SC的“成绩”字段GRADE设置默
认值“0”。(1)启动SQLServerManagementStudio工具,打开大学教学管理数据库JXGL。五、SQL
Server2012的完整性约束例9.4在大学教学管理数据库中,为学习关系SC的“成绩”字段GRADE设置默认值“0”。
(1)启动SQLServerManagementStudio工具,打开大学教学管理数据库JXGL。(2)在“表”对象中选择
学习关系表SC,打开“表设计器”。五、SQLServer2012的完整性约束例9.4在大学教学管理数据库中,为学习关系S
C的“成绩”字段GRADE设置默认值“0”。(1)启动SQLServerManagementStudio工具,打开大学教学
管理数据库JXGL。(2)在“表”对象中选择学习关系表SC,打开“表设计器”。(3)在“表设计器”中,选择“成绩”字段GRAD
E。(4)在下面的列属性选项页中,选择“默认值或绑定”项,在其右侧的网格中输人默认值“0”。五、SQLServer201
2的完整性约束(5)单击“保存”按钮,保存数据表,即完成建立DEFAULT约束。五、SQLServer2012的完整性约
束2、实体完整性约束在SQLServer2012中的实现◆主键约束例9.6在大学教学管理数据库中,查看学习关系S
的主键。五、SQLServer2012的完整性约束3、参照完整性约束在SQLServer2012中的实现例9.8在
大学教学管理数据库中,为学习关系SC的“学号”字段S#创建外键约束,以保证该列取值与学生关系S的“学号”字段S#的取值相对应。五
、SQLServer2012的完整性约束4、用户定义完整性约束在SQLServer2012中的实现SQLServ
er2012的用户定义完整性约束,既可以通过CHECK约束实现简单的约束条件,又可以通过触发器实现比较复杂的约束条件。◆触发器
是一种使用非说明方法实施完整性约束的方法。◆利用数据库触发器可定义和实施任何类型的完整性规则。五、SQLServer2012
的完整性约束4、用户定义完整性约束在SQLServer2012中的实现SQLServer2012据库提供两大类触发
器:DML触发器和DDL触发器。五、SQLServer2012的完整性约束4、用户定义完整性约束在SQLServer
2012中的实现1)DML触发器DML触发器是当数据库服务器中发生数据操作语言(DML)事件时要执行的操作。DML事件包括
:对表或视图发出的UPDATE、INSERT或DELETE语句。DML触发器用于在数据被修改时,强制执行业务规则,扩展SQLS
erver2012的数据库约束、默认值和规则的完整性检查逻辑。五、SQLServer2012的完整性约束4、用户定义完
整性约束在SQLServer2012中的实现2)DDL触发器DDL触发器是SQLServer2012中的一种特殊的
触发器,在响应数据定义语言(DDL)语句时触发。DDL触发器一般用于在数据库中执行管理任务,例如,审核以及规范数据库操作。五、
SQLServer2012的完整性约束4、用户定义完整性约束在SQLServer2012中的实现在SQLServ
er2012中:触发事件是指引起激发触发器的SQL语句,也即对指定表的INSERT语句、UNPDATE语句及DELETE语句。五
、SQLServer2012的完整性约束4、用户定义完整性约束在SQLServer2012中的实现触发条件是一个指
定的布尔表达式。触发器是一个特殊的过程,当触发语句的触发条件计算为真时,该过程被执行。五、SQLServer2012的完整
性约束执行触发器时,系统会自动创建两个特殊的逻辑表inserted表和deleted表,用于保存因用户操作而被影响到的原数据值
或新数据值。五、SQLServer2012的完整性约束◆inserted表用于保存插入的新记录,当触发一个INSERT触发
器时,新的记录会插入到操作表和inserted表中。◆deleted表用于保存已从表中删除的记录,当触发一个DELETE触发器时
,被删除的记录会存放到deleted逻辑表中。◆修改一条记录等于插入一新记录,同时删除旧记录。五、SQLServer2012
的完整性约束例9.9在大学教学管理数据库的学生关系S上创建触发器S_TRI,当向S插入一记录时,检查该记录的“专业代码”字段
SCODE#在专业关系SS中是否存在,如果不存在,则不允许插入该记录。(1)启动SQLServerManagementS
tudio工具,打开大学教学管理数据库JXGL。(2)如图10.10所示,在“表”对象中选择学生关系表S,展开表目录,右击“触发
器”对象,选择“新建触发器”菜单命令,系统将打开“查询编辑器”,并给出触发器的创建命令格式,如图10.11所示。五、SQLS
erver2012的完整性约束五、SQLServer2012的完整性约束(3)在查询编辑器中,用户根据需要修改触发器名
称,添加触发器内容,如下列代码所示,完成触发器的编写,再单击“执行”按钮,在出现“命令已成功完成”的提示后,即完成创建。表目录的“
触发器”对象下将出现该触发器,如图10.12所示。五、SQLServer2012的完整性约束触发器代码如下:CREATE
TRIGGERS_TRIONSFORINSERTASBEGINIFEXISTS(SELECT
FROMinsertedaWHEREa.SCODE#NOTIN(SELECTSS.SCODE#FR
OMSS))BEGINRAISERROR(‘违背数据的一致性。’,16,1)ROLLBACKTRANSACTION
ENDEND五、SQLServer2012的完整性约束比如,对于图1.8中的关系表S,当执行SQL语句:INSERT
INTOSVALUES(’201404002’,’杨燕’,’女’,’1983-05-09’,’西安’,’S0405’,’20
0405’);时,由于’S0405’在专业关系表SS中不存在,故系统发出相应的消息,如图9.13所示。###第9章数据库保护
技术9.4数据库恢复数据库恢复研究当数据库中数据遭到破坏时,把遭到破坏的数据库还原到原来的正确状态或用户可接受的状态的策略
和实现技术。一、数据库的故障分类◆事务故障◆系统故障◆介质故障一、数据库的故障分类1、事务故障事务故障主要指数据
库在运行过程中,出现的输入数据错误、运算溢出、应用程序错误、并发事务出现死锁等非预期的情况,而使事务未能运行到正常结束就被夭折,导
致事务非正常结束的一类故障。一、数据库的故障分类2、系统故障系统故障主要指数据库在运行过程中,由于硬件故障、操作系统或DBM
S故障、数据库管理误操作、突然停电等情况,导致所有正在运行的事务以非正常方式终止的一类故障。一、数据库的故障分类3、介质故障
介质故障主要指数据库在运行过程中,由于磁头碰撞、磁盘损坏、瞬时强磁场的干扰等情况,使得数据库中数据部分或全部丢失的一类故障。#
#二、数据库故障恢复原理和基本恢复方法数据库恢复的基本原理:利用冗余地存储在“别处”的信息,部分地或全部地重建数据库。①关
键问题如何建立冗余数据;如何利用这些冗余数据实施数据库恢复。②建立冗余数据常用技术:数据转储和日志文件。二、数据库故障恢复原理和
基本恢复方法1、用数据库转储方法恢复数据库(1)冗余数据的建立●定期地把整个数据库或数据库中的数据拷贝到其它磁盘上保存起来。
●上述过程称为数据库转储。●转储中用于备份数据库或数据库中数据的数据文件称为后援副本。二、数据库故障恢复原理和基本恢复方法1
、利用数据转储方法恢复数据库(2)恢复方法①当数据库遭到破坏时,利用后援副本就可以把数据库恢复到转储时的状态;②要想把
数据库恢复到故障发生时的状态,则必须重新运行自转储以后的所有更新事务。转储运行事务故障发生点运行正常TbTfTa重装后援副
本重新运行事务恢复二、数据库故障恢复原理和基本恢复方法数据库转储及恢复二、数据库故障恢复原理和基本恢复方法1、利用数据转储方法
恢复数据库(3)转储周期与转储方式由于转储的时机及持续时间不同,恢复方式会不同。①静态转储:指在系统中没运行事务时进行的
转储操作。优点:简单,可得到满足数据一致性的后援副本;存在问题:降低了数据库的可用性。二、数据库故障恢复原理和基本恢复方法
1、利用数据转储方法恢复数据库(3)转储周期与转储方式②动态转储:在转储期间允许用户对数据库进行更新操作的转储操作;存在问
题:后援副本的数据不能保证正确有效;解决方法:把转储期间的更新活动登记到日志文件中。通过后援副本和日志文件中转储期间的日志信息,
把数据库恢复到正确的状态。二、数据库故障恢复原理和基本恢复方法2、利用日志文件恢复数据库(1)冗余数据的建立DBMS把所有事
务对数据库的更新(插入、删除、修改)信息都记录在一个文件上,该文件就称为日志文件。二、数据库故障恢复原理和基本恢复方法日志文件的
类型:①以记录为单位的日志文件日志文件中登记的关于每一次数据库更新的情况信息称为一个运行记录。一个运行记录通常包括如下一些内
容:●更新事务的标识(标明是哪个事务);●操作的类型(插入、删除或修改);●操作对象;●更新前的旧数据值(对于插入操
作此项为空);●更新后的新数据值;●事务处理中的其它信息,如事务开始时间、事务结束时间、真正回写到数据库的时间等。二、数
据库故障恢复原理和基本恢复方法日志文件的类型:②以数据块为单位的日志文件只要某个数据块中有数据被更新,就将整个更新前和更新
后的内容放入日志文件中。二、数据库故障恢复原理和基本恢复方法日志文件的类型:③日志文件的登记原则●严格按并发事务执行的
时间次序进行登记;●必须先写日志文件,后写回数据库二、数据库故障恢复原理和基本恢复方法2、利用日志文件恢复数据库(2)恢复
方法①重新装入后援副本把数据库恢复到转储结束时刻的正确状态;②利用日志文件,对已完成的事务进行重做(Redo)处理;对故障
发生时尚未完成的事务进行撤消(Undo)处理。Ta静态转储Tb运行事务Tf故障发生点运行正常无用户更新数据库登记日志文件重装后
援副本利用日志文件恢复数据库继续运行事务介质故障恢复>登记日志文件>二、数据库故障恢复原理和基本恢复方法利用日志文件恢复数据库##
三、恢复策略1、事务故障的恢复指数据库在运行过程中,出现非预期的情况,引起事务执行失败的一类故障。(1)结果:事务没有达到预
期的终点,但可能修改了数据库;(2)恢复策略:Undo(撤销原操作)三、恢复策略1、事务故障及其恢复(3)恢复步骤:①
反向扫描日志文件,也即从日志文件的最后开始向前扫描日志文件,查找该事务的日志信息;②如果找到的是该事务的开始标记,则转⑤;三、
恢复策略③如果找到的是该事务已作的某更新操作的日志信息,则对数据库执行该更新事务的逆操作,即:若原更新操作是插入操作,则逆操作
即为删除“更新后的记录”(原插入记录)的操作;若原更新操作是删除操作,则逆操作即为插入“更新前的值(记录)”的操作;若原更新操作是
修改操作,则逆操作即为将“更新前的值”写回数据库的操作,也即用修改前的值代替修改后的值。④转②,继续反向扫描日志文件;⑤结
束反向扫描,事务故障恢复完成。三、恢复策略2、系统故障的恢复指造成系统停止运转,使得系统要重新启动的任何事件。(1)结果:
影响正在运行的所有事务,使之非正常终止,引起内存信息丢失,但不破坏外存中数据。(2)恢复策略:●对未完成的事务:Undo●
对已提交的事务:Redo(3)恢复思路及步骤:三、恢复策略●系统故障造成的数据库不一致状态主要有两类:一是未完成的事务对
数据库的更新可能已写入了数据库;二是已提交的事务对数据库的更新可能还留在缓冲区没来得及写入数据库。因此,在故障恢复时,需要先装
入故障前的最新后援副本,把数据库恢复到最近的转储结束时刻的正确状态,然后就要撤消故障发生时未完成的事务,重做已完成的事务。三、恢复
策略●假设日志文件中的内容是系统故障前的最近一次转储结束时刻以后的日志信息,则恢复步骤是:三、恢复策略系统故障恢复:①
正向扫描日志文件,也即从日志文件的开头开始向后扫描日志文件,对于找出的在故障发生前已经提交的事务(已提交事务的标志是,既有该事务开
始的日志信息BEGINTRANSACTION,也有该事务已提交的日志信息COMMIT),将其事务标识记入重做(Redo)队列中。
对于找出的在故障发生时尚未完成的事务(尚未完成事务的标志是,只有该事务开始的日志信息BEGINTRANSACTION,而无该事务
的提交日志信息COMMIT),将其事务标识记入撤消(Undo)队列。三、恢复策略系统故障恢复:②对撤消队列中的各个事务进行撤
消(Undo)处理,其方法是:反向扫描日志文件,对每个Undo事务的更新操作执行逆操作(与事务故障恢复步骤中③类似)。三、恢复策
略系统故障恢复:③对重做列中的各个事务进行重做(Redo)处理,其方法是:正向扫描日志文件,对每个Redo事务重新执行日志文
件登记的操作。即将日志记录中“更新后的值”写入数据库。重做队列正向扫描日志文件重做正向扫描日志文件撤消队列反向扫描日志文件更新操作
逆操作三、恢复策略系统故障恢复步骤三、恢复策略3、介质故障的恢复指数据库在运行过程中,由于磁盘损坏引起磁盘内容读不出来的一类
故障。(1)结果:破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。(2)恢复策略:●重装数据库,重做已完成事务
。(3)恢复步骤:三、恢复策略具体恢复方法:①装入故障发生时刻最近一次的数据库转储后援副本,使数据库恢复到最近一次转储时的
一致性状态。对于动态转储的数据库后援副本,还须同时装入转储开始时刻的日志文件副本,利用恢复系统故障的方法(即Redo+Undo
),才能将数据库恢复到一致性状态。三、恢复策略具体恢复方法:②装入故障发生时刻最近一次的数据库日志文件副本,重做已完成的事务
,即:首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。然后正向扫描日志文件,对重做队列中的所有事务进行重做处
理。这样就可以将数据库恢复至故障前某一时刻的一致状态了。装入最近日志文件副本最近转储一致性状态装入最近后援副本日志文件正向扫描正
向扫描重做队列重做日志文件日志文件三、恢复策略介质故障恢复步骤##四、具有检查点的恢复技术1、问题的提出利用日志文件进行数据库
恢复时,一般需要搜索日志文件中的所有日志记录,不仅耗费时间大,而且很多需要Redo处理的事务的重新执行又浪费了大量的时间。在日
志文件中增加一种新的检查点记录和一个重新开始文件。四、具有检查点的恢复技术2、检查点是用于表示数据库是否正常运行的一个时间标
志。四、具有检查点的恢复技术(1)检查点的作用根据检查点可判断哪些事务是正常结束,哪些事务是非正常结束,从而确定哪些数据不需
要恢复,哪些数据需要恢复和如何进行恢复。(2)检查点的建立方法●按照预定的时间间隔建立检查点;●按照某种规则建立检查点。
四、具有检查点的恢复技术(3)在检查点记录中填写的内容●该时刻所有正在执行的事务的标识;●该时刻所有正在执行的事务的最近
一个运行记录在日志中的地址。四、具有检查点的恢复技术3、重新开始文件用于记录各个检查点记录在日志文件中的地址。四、具有检查点的
恢复技术4、动态地维护日志文件和建立检查点需要执行的操作:(1)将当前日志缓冲区中的所有日志记录写入磁盘的日志文件中;(2
)在日志文件中写入一个检查点记录;(3)将当前数据缓冲区的所有数据记录写入磁盘的数据库中;(4)把检查点记录在日志文件中的地址
写入“重新开始文件”。Tf(系统故障)Tc(检查点)>时间T1不需要RedoT2RedoT3Undo(撤消)T4RedoT5Und
o(撤消)四、具有检查点的恢复技术5、恢复策略四、具有检查点的恢复技术6、恢复步骤(1)从重新开始文件中找到最后一个检查点记
录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。(2)由该检查点记录得到检查点建立时刻所有正在执行的事务,并设
这些事务构成一个事务队列Active_LIST,把Active_LIST暂时放入Undo_LIST队列,Redo_LIST队列暂为
空。四、具有检查点的恢复技术6、恢复步骤(3)从检查点开始正向扫描日志文件,如有新开始的事务Ti,把Ti暂时放入Undo_L
IST队列;如有提交的事务Tj,把Tj从Undo_LIST队列移到Redo_LIST队列,直到日志文件结束。(4)对Undo_
LIST中的每个事务执行UNDO操作,对Redo_LIST中的每个事务执行REDO操作。重做队列正向扫描日志文件重做最后检查重
新开始文件当时执行事务从检查点扫描日志文件日志文件点地址撤消队列反向扫描日志文件撤消四、具有检查点的恢复技术##五、数据库镜像所
谓镜像磁盘技术是指数据库以双副本的形式存于两个独立的磁盘系统中,两个磁盘系统有各自的磁盘控制器,一个磁盘称为主磁盘或主设备,另一个
磁盘称为次磁盘或镜像设备,它们之间可以互相切换。在读数据时,可以选读其中任一磁盘;在写磁盘时,两个磁盘都写入相同的内容,且一般是
先把数据发送到主磁盘,然后再发送到次磁盘。这种把所有写入主设备的数据也同时写入镜像设备的方式也称为数据库设备的动态“复制”。五、数
据库镜像采用数据库镜像技术后,当其中一个磁盘因为介质故障而丢失数据时,就可由另一个磁盘保证系统的继续运行,并自动利用另一个磁盘数
据进行数据库的恢复,不需要关闭系统和重装数据库后援副本。End六、SQLServer数据库的备份和还原1、数据库备份End第
9章数据库保护技术9.5并发控制Ο、并发操作与并发控制的引入单用户数据库,事务顺序执行,没有冲突现象。在多用户数据库
中,由于会涉及多个事务并行(同时)操作数据库中的同一数据库对象,每个事务都有可能和其他事务发生冲突。允许多个应用程序同时访问同一
数据(并发操作),这样的特性称为并发性(单处理机的情况下,多个进程在同一时间间隔运行)。一、DB并发操作带来的数据不一致问题例9
.13在一个飞机订票系统中,由于可能出现的下列业务活动序列,会导致数据的不一致。1、丢失修改时间T1T2DB中的A值t025
t1read(A)t2read(A)t3A:=A-1t4write(A)t524t6A:=A-1t7write(A)t824一、D
B并发操作带来的数据不一致问题一、DB并发操作带来的数据不一致问题2、读过时数据时间T1T2DB中的A值t025t1read(A
)t2read(A)t3A:=A-10t4write(A)t515一、DB并发操作带来的数据不一致问题3、读“脏”数据时间T1T
2DB中的A值t025t1read(A)t2A:=A-10t3write(A)t4read(A)15t5ROLLBACKt625一
、DB并发操作带来的数据不一致问题4、产生数据不一致的原因并发操作破坏了事务的隔离性。并发控制就是要通过正确的调度方式,使一
个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。二、锁1、锁的定义锁是防止存取同一资源的用户之间出现不正确地修
改数据或不正确地更改数据结构的一种机制。二、锁2、锁的类别(1)锁排它锁(X锁)当某个事务T为修改某个数据项A且不允许其它事
务修改该数据项,或不允许其它事务对该数据项加S(共享)锁时,则该事务可以对A加排它锁,排它锁又称为写锁。举例:LOCKTABL
E<表名>INEXCLUSIVEMODE;特征:当事务T对数据项A加了X锁后,该事务可以读A和修改A,但该事务释放A上的
X锁之前,其它任何事务都不能再对A加任何类型的锁(不能再读A和修改A)。二、锁2、锁的类别(2)共享它锁(S锁)当某个事务
T希望阻止其它事务修改正为它读取的某个数据项A时,则该事务可以对A加共享锁,共享锁又称为读锁。举例:LOCKTABLE<表名
>INSHAREDMODE;特征:当事务T对某个数据项A加了S锁,该事务可以读A但不能修改A,其它事务可以再对A加S锁,但
在事务T释放A上的S锁之前不能对A加X锁(可以读A,不能修改A)。二、锁3、S锁和X锁的共存相容矩阵SX-S?×?X××?其中
:“—”表示没有加锁,“√”表示两锁相容,“X”表示两锁不相容三、锁协议1、锁协议是关于在什么条件下可以申请S锁或X锁,持锁时
间如何确定,何时释放锁的约定或规则。三、锁协议2、一级锁协议所谓的一级锁协议,就是事务T在修改数据R之前必须先对数据R所在的
项申请加X锁,在获得了X加锁后,直到该事务T结束时才释放所加的X锁。如果未获准加X锁,则该事务T进入等待状态,直到获准X加锁后,该
事务才继续执行的一种约定。事务T要修改数据R:Y申请加X锁?T结束时释放X锁加X锁N等待三、锁协议2、一级锁协议特征:获得X锁
的事务,可以读R,修改R;并用COMMIT和ROLLBACK释放X锁;其它事务:在T结束前不能读R,也不能修改R。作用:可防止丢失
修改,保证事务的可恢复性。三、锁协议3、二级锁协议所谓的二级锁协议,就是事务T在读数据R之前必须先对数据R所在的项申请加S锁,
在获得了S加锁后,读完数据R后即可释放所加的S锁。如果未获准加S锁,则该事务T进入等待状态,直到获准S加锁后该事务才继续执行的一种
约定。事务T要读数据R:Y申请加S锁?加S锁读数据释放S锁N等待三、锁协议3、二级锁协议特征:获得S锁的事务,可以读R,不能修
改R;用UNLOCK释放S锁(不需等该事务T结束);其它事务:在T结束前可加S锁读R,不能修改R。作用:可防止丢失修改和防
止读“脏”数据,保证事务的可恢复性。三、锁协议4、三级锁协议所谓的三级锁协议,就是事务T在读数据R之前必须先对数据R所在的项申
请加S锁,在获得了S加锁后,直到该事务T结束时才释放所加的S锁。如果未获准加S锁,则该事务T进入等待状态,直到获准S加锁后该事务才
继续执行的一种约定。事务T要读数据R:Y申请加S锁?T结束时释放S锁加S锁读数据N等待三、锁协议4、三级锁协议特征:获得S锁的
事务,可以读R,不能修改R;用COMMIT和ROLLBACK释放;其它事务:在T结束前可加S锁读R,不能修改R。作用:可防止丢失
修改、防止读“脏”数据、防止读过时数据,保证事务的可恢复性。四、封锁带来的问题:活锁与死锁1、活锁如果事务T1封锁了数据R,事
务T2又请求封锁R,于是T2等待,T3也请求封锁R,当T1释放了R上的封锁之后,系统首先批准了T3的请求,T2仍然等待,然后T4又
请求封锁R,当T3释放了R上的封锁之后,系统又批准了T4的请求,T2继续等待,……,如此下去,T2有可能永远等待。这种可能存在某
个事务永远处于等待状态、得不到封锁的机会的现象称为活锁。避免活锁的方法:先来者先执行。R1①④T1T2R2②③四、封锁带来的问
题:活锁与死锁2、死锁如果两个或两个以上的事务都处于等待状态,且每个事务都需等到其中的另一个事务解除封锁时,它才能继续执行下去
,结果使任何一个事务都无法继续执行的现象,称为死锁。四、封锁带来的问题:活锁与死锁3、死锁的预防(1)一次加锁法要求每个事务
必须对所有要使用的数据项一次性地全部加锁,否则就不能继续执行。缺点:扩大了锁的范围,降低了系统的并发度。四、封锁带来的问题:活锁
与死锁3、死锁的预防(2)顺序加锁法预先对数据项规定一个加锁顺序,所有事务都按这个顺序进行加锁缺点:由于各事务推进的动态性
,很难预先确定出一个合理的加锁顺序。四、封锁带来的问题:活锁与死锁4、死锁的检测与解除(1)超时法如果一个事务的等待时间超过
了规定的时限,就认为发生了死锁。优点:实现简单缺点:①若时限设置较短,会出现误判死锁的情况;②若时限设置太长,可能出现死锁发生后,不能及时发现的情况。四、封锁带来的问题:活锁与死锁4、死锁的检测与解除(2)有向等待图法①表示事务等待关系的有向图描述方法在有向等待图G=(V,E)中,用V表示结点集合,每个结点表示一个正在运行的事务;用E表示有向边的集合,每条有向边表示事务的等待关系:即若T1正在等待给被T2锁住的数据项加锁,则在T1和T2之间划一条有向边,方向是T1指向T2。按如上方法构造的表示事务之间等待关系的有向等待图,就可动态地反映所有事务的等待情况。四、封锁带来的问题:活锁与死锁(2)有向等待图法②死锁的检测在有向等待图中如果存在回路,就意味着存在死锁;如果无任何回路,则表示无死锁产生。并发控制子系统周期性地(比如每隔0.5分钟)检测事务的有向等待图,如果发现有向等待图中存在回路,就表示系统中出现了死锁。四、封锁带来的问题:活锁与死锁(2)有向等待图法③死锁的解除选择一个处理死锁代价最小的事务,将其撤消,并释放它持有的所有锁。五、并发调度的可串行性1、事务的调度调度:按某一执行次序安排各事务执行的步骤。串行调度:多个事务依次执行。并发调度:利用分时方法同时处理多个事务。五、并发调度的可串行性2、可串行化调度当多个事务的执行结果,与按某一顺序串行地执行它们时的结果相同时,则称这种调度为可串行化调度。T1T2T1T2Read(A)A:=A-100Write(A)Read(B)B:=B+100Write(B)Read(B)Temp:=B0.2B:=B-tempWrite(B)Read(C) C:=C+tempWrite(C)Read(B)Temp:=B0.2B:=B-tempWrite(B)Read(C)C:=C+tempWrite(C)Read(A)A:=A-100Write(A)Read(B)B:=B+100Write(B)(a)先执行T1后执行T2的串行调度(b)先执行T2后执行T1的串行调度3、可串行化调度示例——例10.14T1T2T1T2Read(A)A:=A-100Write(A)Read(A)A:=A-100Write(A)Read(B)B:=B+100Write(B)Read(B)Temp:=B0.2B:=B-tempWrite(B)Read(C) C:=C+tempWrite(C)Read(B)Temp:=B0.2B:=B-tempWrite(B)Read(B)B:=B+100Write(B)Read(C)C:=C+tempWrite(C)(c)正确的并发调度(d)错误的并发调度lockA…lockB…lockC…unlockA…unlockB…unlockC扩展阶段收缩阶段六、两段锁协议1、概念在每一个事务中,所有的加锁语句都在解锁语句之前的规则称为两段锁协议。●加锁段(扩展阶段):事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。●解锁段(收缩阶段):事务可以释放任何数据项上的任何类型的琐,但是不能再申请任何琐。六、两段锁协议2、两段锁协议与可串行化调度的关系●若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。●两段锁协议是并发调度可串行化的充分条件,但不是必要条件。六、两段锁协议3、两段锁协议与一次加锁法的异同点●一次加锁法(要求每个事务必须对所有要使用的数据项一次性地全部加锁,否则就不能继续执行)遵守两段锁协议;●遵守两段锁协议的事务并不遵守一次加锁法。
献花(0)
+1
(本文系太好学原创)