第7章数据库保护.ppt
数据库原理与应用教程,人民邮电出版社,2,第7章 数据库保护,7.1 事务7.2 并发控制7.3 数据库备份与恢复,3,7.1 事务,7.1.1 事务的基本概念7.1.2 事务的特征7.1.3 事务处理模型,4,7.1.1 事务的基本概念,事务是用户定义的数据操作系列,这些操作作为一个完整的工作单元,一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。例如:对于一个转帐活动:A帐户转帐给B帐户n元钱,这个活动包含两个动作:第一个动作:A帐户 n 第二个动作:B帐户 n,5,7.1.2 事务的特征,原子性(Atomicity):指事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做。一致性(Consistency):指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。隔离性(Isolation):指数据库中一个事务的执行不能被其它事务干扰。持久性(Durability):也称为永久性。指事务一旦提交,其对数据库数据的改变就是永久的。,6,保证事务的ACID特性是事务处理的重要任务。事务的ACID特性可能遭到破坏的因素有:多个事务并行运行时,不同事务的操作有交叉情况;事务在运行过程中被强迫停止。,7,7.1.3 事务处理模型,隐式事务:隐式事务是每一条数据操作语句都自动地成为一个事务。显式事务:有显式的开始和结束标记的事务。ISO事务处理模型 T-SQL事务处理模型,8,ISO事务处理模型,明尾暗头:事务的开头是隐含的,事务的结束有明确标记 事务结束符COMMIT:事务成功结束符,ROLLBACK:事务失败结束符,事务起始/终止位置程序的首条SQL语句或事务结束符后的语句。在程序正常结束处或COMMIT语句处成功终止;在程序出错处或或ROLLBACK处失败终止。,9,示例,UPDATE 支付表 SET 帐户总额 帐户总额 nWHERE 帐户名 AUPDATE 支付表 SET 帐户总额 帐户总额 nWHERE 帐户名 BCOMMIT,10,T-SQL事务处理模型,每个事务都有显式的开始和结束标记。事务的开始标记是:BEGIN TRANSACTION|TRAN事务的结束标记为:COMMIT TRANSACTIONTRANROLLBACK TRANSACTIONTRAN,11,示例,BEGIN TRANSACTION UPDATE 支付表 SET 帐户总额=帐户总额-nWHERE 帐户名=AUPDATE 支付表 SET 帐户总额=帐户总额+nWHERE 帐户名=BCOMMIT,12,7.2 并发控制,7.2.1 并发控制概述 7.2.2 并发控制措施7.2.3 封锁协议7.2.4 活锁和死锁7.2.5 并发调度的可串行性 7.2.6 两段锁协议,13,7.2.1 并发控制概述,数据库中的数据是一个共享的资源,因此会有很多用户同时使用数据库中的数据,在多用户系统中,可能同时运行着多个事务,而事务的运行需要时间,并且事务中的操作是在一定的数据上进行的。当系统中同时有多个事务在运行时,特别是当这些事务是对同一段数据进行操作时,彼此之间就有可能产生相互干扰的情况。如:订票、银行,14,不同的多事务执行方式,串行执行每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行。问题:不能充分利用系统资源,发挥数据库共享资源的特点。,15,不同的多事务执行方式,交叉并行执行在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行。单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的空闲时间,提高系统的效率。,16,不同的多事务执行方式,同时并发方式多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。这里讨论单处理机环境下的并发控制技术。,17,并发事务的相互干扰示例,A、B两个订票点恰巧同时办理同一架航班的飞机订票业务。设其操作过程及顺序如下:A订票点(事务A)读出航班目前的机票余额数,假设为10张;B订票点(事务B)读出航班目前的机票余额数,也为为10张;A订票点订出6张机票,修改机票余额为10-6=4,并将4写回到数据库中;B订票点订出5张机票,修改机票余额为10-5=5,并将5写回到数据库中;,18,事务并发执行带来的问题,会产生多个事务同时存取同一数据的情况。可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性。并发控制是衡量DBMS性能的重要标志之一。,19,并发操作带来的数据不一致性,丢失修改读“脏”数据不可重复读产生“幽灵”数据,20,丢失修改,21,读“脏”数据,22,不可重复读,23,产生“幽灵”数据,属于不可重复读的范畴。指当事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中的部分记录,或者在其中添加了部分记录,则当T1再次按相同条件读取数据时,发现其中莫名其妙地少了(对删除)或多了(对插入)一些记录。这样的数据对T1来说就是“幽灵”数据或称“幻影”数据。,24,7.2.2 并发控制措施,控制目标:事务运行过程中尽可能隔离事务外操作对本事务数据环境的影响。并发控制的主要技术加锁(Locking)加锁就是事务T在对某个数据操作之前,先向系统发出请求,封锁其所要使用的数据。在事务T释放它的锁之前,其他事务不能操作这些数据。锁的类型:共享锁、排他锁,25,共享锁,简记为S锁:若事务T给数据对象A加了S锁,则事务T可以读A,但不能修改A,其他事务可以再给A加S锁,但不能加X锁,直到T释放了A上的S锁为止。对于读操作(检索),可以多个事务同时获得共享锁,但阻止其它事务对已获得共享锁的数据进行排它封锁。,26,排他锁,简记为X锁:若事务T给数据对象A加了X锁,则允许T读取和修改A,但不允许其他事务再给A加任何类型的锁和进行任何操作。一旦一个事务获得了对某一数据的排他锁,则任何其他事务均不能对该数据进行任何封锁,其他事务只能进入等待状态,直到第一个事务撤销了对该数据的封锁。,27,锁的相容矩阵,28,7.2.3 封锁协议,在运用X锁和S锁对数据对象进行加锁时,还需要约定一些规则,如何时申请X锁或S锁、持锁时间、何时释放锁等。称这些规则为封锁协议或加锁协议。对封锁方式规定不同的规则,就形成了各种不同级别的封锁协议。不同级别的封锁协议达到的系统一致性级别不同。,29,一级封锁协议,对事务T要修改的数据加X锁,直到事务结束(包括正常结束和非正常结束)时才释放。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的 但不能保证可重复读和不读“脏”数据。,30,一级封锁协议示例,没有丢失修改,31,二级封锁协议,一级封锁协议加上对事务T对要读取的数据加S锁,读完后即释放S锁。除了可以防止丢失修改外,还可以防止读“脏”数据。但不能保证可重复读数据。,32,二级封锁协议示例,没有读脏数据,33,三级封锁协议,一级封锁协议加上事务T对要读取的数据加S锁,并直到事务结束才释放。除了可以防止丢失修改和不读“脏”数据之外,还进一步防止了不可重复读。,34,三级封锁协议示例,可重复读,35,不同级别的封锁协议总结,36,7.2.4 活锁和死锁,并发控制的封锁方法可能会引起活锁和死锁等问题。活锁,37,避免活锁,简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,数据库管理系统按先请求先满足的事务排队策略,当数据对象上的锁被释放后,让事务队列中第一个事务获得锁。,38,死锁,两个事务相互等待对方先释放资源,则会造成死锁。,39,预防死锁的方法,一次封锁法:每个事务一次将所使用数据全部加锁。存在的问题降低系统并发度难于事先精确确定封锁对象顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序封锁。存在的问题维护成本:数据库系统中封锁的数据对象极多,并且在不断地变化。难以实现:很难事先确定每一个事务要封锁哪些对象。,40,死锁的诊断超时法,超时法。如果一个事务的等待时间超过了规定的时限,则认为发生了死锁。优点是实现起来比较简单,缺点是可能产生误判的情况:如果事务因某些原因造成等待时间比较长,超过了规定的等待时限,则系统会误认为发生了死锁。若时限设置的比较长,则不能对发生的死锁进行及时的处理。,41,死锁的诊断等待图法,是一个有向图G=(T,U)。T为结点的集合,每个结点表示正在运行的事务;U为边的集合,每条边表示事务等待的情况。若T1等待T2,则T1和T2之间划一条有向边,从T1指向T2,并发控制子系统周期性地(比如每隔几秒)生成事务的等待图,并进行检测。如果发现图中存在回路,则表示系统中出现了死锁。,42,死锁的解除,通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务所持有的全部锁,使其他事务可以继续运行下去。而且,对撤销事务所执行的数据修改操作必须加以恢复。,43,7.2.5 并发调度的可串行性,多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,则我们称这种调度为可串行化的调度。可串行性是并发事务正确性的准则,按这个准则,一个给定的并发调度,当且仅当它是可串行化的时,才认为是正确的调度。,44,可串行化调度,例:设有两个事务,分别包含下列操作:事务T1:读B;A=B+1;写回A事务T2:读A;B=A+1;写回B 设A、B的初值均为4,按T1 T2顺序执行,结果:A5,B6;按T2 T1顺序执行,结果:A6,B5。当并发调度时,如果执行的结果是这两者之一,则都是正确的结果。,45,策略1:串行调度,46,策略2:并行调度,不可串行化,可串行化,47,7.2.6 两段锁协议,将所有的事务分为两个阶段对数据进行加锁和解锁:在对任何数据进行读写操作之前,首先要获得对该数据的封锁。在释放一个封锁之后,事务不再申请和获得任何其他封锁。两段锁协议是实现可串行化调度的充分条件。,48,两段锁协议,可以将每个事务分成两个时期:申请封锁期和释放封锁期,申请期申请要进行的封锁,释放期释放所占有的封锁。在申请期不允许释放任何锁,在释放期不允许申请任何锁,这就是两段式封锁。,49,一些结论,事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议。,50,调度示例,遵守两段锁协议,不遵守两段锁协议,51,7.3 数据库备份与恢复,7.3.1 数据库故障的种类 7.3.2 数据库备份 7.3.3 数据库恢复,52,7.3.1 数据库故障的种类,事务内部的故障系统故障其他故障,53,1.事务内部的故障,有的是可以通过事务程序本身发现的(如转帐中的帐户余额不能小于0,若发现小于0,则可显式的回滚事务)。有的是不能由应用程序发现的(称为非预期的故障),如:运算溢出并发事务发生死锁而被选中撤销该事务违反了某些完整性限制等事务故障仅指这类非预期的故障,54,2.系统故障,系统故障是指造成系统停止运转、要重启的故障。例如,硬件错误(CPU故障)、操作系统故障、突然停电等都是系统故障。这样的故障会影响正在运行的所有事务,但不破坏数据库。可能会出现两种情况:一些未完成事务的结果可能已经送入物理数据库中,从而造成数据库可能处于不正确的状态;有些已经提交的事务可能有一部分结果还保留在缓冲区中,尚未写到物理数据库中,这样系统故障会丢失这些事务对数据的修改,也使数据库处于不一致状态。,55,3.其他故障,介质故障指外存故障,如磁盘损坏等。这类故障会对数据库造成破坏,并影响正在操作的数据库的所有事务。发生的可能性很小,但破坏性很大。计算机病毒的破坏性很大,而且极易传播,它也可能对数据库造成毁灭性的破坏。可能对数据库造成的影响:数据库本身被破坏;数据库本身没有被破坏,但数据可能不正确(由事务非正常终止引起),56,故障小结,各类故障,对数据库的影响有两种:一是数据库本身被破坏。二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。,57,7.3.2 数据库备份,数据的恢复涉及两个关键问题:第一,如何建立冗余数据;第二,如何利用这些冗余数据实施数据库恢复。数据备份是指定期或不定期地对数据库数据进行复制。备份的介质可以是磁带也可以是磁盘,但通常选用磁带。,58,备份的内容,表:包含系统表、用户定义的表。数据库用户(包括用户和用户操作权)。用户定义的数据库对象和数据库中的全部数据。数据库日志等内容。,59,备份频率,确定备份频率要考虑两个因素:存储介质出现故障或其他故障时,允许丢失的数据量的大小。数据库的事务类型(读多还是写多)以及事故发生的频率(经常发生还是不经常发生)。通常情况下,数据库可以每周备份一次,事务日志可以每日备份一次。对于一些重要的联机事务处理数据库,可以每日备份,事务日志则每隔数小时备份一次。,60,7.3.3 数据库恢复,恢复数据库是指将数据库从错误描述状态恢复到正确的描述状态(最近的正确时刻)的过程。,61,1恢复策略,(1)事务故障的恢复事务故障指事务在运行到正常结束前被终止事务故障的恢复是由系统自动完成的,对用户是透明的。恢复的过程为:反向扫描日志文件并执行相应操作的逆操作如日志中记录的是“删除”操作,则进行“插入”;若是修改操作,则用更新前的值替换更新后的值,62,1恢复策略(续),(2)系统故障的恢复系统故障的恢复是系统在重新启动时自动完成的,不需要用户干预。系统故障的恢复过程为:正向扫描日志文件,找出故障发生前已提交的事务,将其重做;同时找出故障发生时未完成的事务(已执行了BEGIN TRANSACTION语句,而没有执行相应的COMMIT或ROLLBACK语句),并撤销这些事务。,63,1恢复策略(续),(3)介质故障的恢复介质故障发生后,磁盘上的物理数据和日志文件均遭到破坏,这是最严重的一种故障,恢复的方法是:重装数据库,使数据库管理系统正常运行利用介质损坏前对数据库做的备份或利用镜像设备恢复数据库。,64,2恢复方法,利用数据库备份、事务日志备份可以将数据库从出错状态恢复到最近的正确状态。利用备份技术利用事务日志利用镜像技术,65,利用备份技术,由DBA定期对数据库进行备份,生成数据库瞬时正确状态的副本(备份)。当发生错误时,利用备份(文件)可以将数据库恢复到备份完成时的状态。,66,(2)利用事务日志,日志记录了对数据库数据的全部更新操作(插入、删除、修改),日志内容包括事务标识、操作类型、操作前后的数据值等。利用事务日志可以恢复执行不完整的事务,即从不完整的事务的当前值按事务日志记录的顺序反做(Undo),直到事务开始时的数据库值为止。利用事务日志的恢复一般是系统自动完成的。,67,(3)利用镜像技术,所谓镜像就是在不同的设备上同时存有两份数据库,把其中的一个设备称为主设备,把另一个称为镜像设备。主设备与镜像设备互为镜像关系。每当主数据库更新时,DMBS自动把更新后的数据复制到另一个镜像设备上,保证主设备上的数据库与镜像设备上的数据库一致。数据库镜像功能可用于有效地恢复磁盘介质的故障。,68,数据库镜像技术,镜像技术也可用于数据的并发操作,当一个用户给数据加排他锁修改数据时,其他用户可读镜像数据库上的数据,而不必等待释放锁。一般情况下,主数据库主要用于修改,镜像数据库主要用于查询。,