数据库"置疑"了应该是文件损坏了,例如你把数据库分离后,用记事本打开他会看到很多乱码,强行改动里边的那些乱码,保存后附加数据库,由于里边格式乱了,数据库就"置疑"了。
你首先要进入“单用户模式”,让你可以重新 *** 作数据库,然后用SELECT 命令可以看出什么表出错了(上帝保佑你只是某个表出错了),如果只是某个表出错,而又只是数据错误,不是结构错误,还可以通过运行带WHERE子句的SQL看看数据是到哪里出错,把,错误点以后的数据都删除掉,那至少数据库还可以用。
如果你的数据不是真的都那么要紧的话,用还原功能是最方便可行的办法。当然备份档之后的数据是没有了。
没戏,bak文件是原有数据库的备份文件,所以只能以还原的方式把这个文件还原,只有通过附加的方式才可以抛掉日志文件的。
所以你只能老老实实的把备份文件还原了,占用空间很大,然后使用分离数据库把数据文件和日志文件分离,然后日志文件就可以删除了。
这样就可以通过附加的方式只附加数据文件,日志文件自动生成一个就很小了。
但是,无论怎么做,你首先还是要完完整整的还原才行。
由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。
如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息
设备激活错误。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_LogLDF' 可能有误。
已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_logLDF' 的新日志文件。
但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息
服务器: 消息 1813,级别 16,状态 2,行 1
未能打开新数据库 'test'。CREATE DATABASE 将终止。
设备激活错误。物理文件名 'd:\test_logLDF' 可能有误。
怎么办呢?别着急,下面我们举例说明恢复办法。
/
--A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。
--B.停掉数据库服务器。
--C.将刚才生成的数据库的日志文件test_logldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_datamdf。
--D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何 *** 作。
--E.设置数据库允许直接 *** 作系统表。此 *** 作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右--键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
--F.设置test为紧急修复模式
--在查询管理器里设置如下命令:
update sysdatabases set status=-32768 where dbid=DB_ID('test')
--此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
--G.下面执行真正的恢复 *** 作,重建数据库日志文件
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_logldf')
/
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1
未能排它地锁定数据库以执行该 *** 作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。
正确执行完成的提示应该类似于:
警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
/
--H.验证数据库一致性(可省略)
dbcc checkdb('test')
/一般执行结果如下:
CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。/
--I.设置数据库为正常状态
sp_dboption 'test','dbo use only','false'
--如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。
--J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接 *** 作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成
sp_configure 'allow updates',0
go
reconfigure with override
go
应该是使用BACKUP备份出的文件吧,这样:
在企业管理器中还原:
1、右击要还原的目标数据库,如果没有,可以新建一个
2、点击所有任务,还原数据库。
3、在常规页面中点击从设备,选择设备,添加。
4、定位到备份原文件。然后确定,再次确定。
5、此时返回到了常规页,再点击选项页标签。
6、给“在选定数据库上强制还原”打勾。
7、确定一下移至物理文件名,要求数据库文件和日志文件改成与目标数据库目标文件夹和文件名一致。
8、确定。等待即可完成。
注意:如果目标数据库有打开的连接,包括应用程序及查询分析器等,必须要断开连接。
以上就是关于如何恢复和修复MS SQLSERVER数据库的MDF文件全部的内容,包括:如何恢复和修复MS SQLSERVER数据库的MDF文件、sql server 2000只有bak备份文件,因为LDF太大,想只还原MDF,要怎样做呢、.mdf文件覆盖了能恢复么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)