1、第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院 数据库安全及维护数据库安全及维护第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院引入引入 事务(Transaction)是并发控制的基本单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院学习目标学习目标事务的概念和事务的概念和ACID特性特性并发操作带来数据的不一致性问题并发操作带来数据的不一致性问题封锁是实现并发控制的一个非
2、常重要的技术封锁是实现并发控制的一个非常重要的技术学习完本课程,您应该能够学习完本课程,您应该能够:第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院知识重、难点分析知识重、难点分析重点重点:事务的概念和事务的概念和ACID特性特性并发操作带来数据的不一致性问题并发操作带来数据的不一致性问题难点难点:封锁是实现并发控制的一个非常重要的技术封锁是实现并发控制的一个非常重要的技术第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院一、基本概念1事务 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列
3、这些操作要么都做,要么都不做,是一个不可分割的工作单位。在SQL语言中,定义事务的语句有:BEGIN TRANSACTION COMMIT ROLLBACK事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。事务事务第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学
4、院安徽新华电脑专修学院三种事务运行模式三种事务运行模式1、自动提交事务(默认事务管理模式)每条单独的语句都是一个事务。每个语句后都隐含一个COMMIT。2、显式事务 以BEGIN TRANSACTION显式开始,以COMMIT或ROLLBACK显式结束。3、隐性事务 在前一个事务完成时,新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK显式结束。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院事务的特性事务的特性(ACID特性特性)1)原子性(Atomicity)事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。2)一致性(
5、Consistency)事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。3)隔离性(Isolation)一个事务的执行不能被其他事务干扰。4)持续性/永久性(Durability)一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院1)原子性原子性(Atomicity)银行转帐:事务T从A帐户过户50¥到B帐户。T:Read(A);A=A-50;Write(A);Read(B);B=B+50;Write(B);Read(X):从数据库传送数据项X到事务的
6、工作区中。Write(X):从事务的工作区中将数据项X回写到数据库。这个工作不能只完成一部分,它必须满足原子性。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院 2)一致性一致性(Consistency)事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。当数据库只包含成功事务提交的结果时,就说明数据库处于一致状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始的一致状态。如银行转帐,转帐前后两个帐户金额之和应保持不变。第十一讲第十一讲SQLServer权限管理权限
7、管理安徽新华电脑专修学院安徽新华电脑专修学院3)隔离性隔离性(Isolation)一个事务的执行不能被其他事务干扰。事务查看数据时数据所处的状态,要么是另一并发事务修改它以前的状态,要么是另一并发事务修改它以后的状态,事务不会查看中间状态的数据。这称为可串行性。对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院4)持续性持续性/永久性永久性(Durability一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结
8、果有任何影响。系统发生故障不能改变事务的持久性。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院活动状态活动状态中止状态中止状态失败状态失败状态提交状态提交状态部分部分提交状态提交状态初始状态初始状态最后一条语最后一条语句被执行后句被执行后事务回滚事务回滚,数据库恢数据库恢复到事务开始状态复到事务开始状态事务无法继续事务无法继续正常运行正常运行成功完成成功完成,永久永久写入数据库写入数据库第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院Use 学生管理数据库Go Begin Tran Mytran-启动事务 I
9、nsert into 学生表 Values(200308003,李四,男,计算机,软件2班,22)-插入一条记录Delete 学生表Where 学号=200308003 -删除记录Rollback Tran Mytran-回滚事务Commit TranGo Select*From 学生表第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院丢失修改(Lost Update)丢失更新:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑
10、专修学院第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院脏读(Dirty Read)事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院不不可重复读可重复读l事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。l事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录
11、当事务T1再次按相同条件读取数据时,发现某些记录神秘地消失了。l事务T1按一定条件从数据库中读取了某些数据记录后,事务T2插入了一些记录,当事务T1再次按相同条件读取数据时,发现多了一些记录。后两种不可重复读有时也称为幻影(Phantom Row)现象。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院幻像读幻像读当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻像读问题。事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其它事务删除。同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不
12、存在于原始读中。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院事务的调度事务的调度事务的执行顺序称为一个调度,表示事务的指令在系统中执行的时间顺序。一组事务的调度必须保证:n包含了所有事务的操作指令。n一个事务中指令的顺序必须保持不变。串行调度:n串行调度中,属于同一事务的指令紧挨在一起。n对有N个事务的事务集,可以有N!个有效调度。并行调度:n在并行调度中,来自不同事务的指令可以交叉执行。n当并行调度等价于某个串行调度时,则称它是正确的。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院串行调度串行调度:第十
13、一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院并发调度并发调度:第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院并行Vs串行:n并行事务会破坏数据库的一致性。n串行事务效率底。并行的优点:1、一个事务由不同的步骤组成,所涉及的系统资源也不同,这些步骤可以并发执行,以提高系统的吞吐量。2、系统中存在着周期不等的各种事务,串行会导致难于预测的时延。如果各个事务所涉及的是数据库的不同部分,采用并发会减少事务平均响应时间。核心问题:在保证一致性的前提下,最大限度地提高并发度。第十一讲第十一讲SQLServer权限管理权限
14、管理安徽新华电脑专修学院安徽新华电脑专修学院调度的简化调度的简化 事务并发执行时,只有访问相同数据项的基本操作read和write才会在事务间产生影响。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院调度的可串行化调度的可串行化 调度的目的就是用于确定那些可以保证数据库一致性的所有事务的全部指令的执行序列!如果一个并发调度的执行效果与一个包含相同事务的串行调度的执行效果是相同的,我们就说它们是等价的。事务的串行执行可以保证数据库的一致性,这时不言而喻的。因此,与之等价的并发调度也可以保证数据库的一致性。第十一讲第十一讲SQLServer权限管理权限管理
15、安徽新华电脑专修学院安徽新华电脑专修学院指令的可交换性指令的可交换性 1、read-read指令(指令(不冲突不冲突)第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院指令的可交换性指令的可交换性2、read-write指令(指令(冲突冲突)第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院指令的可交换性指令的可交换性3、write-read指令(指令(冲突冲突)第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院指令的可交换性指令的可交换性4、write-write指令(指令
16、冲突冲突)第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院调度的可恢复性调度的可恢复性 1、可恢复调度 事务T7读取了事务T6所写的数据A,如果事务T6发生故障而回滚,就有可能引起T7的回滚,因此事务T6必须在T7提交之前进行提交,才能保证调度中事务是可恢复的。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院2、无级联调度 为了避免调度中事务的级联回滚,对于每对事务Ti和Tj,如果Tj读取了由Ti所写的数据项,则Ti必须在Tj读取之前提交。我们把这样的调度称为无级联调度。第十一讲第十一讲SQLServer权限
17、管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院并发控制:就是要用正确的方式调度并发操作,避免造成数据的不一致性,使一个用户事务的执行不受其它事务的干扰。另一方面,对数据库的应用有时允许某些不一致性。并发控制的主要方法是采用封锁机制(Locking)。并发控制并发控制第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院封锁:事务对数据库操作之前,先对数据加锁以便获得这个数据对象的一定控制,使得其他事务不能更新此数据,直到该事务解锁为止。1、封锁的类型:共享锁/S锁,也称读锁(RLOCK):若事务T对数据对象A加上S锁,则事务T可以读取A但不能修改A,其
18、他事务只能对A加S锁,而不能加X锁,直到T释放A上的S锁。保证了其他事务可以读A,但在T释放A上的锁之前不能修改A。排他锁/X锁,也称写锁(WLOCK):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。保证了其他事务在T释放A上的锁之前不能再读取和修改A。封锁封锁第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院2 2、封锁类型的控制方式、封锁类型的控制方式封锁类型决定控制方式,用相容矩阵表示控制方式。X锁锁S锁锁X锁锁NNYS锁锁NYYYYY T2T1 第十一讲第十一讲SQLServer
19、权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院2 2、封锁粒度封锁粒度封锁粒度越大,系统中能够被封锁的对象就越少,并发度就越小,但同时系统开销也越小。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院3 3、封锁协议封锁协议对何时申请X锁或S锁、持锁时间、何时释放等规定一些规则,称为封锁协议。1)保证数据一致性的封锁协议三级封锁协议(1)一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。-防止丢失修改。(2)二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。-防止丢失修改、防止读“
20、脏”数据。(3)三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。-防止丢失修改、防止读“脏”数据、防止了不可重复读。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院2)保证并行调度可串行性的封锁协议两段锁协议两段锁(two-phase lock,2PL)协议:1)对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁;2)在释放一个封锁之后,事务不再获得任何其他封锁。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院3、用封锁机制解决购买火车票问题:、用封锁机制解决购
21、买火车票问题:第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院活锁与死锁活锁与死锁1 1、活锁活锁如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。事务T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后事务T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求T2有可能永远等待,这就是活锁的情形。避免活锁的简单方法是采用先来先服务的策略。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院活锁与死锁活锁与死锁2 2、死锁死锁如果事务T1封锁了数据R1,事
22、务T2封锁了数据R2,然后T1又请求封锁R2,因为T2已封锁了R2,于是T1等待T2释放R2上的锁。接着T2又申请封锁R1,因为T1已封锁了R1,T2也只能等待T1释放R1上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院1)1)死锁的预防死锁的预防一次封锁法:一次封锁法:每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。顺序封锁法:顺序封锁法:预先
23、对数据对象规定一个封锁顺序,所有事务都按照这个顺序实行封锁。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院2)2)死锁的诊断死锁的诊断超时法:超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。等待图法:等待图法:事务等待图是一个有向图G=(T,U)。T为结点的集合,每个结点表示正运行的事务;U为边的集合,每条边表示事务等待的情况。若T1等待T2,则T1、T2之间划一条有向边,从T1指向T2。事务等待图动态地反映了所有事务的等待情况。并发控制子系统周期性地检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。第十一讲第十一讲SQ
24、LServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院3)3)死锁的解除死锁的解除通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务得以继续运行下去。当然,对撤消的事务所执行的数据修改操作必须加以恢复。死锁解决方法:将所有数据一次性加锁降低了并发度。预先规定一个封锁顺序。诊断法:检测是否有死锁发生,如有则设法解除。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院故障的种类故障的种类1事务内部的故障事务内部的故障有的是可以通过事务程序本身发现的,有的是非预期的,不能由事务程序处理的。示例:(通过
25、事务程序本身发现的)银行转帐事务将一笔金额从一个帐户甲转给另一个帐户乙。数据恢复数据恢复第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院BEGIN TRANSACTION读帐户甲的余额BALANCE1;BALANCE1=BALANCE1-AMOUNT;(AMOUNT为转帐金额)IF(BALANCE10)THEN打印金额不足,不能转帐;ROLLBACK;(撤消该事务)ELSE写回BALANCE1;读帐户乙的余额BALANCE2;BALANCE2=BALANCE2+AMOUNT;写回BALANCE1;COMMIT;事务撤消事务撤消(UNDO)第十一讲第十一
26、讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院事务内部更多的故障是非预期的,是不能由应用程序处理的。系统就要强行回滚此事务,即撤消该事务已经作出的任何对数据库的修改,使得该事务好象根本没有启动一样。2系统范围内的故障撤消与重做(REDO)3介质故障4计算机病毒 数据恢复的基本原理十分简单,采用的主要技术手段是冗余(数据转储、登录日志文件)。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院2 2、转储和恢复转储和恢复1什么是转储和恢复 转储:是数据库恢复中采用的基本技术。所谓转储即DBA(数据库管理员)定期地将整个数据库复制
27、到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。恢复:当数据库遭到破坏后就可以利用后备副本把数据库恢复,这时,数据库只能恢复到转储时的状态,从那以后的所有更新事务必须重新运行才能恢复到故障时的状态。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院2 2转储的分类转储的分类 静态转储:指转储期间不允许(或不存在)对数据库进行任何存取、修改活动。动态转储:指转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。动态转储可克服静态转储的缺点,但是,转储结束时后援副本上的数据并不能保证正确有效。为此,必须把转储期间各事
28、务对数据库的修改活动登记下来,建立日志文件(log file)。这样,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院 海量转储:海量转储是指每次转储全部数据库。增量转储:增量转储则指每次只转储上次转储后更新过的数据。如果数据库很大,事务处理又十分频繁,则增量转储方式是很有效的。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院2 2 日志文件日志文件 日志文件日志文件:是用来记录对数据库每一次更新活动的文件。:是用来记录对数据库每一次更新活动的文件。在在
29、动动态态转转储储方方式式中中必必须须建建立立日日志志文文件件,后后援援副副本本和和日日志志文文件件综综合合起起来来才才能能有有效效地地恢恢复复数数据据库库。在在静静态态转转储储方方式式中中,也也可可以以建建立立日日志志文文件件,当当数数据据库库被被破破坏坏后后可可重重新新装装入入后后援援副副本本把把数数据据库库恢恢复复到到转转储储结结束束时时刻刻的的正正确确状状态态,然然后后利利用用日日志志文文件件,把把已已完完成成的的事事务务进进行行重重做做处处理理,对对故故障障发发生生时时尚尚未未完完成成的的事事务务进进行行撤撤消消处处理理。这这样样不不必必重重新新运运行行那那些些已已完完成成的的事事务务
30、程程序序就就可可把把数数据据库库恢恢复复到到故故障障前前某某一一时刻的正确状态。时刻的正确状态。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院 下下面面介介绍绍如如何何登登记记日日志志文文件件以以及及发发生生故故障障后后如如何何利利用用日日志志文件恢复事务。文件恢复事务。1 1登记日志文件(登记日志文件(logginglogging)事事务务在在运运行行过过程程中中,系系统统把把事事务务开开始始、事事务务结结束束(包包括括COMMITCOMMIT和和ROLLBACKROLLBACK)、以以及及对对数数据据库库的的插插入入、删删除除、修修改改等等每每一
31、一个个操操作作作作为为一一个个登登记记记记录录(loglog记记录录)存存放放到到日日志志文文件件中中。每每个个记记录录包包括括的的主主要要内内容容有有:执执行行操操作作的的事事务务标标识识,操操作作类类型型,更更新新前前数数据据的的旧旧值值(对对插插入入操操作作而而言言此此项项为为空空值值),更更新新后后的的新新值值(对对删除操作而言此项为空值)。删除操作而言此项为空值)。登登记记的的次次序序严严格格按按并并行行事事务务操操作作执执行行的的时时间间次次序序,同同时时遵遵循循“先写日志文件先写日志文件”的规则。的规则。第十一讲第十一讲SQLServer权限管理权限管理安徽新华电脑专修学院安徽新华电脑专修学院2 2用日志文件恢复事务用日志文件恢复事务 利用日志文件恢复事务的过程分为二步:利用日志文件恢复事务的过程分为二步:(1 1)从头扫描日志文件。)从头扫描日志文件。(2 2)对对尚尚未未结结束束的的事事务务进进行行撤撤消消(也也称称为为UNDOUNDO)处处理。理。对已经结束的事务进行重做(对已经结束的事务进行重做(REDOREDO)处理。处理。3 用转储和日志文件恢复数据库用转储和日志文件恢复数据库






