您的位置: 首页 > 计算机技术 > 应用程序 > 走近数据恢复
彻底屏蔽3721/CNNIC/BAIDU插件 回到列表 windows installer出错信息解决
 走近数据恢复

作者:fk 时间: 2003-11-21 文档类型:转载 来自:蓝色理想

  我常常在想,如果数据库不用考虑数据恢复,对我们这些做数据库的人来说,日子也许将变过美好很多。

  没有一种软件会象数据库这样,需要面对如此恶劣的环境。你需要考虑各种可能的错误和故障,例如系统断电、磁盘损坏、甚至是地震火灾。而给你的目标非常明确:不论发生何种故障,数据都不能被丢失,你可能觉得这有些小题大做,可对于许多商业应用(如银行、火车订票系统等)来说,这只不过是最基本的要求。

  要保证每一步操作都不会丢失,既无必要,也无可能(除非你能发明一种和硬盘一样大,和内存一样快,同时断电时数据不丢失的东东)。因此同并发控制中一样,数据库同样也利用了事务的概念。事务是这样一组操作,这组操作要么都做,要么都不做(我们通常把这叫做事务的原子性)。而当你决定结束一个事务时,你可能会选择:是提交(COMMIT)这个事务,还是应该滚回(ROLLBACK)它。如果你选择提交,那么你在这个事务中所做的全部修改都会被存入数据库中,如果这个数据库系统足够强壮,它将保证:只要事务提交完成,不管今后发生何种故障,事务所做的修改都不会丢失。如果你选择滚回,那么系统将回到事务开始的状态,你在该事务中所做的所有修改都将丢失。如果在事务运行当中,系统发生了任何故障,你会期望它的结果应该和你滚回这个事务一样。

  恢复的本质是数据的冗余,在众多的冗余手段中,日志(log)也许是我们最常使用的技术(尽管我们还有许多其它的选择,如影子页面等)。在我们对数据库进行修改之前,系统会将数据修改前的影象(前项)和你要修改的数据影象(后项)保存在日志当中。在这个过程中,有两点需要保证。一是日志必须先于它对应的修改被写入数据库,我们把这叫做先写日志(WAL)协议,这很容易理解,想象一下,如果修改被先写入数据库,而系统在日志被写入之前崩溃了,那么它将无法把该事务恢复到开始的状态。二是在事务提交之前,必须将它的日志写入数据库。否则,系统无法保证后续的故障不会丢失该事务的修改。我们将不能实现我们在前面对用户所做出的承诺。

  我们继续上文的讨论,看看我们到底有哪些故障需要应付。

  首先是应用故障,例如用户不小心错删了一张表,或者应用破坏了完整性约束。这种故障的恢复非常简单,对于前者,你可以显式地滚回事务(利用日志的前项),如果你不小心提交了事务,那么问题就麻烦了,系统也许只能把它当作介质故障(利用备份)来恢复了;对于后者,系统会强迫把该事务滚回。只要数据库还在运行,在系统看来,事务的滚回与其它正常操作并没有什么区别。

  然后是进程故障,假如在系统运行时,一个client崩溃了,或者网络断了(通常服务器无法区别这两种状态);或者服务器端的某个进程死了。这时我们恐怕得为系统配置一个监视进程,由它来定期地检查系统状态,恢复或清除失败的进程(连接),同时把对应的事务滚回。我们会希望这个监视进程是所有进程的父进程,因此假设连它也死了,我们就能把这种情况归结到后面将要讨论的系统故障。

  接着是系统故障,假如系统因为内部错误(例如数据库或操作系统含有bug),或者发生断电。这时缓冲区里的数据全部丢失,但幸运地是磁盘上的数据还在。因此系统在重新启动(RESTART)后,首先重做所有事务的修改(利用日志的后项),这就让数据库回到了发生故障时的状态,这时再将所有在这一点上未提交的事务滚回就完事了。注意这一过程是自动完成的,你完全不需要去关心它。

  再接着是介质故障,假如磁盘出现了坏磁道,或者整个磁盘报销了。这时上面的数据肯定已经丢失了。由于介质故障只能在你试图再次存取磁盘时被发现,而这时故障可能早已发生。因此对介质故障的恢复需要你的参与才能完成。你必须定期地备份(BACKUP)数据库,这样,当介质故障发生时,你可以先用备份重新覆盖整个数据库(RESTORE过程),然后利用日志重做从备份那点到当前的数据库的更新(ROLL-FORWARD过程),接下来的事情就和系统故障完全一样了。你可能会问,那要是日志也坏了怎么办呢?没办法,鸡生蛋、蛋生鸡,总得有个头吧。所以你最好祈祷日志不要坏,为了保证这一点,你应该对日志文件进行镜象,或者干脆用RAID。

  除了这种恢复方式,我们还有一种叫做逻辑恢复的方式,也就是利用我们常常在用的IMPROT/EXPORT工具对数据进行备份/恢复。当然我们只把它看作是介质故障恢复的一种辅助形式(也许它更适合于恢复我们前面说的那种应用故障),因为你只能把数据恢复到你备份的那一点。

  最后是灾难,象发火灾、被人黑了什么的,这时整个系统可能被完全破坏。你当然仍然可以对数据库进行备份,然后把备份(磁盘)放到另一个安全的地方,但这样做,备份以后数据库所做的修改可能就永久丢失了。一个更为稳妥的办法是我们在远程建立一个备份系统,所有在本地产生的日志同时也送往这个远程系统,为了防止网络发生故障,本地与远程系统之间应该同时建立几条相互独立的网络连接。这听上去好象有点超前,可实际上许多关键应用早就用上了。

  应该明白的是,恢复毕竟是一种非常耗时的工作,特别是进行后三种故障的恢复时,数据库对用户不可用。而这对象银行这样的部门来说,损失实在太大了。因此在很多情况下,我们只把恢复看作是最后的一道防线,我们希望最好永远也别需要用到它。因此现在就出来了各种各样的容错设备,象RAID、双机系统什么的,它们会把故障发生的概率降低到一个实际上可能永不发生的程度。

出处:蓝色理想
责任编辑:风狗

相关文章 更多相关链接
动网论坛代码分析之嵌套查询
包含文件对数据库链接的影响
[ASP]向数据库读写image文件
FWMX系列:数据驱动图形向导
将数据库的内容生成WORD文档
作者文章
走近数据恢复
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
Windows7优化调整实用小技巧十则
关于国内Windows 7下载的一些提醒
Windows 7安全模式下修复系统故障
如何防止电脑被黑客入侵
syssafe病毒抗争记
浅谈手工杀毒
L2TP预共享密钥解决内网VPN连接问题
浅谈移动硬盘的数据安全问题
Windows组策略之软件限制策略
特殊文件防止闪存为电脑带来病毒

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2