




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2024/9/6
1系统篇----数据库保护第9章事务管理2024/9/6
2主要内容事务概述并发控制数据库恢复技术2024/9/6
3事务的概念事务定义事务是由一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单位。例如银行转帐。SQL中事务的定义事务以Begintransaction开始,以Commit或Rollback结束Commit表示提交,事务正常结束Rollback表示事务非正常结束,撤消事务已做的操作,回滚到事务开始时状态2024/9/6
4银行转帐:事务T从A帐户过户50¥到B帐户
T: read(A); A:=A–50; write(A); read(B); B:=B+50; write(B);read(X):从数据库传送数据项X到事务的工作区中write(X):从事务的工作区中将数据项X写回数据库事务示例2024/9/6
5事务示例银行转帐示例:假设银行有一笔转帐业务,需要将帐户1的$1000转入帐户2中。数据库应用程序至少需要执行以下几步完成此转帐功能(帐户关系Accounts,有属性acctNo和balance,分别表示帐户号和该帐户的余额。):读帐户1的资金余额,判断余额(balance)是否大于等于$1000;UpdateaccountsSetbalance=balance-1000 WhereacctNo=acct1;UpdateaccountsSetbalance=babalance+1000 WhereacctNo=acct2;2024/9/6
6原子性(Atomicity)事务中包含的所有操作要么全做,要么全不做。原子性由恢复机制实现。一致性(Consistency)事务的隔离执行必须保证数据库的一致性。事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态。数据库的一致性状态由用户来负责,由并发控制机制实现。如银行转帐,转帐前后两个帐户金额之和应保持不变。事务特性(ACID)2024/9/6
7隔离性(Isolation)系统必须保证事务不受其它并发执行事务的影响。对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行。隔离性通过并发控制机制实现。持久性(Durability)一个事务一旦提交之后,它对数据库的影响必须是永久的系统发生故障不能改变事务的持久性持久性通过恢复机制实现事务特性(ACID)(续)2024/9/6
8事务的状态活动状态失败状态部分提交状态提交状态中止状态初始状态事务无法继续正常执行事务回滚,数据库恢复到事务开始前状态最后一条语句被执行后成功完成,永久写入数据库2024/9/6
9事务调度事务的调度事务的执行顺序称为一个调度,表示事务的指令在系统中执行的时间顺序一组事务的调度必须保证包含了所有事务的操作指令一个事务中指令的顺序必须保持不变串行调度在串行调度中,属于同一事务的指令紧挨在一起对于有n个事务的事务组,可以有n!个有效调度并行调度在并行调度中,来自不同事务的指令可以交叉执行当并行调度等价于某个串行调度时,则称它是正确的2024/9/6
10并行Vs串行基本比较并行事务会破坏数据库的一致性串行事务效率低并行的优点一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量系统中存在着周期不等的各种事务,串行会导致难于预测的时延。如果各个事务所涉及的是数据库的不同部分,采用并发会减少平均响应时间核心问题 在保证一致性的前提下最大限度地提高并发度2024/9/6
11事务执行示例T1read(A);A:=A
50;write(A);read(B);B:=B+50;write(B);T2read(A);temp:=A
0.1A:=A
temp;write(A);read(B);B:=B+temp;write(B);从A过户50¥到B从A过户存款的10%到B开始状态:A=1000¥B=2000¥A+B=3000¥2024/9/6
12
read(A);A:=A
50;write(A);read(B);B:=B+50;write(B);
read(A);temp:=A
0.1A:=A
temp;
write(A);read(B);B:=B+temp;write(B);T1T2A=950¥B=2050¥结束状态:A=855¥B=2145¥A+B=3000¥串行调度12024/9/6
13
read(A);A:=A
50;write(A);read(B);B:=B+50;write(B);
read(A);temp:=A
0.1A:=A
temp;write(A);read(B);B:=B+temp;write(B);T1T2A=900¥B=2100¥结束状态:A=850¥B=2150¥A+B=3000¥串行调度22024/9/6
14
read(A);A:=A
50;write(A);
read(B);B:=B+temp;write(B);T1T2A=950¥B=2000¥结束状态:A=855¥B=2145¥A+B=3000¥
read(B);B:=B+50;write(B);
read(A);temp:=A
0.1A:=A
temp;
write(A);A=855¥B=2000¥A=855¥B=2050¥并行调度32024/9/6
15并发调度事务中可能出现的问题丢失更新读脏数据不可重复读2024/9/6
16丢失更新定义两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改丢失示例2024/9/6
17
read(A);A:=A
50;
B:=B+temp;write(B);T1T2A=1000¥B=2000¥结束状态:A=950¥B=2100¥A+B=3050¥
write(A);read(B);B:=B+50;write(B);
read(A);temp:=A
0.1A:=A
temp;
write(A);
read(B);
A=900¥B=2000¥A=950¥B=2000¥A=950¥B=2050¥并行调度42024/9/6
18读脏数据定义事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据与数据库中数据不一致,则T2读到的数据就是脏数据示例2024/9/6
19read(A);A1:=A;read(B);B1:=B;A1+B1=2950;read(B);B:=B+50;write(B);T1T2A=1000¥B=2000¥read(A);A:=A
50;write(A);并行调度52024/9/6
20不能重复读定义事务T1读取某一数据后,事务T2对其做了修改,当T1再次读取该数据时,得到与前次不同的值示例2024/9/6
21
read(A);A1:=AT1T2A=1000¥B=2000¥read(A);A:=A
50;write(A);read(B);B:=B+50;write(B);read(B);B1:=BA1+B1=3050A=950¥B=2050¥并行调度62024/9/6
22并发调度的可串行性可串行化的调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。正确调度:一个给定的并发调度,当且仅当它是可串行化的。并行调度的可串行化2024/9/6
23
T1T2T1T2SlockBSlockAY=B=2X=A=2UnlockBUnlockAXlockAXlockBA=Y+1B=X+1写回A(=3)写回B(=3)UnlockAUnlockBSlockASlockBX=A=3Y=B=3UnlockAUnlockBXlockBXlockAB=X+1A=Y+1
写回B(=4)写回
A(=4)UnlockBUnlock
(a)串行调度(b)串行调度
并行事务的不同调度2024/9/6
24
T1T2T1T2SlockBSlockBY=B=2Y=B=2SlockAUnlockBX=A=2XlockAUnlockBSlockAUnlockAA=Y+1等待
XlockA写回A(=3)等待
A=Y+1UnlockA等待写回A(=3)X=A=3XlockBUnlockAB=X+1XlockB
写回B(=3)B=X+1UnlockA写回B(=4)
UnlockBUnlockB
(c)不可串行化的调度(d)可串行化的调度
并行事务的不同调度(续)2024/9/6
25并行调度的可串行化(续)指令的顺序 考虑一个调度S中的两条连续指令(仅限于read与write操作)Ii与Ij,分别属于事务Ti与Tj ①Ii=read(Q),Ij=read(Q); ②Ii=read(Q),Ij=write(Q); ③Ii=write(Q),Ij=read(Q); ④Ii=write(Q),Ij=write(Q);
在①情况下,Ii与Ij的次序无关紧要。其余情况下,Ii与Ij的次序不同,其执行结果也不同,数据库最终状态也不同2024/9/6
26并行调度的可串行化(续)冲突指令当两条指令是不同事务在相同数据项上的操作,并且其中至少有一个是write指令时,则称这两条指令是冲突的如在②、③、④情况下,Ii与Ij是冲突的非冲突指令交换次序不会影响调度的最终结果冲突等价如果调度S可以经过一系列非冲突指令交换转换成调度S‘,则称调度S与S’是冲突等价的冲突可串行化当一个调度S与一个串行调度冲突等价时,则称该调度是冲突可串行化的如并行调度3是冲突可串行化的2024/9/6
27示例示例read(A);write(A);read(B);write(B);T1T2read(B);
write(B);read(A);write(A);read(A);write(A);read(B);write(B);T1T2write(B);read(A);write(A);read(B);read(A);write(A);read(B);write(B);write(B);read(A);write(A);read(B);交换1交换2交换3read(A);write(A);read(B);write(B);read(B);write(B);read(A);write(A);并行调度3串行化2024/9/6
28封锁机制所谓并发控制就是要用正确的方式调度并发操作,避免造成数据的不一致性,使一个用户事务的执行不受其他事务的干扰。另一方面,对数据库的应用有时允许某些不一致性,例如,有些统计工作涉及数据量很大,读到一些脏数据对统计精度没什么影响,这时可以降低对一致性的要求以减少系统开销并发控制的主要方法是采用封锁机制。2024/9/6
29封锁事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。排它锁(写锁,X锁)共享锁(读锁,S锁)封锁机制(续)2024/9/6
30
T2T1XS—XNNYSNYY—YYY
Y=Yes,相容的请求;N=No,不相容的请求
封锁类型的相容矩阵2024/9/6
31封锁协议对数据对象加锁时,还需要约定一些规则,称这些规则为封锁协议。一级封锁协议事务T在修改数据之前必须先对其加X锁,直到事务结束才释放。二级封锁协议一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。三级封锁协议一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。封锁机制(续)2024/9/6
32活锁和死锁活锁某一事务的请求可能永远得不到,该事务一直处于等待状态解决方法:先来先服务策略死锁两个事务处于相互等待状态,永远不能结束死锁的预防一次封锁法——降低了并发度顺序封锁法死锁的诊断与解除超时法,等待图法封锁机制(续)2024/9/6
33
T1T2T1T2T1T2(1)读A=16(1)读A=50(1)读C=100
读B=100CC×2
求和C=150写回C(2)读A=16(2)(2)读B=100读C=BB×2
ROLLBACK200
写回BC恢复为100(3)A
A-1
写回A=15(3)读A=50(4)A
A-1读B=200
写回A=15和=250(验算不对)(a)丢失修改(b)不能重复读(c)读脏数据2024/9/6
34
T1T2T1T2T1T2(1)获得(1)SLA(1)获得XLC
XLASLB读C=200(2)读A=16读A,BCC×2
请求求和=150请求写回C=200XLA(2)XLB(2)请求等待等待SLC(3)A
A-1等待等待等待写回A=15等待(3)读A,B等待(3)ROLLBACK
等待
Commit等待求和=150
等待(C恢复为100)
等待
UnlockX等待commit等待UlockC等待(4)获得UlockA等待(4)获得
XLAUlockB等待SLC
读A=15(4)XlockB读c=100(5)A
A-1读B=100(5)Commit
写回A=14BB×2UnlockCCommit写回B=200
UnlockX(a)没有丢失修改(b)可重复读(c)不再读“脏”数据2024/9/6
35两段锁协议作用:保证可串行性指所有事务必须分两个阶段对数据项加锁和解锁。若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。两段锁的含义:事务分为两个阶段第一个阶段获得封锁,也称扩展阶段第二阶段是释放阶段,也称收缩阶段定理:若所有事务均遵守两段锁协议,则这些事务的所有并行调度都是可串行化的。两段锁协议是可串行化调度的充分条件而不是必要条件。示例:
XLA…XLB…SLC…UnlockB…ULA…ULC;Y XLA…ULA…XLB…SLC…ULC…ULB;N2024/9/6
36T1T2
①SLOCKY读Y=20②XLOCKX④UNLOCKY⑤读X=10X=X+Y写回X=30⑥UNLOCKX③SLOCKX等待等待等待等待等待⑦获得SLOCKX读X=10⑧XLOCKY⑨UNLOCKX读Y=20Y=X+Y写回Y=30⑩UNLOCKY遵守两段锁协议的并行调度2024/9/6
37课内练习设有三个事务T1、T2、T3,它们执行的操作分别是:T1:A+100T2:A*2T3:A/2假设这三个事务进行并发操作,试讨论它们可能实施的调度。假设A的初始值为100,各调度的最后结果是什么。2024/9/6
38设事务T1、T2的并发操作如图(a)、(b)所示,两个并发操作中分别存在什么问题?T1T1T1T2①读A=100B=50A+B=150②
③读A=200B=50A+B=250
(验证错误)读A=100A=A*2写回A=200①读B=100
②③B=B+50
写回B=150读B=100B=B*2写回B=2002024/9/6
39假设有零件100个,T1事务领走50个,T2事务领走20个,其执行时间如图所示,应该如何实现这两个事务的并发控制?T1T2①读零件数目
③取走50②读零件数目④取走202024/9/6
40事务和事务日志一个事务包括一个或许多个操作的集合,可以是:插入、修改、删除等命令或更复杂的操作。事务的特性:原子性:一个事务中的操作是不可分割的,要么全部执行成功,要么全部不执行。一致性:事务执行的前后,数据库中的数据都处于一致性状态。独立性:事务直接不能互相干扰。永久性:事务一旦执行成功,则对数据库的影响是永久的。2024/9/6
41事务和事务日志(续)如果提交了一个事务,SQLServer就会在事务日志中记录所有有关该事务的信息。为一个事务记录的数据总量取决于以下几个方面:更改的数据量受影响的索引量作为事务的结果,必须分配或释放的页的数量2024/9/6
42事务日志条目开始条目记录数据修改进行数据修改提交事务将日志页转存于磁盘2024/9/6
43事务日志条目示例操作:更新一条记录,日志文件将增加:一个数据删除记录,包括原有行中所有数据一个数据插入记录,包括修改后行中所有数据一个受该事务影响的每个索引的索引删除记录一个受该事务影响的每个索引的索引插入记录一个用于每个新数据或索引页的页分配记录,和一个用于每个释放数据或索引页的页释放记录2024/9/6
44SQL中的事务BeginTransaction
………….
………..If……….RollbackElseCommit2024/9/6
45数据库恢复概述计算机系统中不可避免:硬件的故障软件的错误操作员的失误恶意的破坏故障:造成运行事务非正常中断,影响数据库中数据的正确性;重则破坏数据库,使数据库中全部或部分数据丢失数据库管理系统(恢复子系统):把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的恢复。2024/9/6
46故障的种类事务内部的故障预期的可通过事务程序本身发现示例非预期的不能由应用程序处理的,如运算溢出、并行事务发生死锁而被选中撤销该事务等系统故障(软故障,SoftCrash)指造成系统停止运转的任何事件,使得统要重新启动中央处理器故障、操作系统故障、突然停电介质故障(硬故障,HardCrash)外存故障,如磁盘的磁头碰撞,瞬时的强磁场干扰计算机病毒2024/9/6
47总结,对数据库的影响可能性数据库本身被破坏数据库没有破坏,但数据可能不正确,因为事务的运行被中止所造成恢复的基本原理:冗余数据库中任何一部分的数据,可以根据存储在系统别处的冗余数据来重建恢复的最常用方法:转储和登记日志文件故障的种类(续)2024/9/6
48恢复的基本原理恢复的基本原理十分简单。可以用一个词来概括:冗余。即数据库中任何一部分被破坏的或不正确的数据可以根据存储在系统别处的冗余数据来重建。恢复机制涉及的两个关键问题是: 第一,如何建立冗余数据; 第二,如何利用这些冗余数据实施数据库恢复。建立冗余数据最常用的技术是数据转储和登记日志文件。通常在一个数据库系统中,这两种方法是一起使用的。2024/9/6
49数据转储后备副本或后援副本转储周期静态转储和动态转储海量转储和增量转储登记日志文件日志文件的格式和内容记录为单位和数据块为单位日志文件的作用登记日志文件:“先写日志文件”的原则恢复的实现技术2024/9/6
50转储DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程后备副本或后援副本:备用的数据文本静态转储转储期间不允许(或不存在)对数据库进行任何存取、修改活动动态转储转储期间允许对数据库进行存取或修改即转储和用户事务可以并发执行海量转储每次转储全部数据库增量转储每次只转储上次转储后更新过的数据数据转储2024/9/6
51静态转储简单降低数据库的可用性动态转储转储结束时后援副本上的数据并不能保证正确有效示例:在转储期间的某时刻T1系统把数据A=100转储到了磁带上,而在时刻T2,某一事务对A进行了修改使A=200。转储结束,后援副本上的A已是过时的数据了。为此,必须把转储间各事务对数据库的修改活动登记下来,建立日志文件(logfile)。这样,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。数据转储(续)2024/9/6
52日志文件用来记录对数据库每一次更新活动的文件登记日志文件登记记录主要包括:执行操作的事务标识、操作类型、更新前数据的旧值(对插入操作而言此项为空值)、更新后的新值(对删除操作而言此项为空值)登记次序严格按并行事务操作执行的时间次序,同时遵循“先写日志文件”的规则。登记日志文件2024/9/6
53事务恢复利用日志文件恢复事务的过程分为二步:从头扫描日志文件,找出哪些事务在故障发生时已经结束(这些事务有BEGINTRANSACTION和COMMIT记录),哪些事务尚未结束(这些事务有BEGINTRANSACTION记录,无COMMIT记录)。对尚未结束的事务进行撤销(也称UNDO)处理,对已经结束的事务进行重做(REDO)处理。UNDO处理的方法:反向扫描日志文件,对每个UNDO事务的更新操作执行反操作。REDO处理的方法:正向扫描日志文件,重新执行登记的操作。利用转储和日志文件可以有效的恢复数据库。恢复的实现技术(续)2024/9/6
54正常运行
转储
运行事务故障发生点TaTbTf重装后备副本重新运行事务
恢复转储和恢复2024/9/6
55正常运行
静态转储
运行事务故障发生点TaTbTf
登记日志文件重装后备副本利用日志文件恢复事务介质故障恢复
继续运行
登记日志文件利用日志文件恢复2024/9/6
56恢复策略事务故障的恢复发生后由系统自动完成系统故障的恢复重启系统,由系统自动完成介质故障的恢复由DBA重装数据库具有检查点的恢复技术数据库镜像恢复策略2024/9/6
57BEGINTRANSACTION
读账户甲的余额BALANCE;
BALANCE=BALANCE-AMOUNT;(Amount为转账金额)
IF(BALANCE<0)THEN {打印‘金额不足,不能转帐’;
ROLLBACK;(撤销刚才的修改,恢复事务)} ELSE {读账户乙的余额BALANCE1;
BALANCE1=BALANCE1+AMOUNT; 写回BALANCE1;
COMMIT;}事务内部的故障2024/9/6
58事务内部的故障事务内部更多的故障是非预期的,是不能由应用程序处理的。这类非预期的故障称为事务故障。如:运算溢出;并发事务发生死锁而被选中撤消该事务、违反了某些完整性限制等。事务故障意味着:事务没有达到预期的终点(COMMIT或者显式的ROLLBACK);数据库可能处于不正确状态。2024/9/6
59事务撤消(UNDO)恢复程序要在不影响其它事务运行的情况下:强行回滚(ROLLBACK)该事务,即撤消该事务已经作出的任何对数据库的修改,使得该事务好象根本没有启动一样。这类恢复操作称为事务撤消(UNDO)。2024/9/6
60事务故障的恢复事务故障的恢复是由系统自动完成的,对用户是透明的。系统的恢复步骤是:1.反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。2.对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据库。3.继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。4.如此处理下去,直至读到此事务的开始标记。
2024/9/6
61系统故障系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。例如特定类型的硬件错误(CPU故障);操作系统故障;DBMS代码错误突然停电等等。为保证数据一致性,恢复子系统必须在系统重新启动时:让所有非正常终止的事务回滚,强行撤消(UNDO)所有未完成事务;重做(REDO)所有已提交的事务,以将数据库真正恢复到一致状态。2024/9/6
62系统故障的恢复系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中铝环保节能科技(湖南)有限公司内部招聘8人笔试参考题库附带答案详解
- 2025企业级安全培训考试试题附完整答案(名校卷)
- 2024-2025新员工入职安全培训考试试题附完整答案(易错题)
- 2025年生产经营单位安全培训考试试题答案典型题
- 2025婚礼摄影服务合同范本
- 2025机动车交易合同范本
- 2025标准农村住宅交易合同样本
- 2025年基础设施建设项目设备贷款合同样本
- 2025租房合同书范本如何制定
- 2025中文采购合同模板参考
- 2023年山东省专升本考试高等数学Ⅲ试题和答案
- 抗血栓药物临床应用与案例分析课件
- 吉林省地方教材家乡小学二年级下册家乡教案
- 决策树在饲料技术推广中的应用研究
- 儿童长期卧床的护理
- 投标书细节美化教程
- 《小儿支气管肺炎》课件
- (完整版)年产30万吨甲醇工艺设计毕业设计
- 对辊式破碎机设计
- 财产险水灾现场勘查及理赔定损标准
- 中国思想史(全)
评论
0/150
提交评论