网站大量收购闲置独家精品文档,联系QQ:2885784924

第十章 数据库保护.ppt

  1. 1、本文档共85页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十章 数据库保护

10.3.3 故障类型和恢复方法 一. 事务故障 某个事务在运行过程中由于种种原因未运行至正常终点(COMMIT或显示ROLLBACK)就夭折了。 常见原因: 输入数据有误; 运算溢出; 违反了某些完整性限制; 某些应用程序出错; 并行事务发生死锁等。 10.3.3 故障类型和恢复方法 例如: 银行转账事务,这个事务把一笔金额从一个账户甲转给另一个账户乙。 BEGIN TRANSACTION 读账户甲的余额BALANCE; BALANCE=BALANCE-AMOUNT;(AMOUNT 为转账金额) 写回BALANCE; IF(BALANCE 0 ) THEN { 打印金额不足,不能转账; ROLLBACK;(撤销刚才的修改,恢复事务) } ELSE { 读账户乙的余额BALANCE1; BALANCE1=BALANCE1+AMOUNT; 写回BALANCE1; COMMIT; } 10.3.3 故障类型和恢复方法 事务内部故障有的是可以通过事务程序本身发现的,但有些是非预期的,则不能由事务程序处理。 发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘。 事务故障的恢复:撤消事务(UNDO) 在不影响其他事务运行情况下,强行回滚该事务,清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样。 事务故障的恢复由系统自动完成,不需要用户干预。 10.3.3 故障类型和恢复方法 二. 系统故障(软故障) 造成系统停止运转的任何事件,使得系统要重新启动。内存中数据库缓冲区的信息将全部丢失,而外部存储设备上的数据不受影响,所有运行事务非正常终止。 常见原因: 特定类型的硬件错误(CPU故障); 操作系统故障; DBMS代码错误; 突然停电等。 10.3.3 故障类型和恢复方法 系统故障的恢复: 清除尚未完成的事务对数据库的所有修改: 系统重新启动时,让所有非正常终止的事务回滚,强行撤消(UNDO)所有未完成事务; 将缓冲区中已完成事务提交的结果写入数据库: 系统重新启动时,恢复程序需要重做(REDO)所有已提交的事务,将数据库恢复到一致状态。 10.3.3 故障类型和恢复方法 恢复步骤: 1. 正向扫描日志文件(从前向后) Redo队列: 在故障发生前已经提交的事务 Undo队列: 在故障发生时尚未完成的事务 2. 对Undo队列事务进行UNDO处理 反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,将更新前的值入库。 3. 对Redo队列事务进行REDO处理 正向扫描日志文件,对每个REDO事务重新执行登记的操作,将更新后的值入库。 10.3.3 故障类型和恢复方法 三. 介质故障(硬故障--破坏性最大) 指外存故障,使存储在外存中的数据部分丢失或全部丢失,并影响正在存取这部分数据的所有事务。 常见原因: 磁盘损坏; 磁头碰撞; 瞬时强磁干扰等。 (1)重新转储后备副本到新的磁盘,使数据库恢复到最近一次转储时的一致状态。 (2)在日志中找出转储以后所有已提交的事务。 (3)对已提交的事务进行REDO处理,将数据库恢复到故障前某一时刻的一致状态。 利用数据库备份恢复 利用日志备份恢复 备份即时点 某事务即时点 故障即时点 10.3.3 故障类型和恢复方法 恢复步骤: 注:介质故障的恢复需要DBA介入 10.4 SQL Server数据库备份与恢复 --要备份的数据库名-右击“任务”--单击“备份”,如图: 完整备份 包含数据库中全部数据和日志文件信息,也称为是全库备份或者海量备份。 优点:恢复操作简便,只需要将最近一次的备份恢复。 缺点:完全备份所占的存储空间很大且备份的时间较长。 总:SQL Server将备份过程中发生的任何活动,以及把任何未提交的事务备份到事务日志。恢复备份时,利用备份文件中捕捉到的部分事务日志来确保数据一致性。 10.4.1 数据库备份方法 BACKUP DATABASE database_name TO { DISK | TAPE } = physical_backup_device_name 例1:在某一个时间点,对数据库Sample做一个完全备份,备份到文件D:\backup\Sample_full.bak: BACKUP DATAB

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档