SQL只有MDF文件的恢复--SQL无日志LDF文件的恢复
SQL Server是一个关系数据库管理系统,在进行SQL Server数据库操作的过程中难免会出现误删或者别的原因引起的日志损坏,由于SQL Server数据库中数据的重要性,出现了以上的故障之后就必须对数据库中数据进行恢复。
速达软件SQL数据库中的两个备份文件mdf和ldf文件,因误删或者别的原因引起的ldf日志文件被清除,现在只有一个mdf数据文件,怎么样才能恢复原来的帐套数据呢?下面就为大家介绍一种不打开速达服务器,即绕过速达软件,通过后台数据库修复,来恢复无日志LDF文件的方法。
运软件行环境:
SQL SERVER 2000 SP4
准备:备份原速达帐套的mdf数据文件(假设原帐套名为:SD001),SD31502_SD0001.mdf
1、停止SQL SERVER 服务管理器,把数据库的数据文件SD31502_SD0001.mdf移走。
2、打开速达软件,新建一个跟原来帐套名称SD001同名的帐套SD0001,停掉SQL服务,用原帐套数据mdf文件(SD31502_SD0001.mdf)覆盖新建的帐套mdf文件,删除新建帐套的ldf文件(SD31502_SD0001_log.ldf)。
3、启动SQL数据库 --- 企业管理器,打开新建的SD0001速达数据库,可以看到数据库SD31502_SD0001为灰色的“置疑” 状态,现在不进行任何操作。
图1
开始:SQL Server无日志恢复数据库
1、将SQL数据库设置为“允许对系统目录直接进行修改”,右键(local)(windows NT)--- 属性 --- 服务器设置,选中“允许对系统目录直接进行修改”;图2
或,运行以下语句,允许对系统目录直接进行修改。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
执行结果:
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
已将配置选项 'allow updates' 从 0 改为 1。请运行 RECONFIGURE 语句以安装。
2、运行以下语句,设置置疑数据库为紧急模式:
update sysdatabases set status = -32768 where name = 'SD31502_SD0001'
go
执行结果:
(所影响的行数为 1 行)
图5
3、运行以下语句,把应用数据库设置为Single User单项用户模式(可省略);
sp_dboption 'SD31502_SD0001', 'single user', 'true'
执行结果:
4、运行以下语句,重新建立LOG (置疑数据库_log.ldf) 文件
dbcc rebuild_log('SD31502_SD0001','C: \Program Files\SuperData\速达V5\Data\SD31502_SD0001_log.ldf')
或
dbcc rebuild_log('SD31502_SD0001','C:\Program Files\Microsoft SQL Server\MSSQL\Data\SD31502_SD0001_log.ldf')
建议LDF保存速达数据Data文件夹,'C: \Program Files\SuperData\速达V5\Data。图7
如果遇到下列提示信息:服务器: 消息 50xx,级别 16,状态 1,行 1 未能排它地锁定数据库以执行该操作。
说明您的其他程序正在使用该数据库,如果刚才您正在使用SQL Server Enterprise Manager打开数据库的系统表,那么退出SQL Server Enterprise Manager就可以了。
执行结果::
警告: 数据库 '置疑数据库' 的日志已重建。已失去事务的一致性。应运行DBCC CHECKDB 以验证物理一致性。DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库了。 图8
如不执行第4步,则第3、第7步则不可省略,但执行完第9步后数据库能打开,数据库还处于紧急模式,打开速达软件会提示处于“未能在数据库 'SD31502_SD0001'中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式”。有些数据可能会不显示,如执行DTS导出,部份表可能不能导出,即使能导出表,部份表也会提示出错。图9
5、验证数据库一致性(可省略) :
dbcc checkdb('SD31502_SD0001')
执行结果:
6、设置数据库为正常状态 :
sp_dboption 'SD31502_SD0001','dbo use only','false'
执行结果:
数据库的状态“只供DBO使用”,恢复为正常状态
7、运行以下语句,关闭Single User单用户模式(可省略):
sp_dboption 'SD31502_SD0001', 'single user', 'false'
图12
8、将步骤4中设置的“允许对系统目录直接修改”进行关闭,你可以在SQL Server Enterprise Manager(SQL企业管理器)里面恢复,也可以执行以下语句,在DBCC 完成关闭。
use master
go
sp_configure 'allow updates',0
go
reconfigure with override
go
执行结果:
已将配置选项 'allow updates' 从 1 改为 0。请运行 RECONFIGURE 语句以安装。
图13
9、你修改了'NESTED TRIGGERS'的值,需要运行RECONFIGURE语句来使这个修改生效。
运行以下语句,使这个修改生效
RECONFIGURE
图14
最后、重启电脑,打开速达软件,就可以看到原帐套数据啦。衡量数据恢复成功与否的标准:第一:能不能进行速达帐套的修复操作,第二:能不能进行速达帐套的备份操作,同时附合上述两个标准,说明数据恢复成功。网上提供的数据恢复服务无非是恢复原数据库,再用DTS导入原数据库表数据而已。
提醒各位,请用DTS导入导出数据,不然你的数据库结构或多或少,会有点问题。如要恢复原帐套,用DTS数据导入时注意选择“扩展属性”。但SQL数据库不熟悉的,请千万不要碰。
致远会再写篇博文,首先介绍如何发现MDF文件中的错误,并在SQL表中定位错误位置;然后介绍如何利用SQ数据库“表”,修复已损坏的“速达帐套MDF文件”,并用DTS导入导出进行重建已修复的速达帐套的博文,教会你如何修复MDF数据文件,并用DTS导入导出方法重建新的MDF文件。
再次提醒各位速友,坚持每天备份帐套数据,以防万一。
附:在查询分析器中如执行存储过程,运行以下语句。
1,分离被置疑的数据库,
sp_detach_db @dbname = 'SD31502_SD0001'
图15
2,附加数据库,
sp_attach_single_file_db @dbname = 'SD31502_SD0001', @physname = 'C:\Program Files\SuperData\速达V5\Data\SD31502_SD0001.mdf'
图16