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