1、1事务管理事务管理2事务管理 l问题的引入问题的引入 l 事务事务l 并发控制并发控制 l数据库恢复数据库恢复3问题的引入l多用户同时操作数据库多用户同时操作数据库l系统在执行用户的请求时出现故障系统在执行用户的请求时出现故障例如:帐户例如:帐户A转帐给帐户转帐给帐户B10000元。元。UPDATE YHZH SET 余额余额=余额余额-10000 WHERE 帐号帐号= AUPDATE YHZH SET 余额余额=余额余额+10000 WHERE 帐号帐号= B4 事务的基本概念事务的基本概念l事务(事务(Transaction)l用户定义的一个对数据库读写用户定义的一个对数据库读写操作序列
2、操作序列l一个一个不可分割不可分割的工作单位的工作单位l在关系数据库中,事务可以是一条、一组在关系数据库中,事务可以是一条、一组SQL语语句,或整个程序。句,或整个程序。l事务和程序的区别?事务和程序的区别?l程序包含多个事务程序包含多个事务5 事务的性质事务的性质l原子性原子性(Atomicity)l事务中的操作要么都做,要么都不做 ( (All or None)All or None)l一致性一致性(Consistency)l事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态l与原子性密切相关l隔离性隔离性(Isolation)l并发执行的各事务不能相互干扰l持续性持续性/永久
3、性永久性(Durability)l事务一旦提交,它对数据库的更新不再受后继操作或故障的影响 DBMS中事务处理必须保证其中事务处理必须保证其ACID特性,这样才能保证数据库中数特性,这样才能保证数据库中数据的安全和正确。据的安全和正确。6银行转帐:从帐号银行转帐:从帐号A中取出一万元,存入帐号中取出一万元,存入帐号B。l定义一个事务,该事务包括两个操作定义一个事务,该事务包括两个操作l这两个操作要么全做,要么全不做这两个操作要么全做,要么全不做l全做或者全不做,数据库都处于一致性状态。全做或者全不做,数据库都处于一致性状态。l如果只做一个操作,数据库就处于不一致性状态如果只做一个操作,数据库就
4、处于不一致性状态。 B=B+1 A=A-1BA 事务的性质事务的性质7T1的修改被的修改被T2覆盖了!覆盖了! 读读A=16 AA-3写回写回A=13 读读A=16 AA-1 写回写回A=15 T2T1 事务的性质事务的性质8 事务的基本概念事务的基本概念l事务的开始和结束可以由用户显式控制。事务的开始和结束可以由用户显式控制。lSQL定义事务的语句定义事务的语句lBegin transactionBegin transaction( (事务开始事务开始) )lCommit transaction Commit transaction ( (事务提交,正常结束,将更新结事务提交,正常结束,将更
5、新结果写入磁盘果写入磁盘) )lRollback transactionRollback transaction( (事务回滚,撤销事务中所有已完事务回滚,撤销事务中所有已完成的更新成的更新) )lSave transactionSave transaction(保存点,可以只撤消部分事务)保存点,可以只撤消部分事务)9 事务的基本概念事务的基本概念l显式定义方式显式定义方式 BEGIN TRANSACTION BEGIN TRANSACTION SQL 语句语句1 SQL 语句语句1 SQL 语句语句2 SQL 语句语句2 。 。 COMMIT ROLLBACK10COMMIT事务正常结束事
6、务正常结束 提交提交事务的所有操作(事务的所有操作(读读+更新更新)事务中所有对数据库的更新事务中所有对数据库的更新永久永久生效生效ROLLBACK事务异常终止事务异常终止l事务运行的过程中发生了故障,不能继续执行,回滚事事务运行的过程中发生了故障,不能继续执行,回滚事务的所有务的所有更新更新操作操作l事务回滚到事务回滚到开始开始时的状态时的状态 事务的基本概念事务的基本概念11事务的基本概念事务的基本概念l隐含事务与自动提交隐含事务与自动提交 ALTER INSERT CREATE DELETE DROP SELECT UPDATE TRUNCATE TABEL12例:删除仓库例:删除仓库“
7、WH1”,并将职工并将职工T表当中所有在表当中所有在“WH1”仓库中职工记录删除。仓库中职工记录删除。事务案例事务案例BEGIN TRANSACTION MYDELDELETE FROM 仓库仓库TWHERE 仓库号仓库号=WH1DELETE FROM 职工职工TWHERE 仓库号仓库号=WH1IF ERROR0ROLLBACK TRANSACTION MYDELELSECOMMIT TRANSACTION MYDEL13l恢复机制与并发控制机制的提出恢复机制与并发控制机制的提出l事务在运行过程中因某种故障被强行终止,数据库一致性被破坏,需进行恢复。l多个事务并行运行时,不同事务的各种操作交叉
8、进行,为保证各事务的执行互不干扰,需进行并发控制。l事务是恢复和并发控制的基本单位事务是恢复和并发控制的基本单位 事务的基本概念事务的基本概念14l干扰问题干扰问题 l解决干扰解决干扰封锁封锁 l封锁不当封锁不当死锁死锁 l封锁与隔离级别封锁与隔离级别 并发控制15干扰问题l丢失更新问题丢失更新问题l未提交依赖未提交依赖(读读“脏脏”数据数据)问题问题l不一致分析问题不一致分析问题l幻象读问题幻象读问题16丢失更新问题l例:例:l旅客旅客A A来到来到A A售票处,要买一张售票处,要买一张1515日北京到上海的日北京到上海的1313次直次直达快速列车的软卧车票,售票员达快速列车的软卧车票,售票
9、员A A(下称用户下称用户A A)在终端在终端A A查看剩余票信息;查看剩余票信息; l几乎在同时,旅客几乎在同时,旅客B B来到来到B B售票处,也要买一张售票处,也要买一张1515日北京日北京到上海的到上海的1313次直达快速列车的软卧车票,售票员次直达快速列车的软卧车票,售票员B B(下下称用户称用户B B)从终端从终端B B查到了同样的剩余票信息;查到了同样的剩余票信息; l旅客旅客A A买了一张买了一张1515日日1313次次7 7车厢车厢5 5号下铺的软卧票,用户号下铺的软卧票,用户A A更新剩余票信息并将它存入数据库;更新剩余票信息并将它存入数据库; l这时用户这时用户B B不知
10、道用户不知道用户A A已经将已经将1515日日1313次次7 7车厢车厢5 5号下铺的号下铺的软卧票卖出,使旅客软卧票卖出,使旅客B B也买了一张也买了一张1515日日1313次次7 7车厢车厢5 5号下号下铺的软卧票,用户铺的软卧票,用户B B更新剩余票信息并将它存入数据库更新剩余票信息并将它存入数据库(重复了用户(重复了用户A A已经做过的更新)。已经做过的更新)。 总的效果:总的效果:1515日日1313次次7 7车厢车厢5 5号下铺的软卧票号下铺的软卧票卖了两次。其原因是:允许了用户卖了两次。其原因是:允许了用户B B在过时的在过时的信息基础上去更新数据库,而没有迫使他去信息基础上去更
11、新数据库,而没有迫使他去看最新的信息。看最新的信息。 17丢失更新问题 用用SQL术语描述丢失更新问题术语描述丢失更新问题18未提交依赖问题 l未提交依赖问题也称为未提交依赖问题也称为读读“脏脏”(Dirty Read)数据问题,查询一个已数据问题,查询一个已经被其他事务更新、但经被其他事务更新、但尚未提交的元组,将会尚未提交的元组,将会引起未提交依赖问题。引起未提交依赖问题。 19不一致分析问题不一致分析问题 l不一致分析问题也称为不一致分析问题也称为不可重复读问题,很多不可重复读问题,很多应用可能需要校验功能,应用可能需要校验功能,这时往往需要连续两次这时往往需要连续两次或多次读数据进行校
12、验或多次读数据进行校验和分析,结果由于其他和分析,结果由于其他事务的干扰,使得前后事务的干扰,使得前后结果不一致,从而产生结果不一致,从而产生校验错误(即不一致的校验错误(即不一致的分析)。分析)。 20幻象读问题幻象读问题 l幻象读问题与不一致分析问题有关,当事务幻象读问题与不一致分析问题有关,当事务A读数据时,事务读数据时,事务B在对同一个关系进行插入或在对同一个关系进行插入或删除操作,这时事务删除操作,这时事务A再读同一条件的元组时,再读同一条件的元组时,会发现神秘地多出了一些元组或丢失了一些元会发现神秘地多出了一些元组或丢失了一些元组,把这种现象称作幻象读。组,把这种现象称作幻象读。
13、21可串行性l各单个事务如能将数据库从一个正确状态转变各单个事务如能将数据库从一个正确状态转变为另一个正确状态,则认为该事务是正确的;为另一个正确状态,则认为该事务是正确的;l按任何一个串行顺序依次执行多个事务是正确按任何一个串行顺序依次执行多个事务是正确的。的。l事物交叉过程是正确的,当且仅当其与串行执事物交叉过程是正确的,当且仅当其与串行执行过程等价,则事务是可串行化的。行过程等价,则事务是可串行化的。22可串行性例子:两个事务:初值:例子:两个事务:初值:A=10,B=10。T1:SELECT A UPDATE A=A-5 SELECT B UPDATE B=B+5T2:SELECT B
14、 UPDATE B=B-523可串行性T1: SELECT A UPDATE A=A-5 SELECT B UPDATE B=B+5 T2: SELECT B UPDATE B=B-524可串行性T1: SELECT A UPDATE A=A-5 SELECT B UPDATE B=B+5 T2: SELECT B UPDATE B=B-525可串行性T1:SELECT AUPDATE A=A-5SELECT BUPDATE B=B+5T2:SELECT BUPDATE B=B-526可串行性T1:SELECT AUPDATE A=A-5SELECT BUPDATE B=B+5T2:SELEC
15、T BUPDATE B=B-5不可串行化不可串行化27封锁 l封锁的基本技术封锁的基本技术 l封锁机制封锁机制 lSQL Server中与封锁有关的命令中与封锁有关的命令 l封锁粒度封锁粒度 l意向锁意向锁 28封锁的基本技术封锁的基本技术l当需要查询或更新数据时,先对数据进行封锁,以避免来当需要查询或更新数据时,先对数据进行封锁,以避免来自其他事务的干扰。针对不同的干扰问题可以有不同的自其他事务的干扰。针对不同的干扰问题可以有不同的封锁机制。封锁机制。 l以丢失更新问题为例,实施封锁的基本思想是:当一个用以丢失更新问题为例,实施封锁的基本思想是:当一个用户对一个表或记录进行更新时,封锁该表或
16、记录,使其他户对一个表或记录进行更新时,封锁该表或记录,使其他用户不能在同一时刻更新相同的表或记录,迫使其他用用户不能在同一时刻更新相同的表或记录,迫使其他用户在更新后的基础上(而不是在更新前的基础上)再实施户在更新后的基础上(而不是在更新前的基础上)再实施另外的更新操作。另外的更新操作。 29封锁的基本技术封锁的基本技术实施封锁以后的事件进程实施封锁以后的事件进程30封锁机制封锁机制 l共享封锁共享封锁 l独占封锁独占封锁 l更新封锁更新封锁 有些封锁在执行完相应操作后就自动释放封锁,有些有些封锁在执行完相应操作后就自动释放封锁,有些封锁则保持到事务结束(提交或撤消)时才释放(无论如封锁则保
17、持到事务结束(提交或撤消)时才释放(无论如何,所有的封锁都会在事务结束时自动释放)。何,所有的封锁都会在事务结束时自动释放)。 31共享封锁共享封锁 l共享封锁是为读操作设置的一种封锁,所以也共享封锁是为读操作设置的一种封锁,所以也称作读封锁,或简称称作读封锁,或简称S锁,目的是想读到一组不锁,目的是想读到一组不变的数据,也就是在读数据的过程中,不允许变的数据,也就是在读数据的过程中,不允许其他用户对该数据进行任何修改操作。这种封其他用户对该数据进行任何修改操作。这种封锁可以保证最大的并发性,任何数量的用户都锁可以保证最大的并发性,任何数量的用户都可以同时对同样的数据施加这种共享锁。已经可以同
18、时对同样的数据施加这种共享锁。已经实施共享锁的表拒绝来自其他事务的独占封锁实施共享锁的表拒绝来自其他事务的独占封锁和更新封锁。和更新封锁。 32独占封锁独占封锁 l独占封锁也叫排他封锁,它是为修改操作设置独占封锁也叫排他封锁,它是为修改操作设置的一种封锁,也称为写封锁,或简称为的一种封锁,也称为写封锁,或简称为X锁,这锁,这是最严格的一类封锁。当需要对表实施插入、是最严格的一类封锁。当需要对表实施插入、删除或修改操作时,应该使用独占封锁。已经删除或修改操作时,应该使用独占封锁。已经实施独占封锁的表,拒绝来自其他用户的任何实施独占封锁的表,拒绝来自其他用户的任何封锁。封锁。33更新封锁更新封锁
19、l当需要对一个记录或一组记录进行更新时(只当需要对一个记录或一组记录进行更新时(只是修改,不包括插入和删除)使用更新封锁,是修改,不包括插入和删除)使用更新封锁,该封锁的目的是防止其他用户在同一时刻修改该封锁的目的是防止其他用户在同一时刻修改同一记录。已经实施更新封锁的记录,拒绝来同一记录。已经实施更新封锁的记录,拒绝来自其他用户的任何封锁。自其他用户的任何封锁。34SQL Server中与封锁有关的命令中与封锁有关的命令 lSQL Server的封锁操作是在相关语句的的封锁操作是在相关语句的“WITH ()”子句中完成的,该短子句中完成的,该短语可以在语可以在SELECT、INSERT、UP
20、DATE和和DELETE等语句中指定表级锁定的方式和范围。等语句中指定表级锁定的方式和范围。35SQL Server中与封锁有关的命令中与封锁有关的命令l常用的封锁关键词有:常用的封锁关键词有:lTABLOCKTABLOCK:对表施行共享封锁,在读完数据后立刻释放对表施行共享封锁,在读完数据后立刻释放封锁,此类封锁可以避免读封锁,此类封锁可以避免读“脏脏”数据,但不具有可数据,但不具有可重复读的特性。重复读的特性。 lHOLDLOCKHOLDLOCK:与与TABLOCKTABLOCK一起使用,可将共享锁保留到事一起使用,可将共享锁保留到事务完成,而不是在读完数据后立即释放锁,这样可以务完成,而
21、不是在读完数据后立即释放锁,这样可以保证数据的可重复独特性。保证数据的可重复独特性。 36SQL Server中与封锁有关的命令中与封锁有关的命令lNOLOCKNOLOCK:不进行封锁,此关键词仅应用于不进行封锁,此关键词仅应用于SELECTSELECT语句,语句,这样可能会读取未提交事务的数据,即有可能发生这样可能会读取未提交事务的数据,即有可能发生“脏脏”读。读。 lTABLOCKXTABLOCKX:对表实施独占封锁。对表实施独占封锁。 lUPDLOCKUPDLOCK:对表中的指定元组实施更新封锁;这时其他对表中的指定元组实施更新封锁;这时其他事务可以对同一表中的其他元组也实施更新封锁,但
22、是事务可以对同一表中的其他元组也实施更新封锁,但是不允许对表实施共享封锁和独占封锁。不允许对表实施共享封锁和独占封锁。 37SQL Server中与封锁有关的命令中与封锁有关的命令R(日期日期,车次车次,座别座别,座位号座位号,状态状态) 状态初值为:状态初值为:NULLDECLARE d datetime, t char(6), s char(2), n char(10)BEGIN TRANSACTIONSELECT n=座位号座位号 FROM R WITH (UPDLOCK)WHERE 日期日期 = d AND 车次车次 = t AND 座别座别 = s AND 状态状态 IS NULLI
23、F UPDATE R SET 状态状态 = Y WHERE 座位号座位号 = n AND 日期日期 = d AND 车次车次 = t AND 座别座别 = sCOMMIT TRANSACTIONELSEROLLBACK TRANSACTION38封锁粒度封锁粒度 l封锁的对象可以是表、也可以是元组等,我们把封锁的对象可以是表、也可以是元组等,我们把封锁对象的大小称为封锁粒度(封锁对象的大小称为封锁粒度(Granularity)。)。l封锁的对象可以是逻辑单元(如表和元组等),封锁的对象可以是逻辑单元(如表和元组等),也可以是物理单元(如数据页和数据块等)。也可以是物理单元(如数据页和数据块等)
24、。l数据库管理系统一般都具有多粒度锁定功能,允数据库管理系统一般都具有多粒度锁定功能,允许一个事务锁定不同类型的资源。许一个事务锁定不同类型的资源。 39封锁粒度封锁粒度l锁定在较小的粒度(例如行)可以增加并发操作的性能,锁定在较小的粒度(例如行)可以增加并发操作的性能,但系统开销也较大。这是因为如果封锁的粒度小,则意但系统开销也较大。这是因为如果封锁的粒度小,则意味着需要的锁多,从而需要系统控制更多的锁。味着需要的锁多,从而需要系统控制更多的锁。 l锁定在较大的粒度(例如表)会降低操作的并发性,这锁定在较大的粒度(例如表)会降低操作的并发性,这是因为锁定整个表限制了其他事务对表中任意部分进行
25、是因为锁定整个表限制了其他事务对表中任意部分进行访问。封锁粒度大,则不需要太多的封锁,由于需要维访问。封锁粒度大,则不需要太多的封锁,由于需要维护的锁较少,所以系统开销较低。护的锁较少,所以系统开销较低。 40意向锁意向锁 l为了降低封锁的成本,提高并发的性能,数据库为了降低封锁的成本,提高并发的性能,数据库管理系统还支持一种意向锁(管理系统还支持一种意向锁(Intention Lock)。)。 l意向锁表示一种封锁意向,当需要在某些底层资意向锁表示一种封锁意向,当需要在某些底层资源上(如元组)获取封锁时,可以先对高层资源源上(如元组)获取封锁时,可以先对高层资源(如表)实施意向锁。(如表)实
26、施意向锁。41死锁死锁 l产生死锁的原因产生死锁的原因 l避免死锁避免死锁 l发现死锁发现死锁l解决死锁解决死锁 42产生死锁的原因产生死锁的原因l右图示意了两个并发右图示意了两个并发事务所发生事件的序事务所发生事件的序列,两个程序都为了列,两个程序都为了等待对方释放数据资等待对方释放数据资源而产生死锁。源而产生死锁。 43避免死锁避免死锁 l相同顺序法相同顺序法 l所有的用户程序约定都按相同的顺序来封锁表所有的用户程序约定都按相同的顺序来封锁表 l一次封锁法一次封锁法 l为了完成一个事务,一次性封锁所需要的全部为了完成一个事务,一次性封锁所需要的全部表表 44避免死锁的封锁避免死锁的封锁 4
27、5发现死锁发现死锁l超时法超时法 l即一个事务在等待的时间超过了规定的时限即一个事务在等待的时间超过了规定的时限后就认为发生了死锁。后就认为发生了死锁。 l这种方法非常不可靠,如果设置的等待时限这种方法非常不可靠,如果设置的等待时限长,则不能及时发现死锁;如果设置的等待长,则不能及时发现死锁;如果设置的等待时限短,则可能会将没有发生死锁的事务误时限短,则可能会将没有发生死锁的事务误判为死锁。判为死锁。 46发现死锁发现死锁l等待图法等待图法 l即通过有向图判定事务是否是即通过有向图判定事务是否是可串行化的,如果是则说明没可串行化的,如果是则说明没有发生死锁,否则说明发生了有发生死锁,否则说明发
28、生了死锁。死锁。l具体思路是:用节点来表示正具体思路是:用节点来表示正在运行的事务,用有向边来表在运行的事务,用有向边来表示事务之间的等待关系,如右示事务之间的等待关系,如右图所示,如果有向图中发现回图所示,如果有向图中发现回路,则说明发生了死锁。路,则说明发生了死锁。 47解决死锁解决死锁l发现死锁后解决死锁的一般发现死锁后解决死锁的一般策略是:自动使策略是:自动使“年轻年轻”的的事务(即完成工作量少的事事务(即完成工作量少的事务)先退回去,然后让务)先退回去,然后让“年年老老”的事务(即完成工作量的事务(即完成工作量多的事务)先执行,等多的事务)先执行,等“年年老老”的事务完成并释放封锁的
29、事务完成并释放封锁后,后,“年轻年轻”的事务再重新的事务再重新执行。执行。 48隔离级别l在避免干扰的情况下,适当的降低隔离级别,在避免干扰的情况下,适当的降低隔离级别,从而提高并发的操作效率。从而提高并发的操作效率。l隔离级别越低,并发操作效率越高,但是产生隔离级别越低,并发操作效率越高,但是产生干扰的可能性也越大。干扰的可能性也越大。l隔离级别越高,并发操作效率越低,同时产生隔离级别越高,并发操作效率越低,同时产生干扰的可能性也越小。干扰的可能性也越小。l在设计应用时,可以在所能容忍的干扰程度范在设计应用时,可以在所能容忍的干扰程度范围内,尽可能降低隔离级别,提高应用的执行围内,尽可能降低
30、隔离级别,提高应用的执行效率。效率。49隔离级别l未提交读(未提交读(READ UNCOMMITTED):最低级):最低级别,仅可保证不读取物理损坏的数据,隔离级别,仅可保证不读取物理损坏的数据,隔离级别最低。别最低。l提交读(提交读(READ COMMITTED):):SQL Server 默认级别,可以保证不读取默认级别,可以保证不读取“脏脏”数据数据l可重复读(可重复读(REPEATABLE READ):可以保证):可以保证读一致性,避免不一致分析问题。读一致性,避免不一致分析问题。l可串行化(可串行化(SERIALIZABLE):事务隔离的最):事务隔离的最高级别,事务之间完全隔离。高
31、级别,事务之间完全隔离。SQL支持支持4种隔离级别:种隔离级别:50隔离级别SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE设置隔离级别的命令设置隔离级别的命令51数据库恢复数据库恢复l数据库恢复概述数据库恢复概述l备份备份l恢复与还原恢复与还原52数据库恢复概述数据库恢复概述l故障是不可避免的故障是不可避免的l计算机硬件故障计算机硬件故障l系统软件和应用软件的错误系统软件和应用软件的错误l操作员的失误操作员的失误l恶意的破坏恶意的破坏l故障的影响故障的影响l
32、运行事务非正常中断运行事务非正常中断l破坏数据库破坏数据库53l数据库管理系统对故障的对策数据库管理系统对故障的对策lDBMS提供恢复子系统提供恢复子系统l保证故障发生后,能把数据库中的数据从错误状态保证故障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态恢复到某种逻辑一致的状态l保证事务保证事务ACIDl恢复技术是衡量系统优劣的重要指标恢复技术是衡量系统优劣的重要指标数据库恢复概述数据库恢复概述54故障类型故障类型l事务故障事务故障l系统故障系统故障l磁盘介质故障磁盘介质故障55事务故障l什么是事务故障什么是事务故障l某个事务在运行过程中由于种种原因未运行至正常某个事务在运行过程
33、中由于种种原因未运行至正常终止点就夭折了终止点就夭折了l事务故障的常见原因事务故障的常见原因l输入数据有误输入数据有误l运算溢出运算溢出l违反了某些完整性限制违反了某些完整性限制l某些应用程序出错某些应用程序出错l并行事务发生死锁并行事务发生死锁l。56事务故障的恢复事务故障的恢复l发生事务故障时,夭折的事务可能已把对数据发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘库的部分修改写回磁盘l事务故障的恢复:撤消该事务事务故障的恢复:撤消该事务l清除该事务对数据库的所有修改,使得这个事清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样务象根本没有启动过一样57系统故障系统
34、故障l什么是系统故障什么是系统故障l整个系统的正常运行突然被破坏整个系统的正常运行突然被破坏l所有正在运行的事务都非正常终止所有正在运行的事务都非正常终止l内存中数据库缓冲区的信息全部丢失内存中数据库缓冲区的信息全部丢失l外部存储设备上的数据未受影响外部存储设备上的数据未受影响58系统故障的恢复系统故障的恢复l 清除尚未完成的事务对数据库的所有修改清除尚未完成的事务对数据库的所有修改l系统重新启动时,恢复程序要强行撤消所有系统重新启动时,恢复程序要强行撤消所有未完成事务未完成事务l将缓冲区中已完成事务提交的结果写入数据库将缓冲区中已完成事务提交的结果写入数据库l系统重新启动时,恢复程序需要重做
35、所有已系统重新启动时,恢复程序需要重做所有已提交的事务提交的事务59介质故障介质故障l硬件故障使存储在外存中的数据部分丢失或全硬件故障使存储在外存中的数据部分丢失或全部丢失部丢失l介质故障比前两类故障的可能性小得多,但破介质故障比前两类故障的可能性小得多,但破坏性大得多坏性大得多60介质故障的恢复介质故障的恢复l装入数据库发生介质故障前某个时刻的数据副装入数据库发生介质故障前某个时刻的数据副本本l重做自此时始的所有成功事务,将这些事务已重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库提交的结果重新记入数据库61备份类型备份类型l双机热备份双机热备份l双工备份双工备份l磁盘镜像磁
36、盘镜像l冗余磁盘阵列冗余磁盘阵列l数据库备份技术数据库备份技术62日志日志l对备份的补充,记录所有对数据库的更新操作。对备份的补充,记录所有对数据库的更新操作。注意:应该将日志和主数据库安排在不同的存储设备上。注意:应该将日志和主数据库安排在不同的存储设备上。63恢复类型恢复类型l简单恢复简单恢复 允许将数据库恢复到最新的备份。允许将数据库恢复到最新的备份。l完全恢复完全恢复 允许将数据库恢复到故障点状态。允许将数据库恢复到故障点状态。ALTER DATABASE 仓库管理仓库管理 SET RECOVERY FULL ALTER DATABASE 仓库管理仓库管理 SET RECOVERY S
37、IMPLE64备份的类型备份的类型l全备份全备份l增量备份增量备份l事务日志备份事务日志备份l文件和文件组备份文件和文件组备份65全备份全备份l完整地备份整个数据库,同时也备份与该数据完整地备份整个数据库,同时也备份与该数据库相关的事务处理日志。库相关的事务处理日志。BACKUP DATABASE database_nameTO DISK |TAPE=physical_backup_device_name例:将例:将“仓库管理仓库管理”数据库完全备份到数据库完全备份到H盘根目录盘根目录下。下。BACKUP DATABASE 仓库管理仓库管理TO DISK =H:CKGL.BAK66增量备份增量
38、备份l只备份自上次数据库备份后发生更改的数据。只备份自上次数据库备份后发生更改的数据。BACKUP DATABASE database_nameTO DISK |TAPE=physical_backup_device_nameWITH DIFFERENTIAL例:将例:将“仓库管理仓库管理”数据库增量备份到数据库增量备份到H盘根目录下。盘根目录下。BACKUP DATABASE 仓库管理仓库管理TO DISK =H:CKGL1.BAKWITH DIFFERENTIAL67注:注: 增量备份一定是在全备份的基础上进行的,在一次全增量备份一定是在全备份的基础上进行的,在一次全备份后可以连续进行增量
39、备份。备份后可以连续进行增量备份。 增量备份会增加备份管理的难度。增量备份会增加备份管理的难度。增量备份增量备份68事务日志备份事务日志备份l事务日志备份序列提供了连续的事务信息链,可支事务日志备份序列提供了连续的事务信息链,可支持从全备份,增量备份或文件备份进行快速恢复。持从全备份,增量备份或文件备份进行快速恢复。BACKUP LOG database_nameTO DISK |TAPE=physical_backup_device_name例:将例:将“仓库管理仓库管理”数据库的事务日志备份到数据库的事务日志备份到H盘盘根目录下。根目录下。BACKUP LOG 仓库管理仓库管理TO DIS
40、K =H:CKGLLOG.BAK注:简单恢复模型不允许备份事务日志。注:简单恢复模型不允许备份事务日志。69文件和文件组备份文件和文件组备份l可以备份和恢复数据库中的个别文件。可以备份和恢复数据库中的个别文件。l文件备份和恢复操作必须与事务日志备份一起文件备份和恢复操作必须与事务日志备份一起使用。因此,文件备份不适用于简单恢复模型。使用。因此,文件备份不适用于简单恢复模型。l必须在创建文件备份之后才能创建事务日志备必须在创建文件备份之后才能创建事务日志备份。份。70文件和文件组备份文件和文件组备份BACKUP DATABASE database_nameFILE=logic_file_list
41、|FILEGROUP=filegroup_listTO DISK |TAPE=physical_backup_device_name例:将例:将“仓库管理仓库管理”数据库中的数据库中的“仓库管理仓库管理_DATA”文件备份到文件备份到H盘根目录下。盘根目录下。BACKUP DATABASE 仓库管理仓库管理FILE=仓库管理仓库管理_DATATO DISK =H:CKGLDATA.BAK71恢复或还原恢复或还原l恢复整个数据库恢复整个数据库l恢复数据库的部分内容恢复数据库的部分内容l恢复特定的文件或文件组恢复特定的文件或文件组l恢复事务恢复事务72根据数据库全备份进行恢复根据数据库全备份进行恢
42、复RESTORE DATEBASE database_nameFROMDISK |TAPE=physical_backup_device_nameWITH , NORECOVERY | RECOVERY , REPLACE注注:如果在数据库恢复之后即使用数据库如果在数据库恢复之后即使用数据库,应该选择应该选择RECOVERY;如果在数据库恢复之后还有后续的如果在数据库恢复之后还有后续的RESTORE操作,则应改为指定操作,则应改为指定NORECOVERY。73根据增量备份进行恢复根据增量备份进行恢复l已经使用已经使用RESTORE DATEBASE 命令完成了全备份的命令完成了全备份的恢复,同
43、时指定了恢复,同时指定了NORECOVERY;l在进行增量恢复时根据需要指定在进行增量恢复时根据需要指定RECOVERY或或NORECOVERY字句;字句;l如果有多个增量备份,则一定要按照备份的先后顺序进如果有多个增量备份,则一定要按照备份的先后顺序进行恢复。行恢复。74根据事务日志进行恢复根据事务日志进行恢复l在恢复事务日志备份之前需要首先恢复数据库在恢复事务日志备份之前需要首先恢复数据库全备份或增量数据库备份;全备份或增量数据库备份;l如果有多个日志备份,则按先后顺序进行恢复。如果有多个日志备份,则按先后顺序进行恢复。注意:注意:75根据事务日志进行恢复根据事务日志进行恢复RESTORE
44、 LOG database_nameFROMDISK |TAPE=physical_backup_device_nameWITH , NORECOVERY | RECOVERY , STOPAT=date_time | , STOPATMARK=mark_nameAFTER datetime | , STOPBEFOREMARK= mark_nameAFTER datetime 76根据文件或文件组进行恢复根据文件或文件组进行恢复RESTORE DATEBASE database_nameFILE=logic_file_list|FILEGROUP=filegroup_listFROMDISK |TAPE=physical_backup_device_name