“假载”(hack-attach)受损的数据库

“假载”(hack-attach)受损的数据库


原文地址:
http://www.sqlskills.com/BLOGS/PAUL/post/Disaster-recovery-101-hack-attach-a-damaged-database.aspx

紧跟着我上面一篇博文,我想讲述一下在灾难恢复时如何重新附加一个因意外分离而受损的数据库。多年前,我曾写过一篇详细讲述它的博文 (博文译文 ),今天我想只作个简短的介绍。
造成数据库受损的原因有很多:
1)    可能有人对一个已经置疑的数据库错误地使用分离再附加的方法
2)    一个不能的坏了的服务器上的受损数据库,因灾难恢复而需要附加
3)    一个数据库没有能清爽地关闭(比如:还有活动的事务)并且日志文件又没了。
因上面任何一种情形而造成的受损数据库都不能用平常的方法附加到SQL SERVER上去:sp_attach_db,CREATE DATABASE...FOR ATTACH或者CREATE DATABASE...FOR ATTACH_REBUILD_LOG(后面两种只有SQL SERVER 2005及以后的版本才有)。数据文件受损时会阻止附加操作;日志文件受损时会阻止灾难恢复的开始或结束。

为了附加数据库,你需要“愚弄”一下SQL SERVER,让它以为数据库已经附加了。这需要下面的一系列步骤:
1.    创建一个“哑”数据库,这个数据库和原数据库有相同的名称、相同数量的数据文件和日志文件、相同的文件名及大致大小(译注:大小要求并不需要)。
2.    将新建的“哑”数据库脱机(ALTER DATABASE SET RealDatabaseName OFFLINE)或者关闭服务。
3.    删除“哑”数据库的所有数据文件和日志文件
4.    从受损数据数据库中拷贝数据文件和日志文件到“哑”数据库指定的位置
5.    将“哑”数据库联机(ALTER DATABASE SET RealDatabaseName ONLINE)或者如果你在步骤2中关闭服务的话,现在就启动服务。

此时SQL SERVER被骗以为已经能够附加了数据库(它以为刚刚启动的就是你创建的“哑”数据库)。现在你可以为恢复数据库而进行下一步措施了,这包括:
1.    备份尾日志,它将在恢复的最后阶段使用。(见博文
2.    使用紧急模式抽取数据到新的数据库中
3.    使用紧急模式来修复受损的日志文件  (案例一 )

注意:完全可能你的数据库损坏得太严重以至于置于紧急模式下也不能修复它。
如果你的数据库都不能置于紧急模式下(比如:数据库的启动页或主文件的首页受损),那么就没有办法让SQL SERVER来存取数据库了。此时,你只能使用备份文件来恢复了。如果你连备份文件都没有,那么你死定了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值