MS SQL SERVER 2005 MDF文件单独附加

MS SQL SERVER 2005 MDF文件单独附加

 

方法一
    从SQL SERVER 2005起,如果数据库不是干净关闭,为了维护一致性,在单独使用mdf进行附加时,SQL SERVER将报错且不能附加。
    通过观察,发现MS SQL SERVER将状态值记录在MDF文件第9页(0x12000)的第0x84字节处。只要将该4字节改为0x4000 0000,就可以让SQL SERVER认为是干净关闭了。这样就可以单独使用mdf附加了。但是,请注意:即使附加成功,数据可能存在不一致风险。
    为此,我写了一个小工具(链接见下),专门进行修改的。该工具已通过SQL SERVER 2005, 2008测试。

    工具下载:http://download.csdn.net/source/3407041


方法二
根据网友dlcy (http://topic.csdn.net/u/20110630/11/8016d44c-b7a3-42db-91d7-0263c5239bdf.html )的提示,可以先替换后修复。翻看以前翻译的一篇博文 ,曾经介绍过该方法(现在居然忘了,罪过罪过)。具体流程如下:
--1.创建一个和原数据库同名的数据库,要求文件名相同、文件个数相同。
create database test
on primary (name=f1, filename='d:/f1.mdf')
log on(name=l1, filename='d:/l1.ldf')

--2.将新生成的数据库置为脱机
alter database test set offline

--3.用旧的f1.mdf文件替换掉新生成数据库的f1.mdf文件

--4.将数据库置为在线
alter database test set online

--5.此时完数据库应该是不能访问的。
--将数据库置为紧急模式
alter database test set emergency

--6.将数据库置为单用户方式,下面的命令要求这样。
sp_dboption 'test', 'single user', true

--7.修复数据库
dbcc checkdb(test, REPAIR_ALLOW_DATA_LOSS )
--修复结束发现数据库已从紧急模式变成在线模式了。

--8.恢复数据库为多用户方式
sp_dboption 'test', 'single user', false

 

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值