只有*.mdf文件没有了*.ldf文件如何还原SQL库,急
有什么方法吗,
"附加数据库"时提示无"*.ldf"文件,用同数据库名的*.ldf文件代替也不行.
急
问题点数:100、回复次数:28Top
1 楼duckcn(duck)回复于 2002-07-27 10:05:02 得分 20
sp_attach_single_file_db
将只有一个数据文件的数据库附加到当前服务器。
语法
sp_attach_single_file_db [ @dbname = ] 'dbname'
, [ @physname = ] 'physical_name'
如
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
Top
2 楼a791223()回复于 2002-07-27 10:22:56 得分 0
出现以下提示
服务器: 消息 1813,级别 16,状态 2,行 1
未能打开新数据库 'linjudy'。CREATE DATABASE 将终止。
设备激活错误。物理文件名 'E:\MSSQL7database\data\linjudy_Log.LDF' 可能有误。
-----
好像还是要ldf文件Top
3 楼duckcn(duck)回复于 2002-07-27 10:26:48 得分 0
'E:\MSSQL7database\data\linjudy_Log.LDF' 在你的磁盘上是否存在,存在的话,把文件linjudy_Log.LDF移走。Top
4 楼a791223()回复于 2002-07-27 10:39:57 得分 0
就是因为没有linjudy_Log.LDF才无法恢复,原来这个数据库不在我的机器上的我只得到了mdf文件,想通过SQL2000的附加数据库进行恢复但提示需要ldf文件所以才想如何不需要ldf文件进行恢复Top
5 楼a791223()回复于 2002-07-27 10:48:59 得分 0
我的QQ:94548076
msn:abc791223@hotmail.com
可开贴在加分Top
6 楼duckcn(duck)回复于 2002-07-27 10:57:06 得分 0
看一下
http://www.csdn.net/expert/topic/882/882761.xml?temp=.519253Top
7 楼xiaowangzi(小汪仔)回复于 2002-07-27 11:11:31 得分 0
企业管理器——所有任务——附加数据库Top
8 楼a791223()回复于 2002-07-27 12:28:54 得分 0
我已经新建linjudy数据库,
并且先运行
EXEC sp_detach_db @dbname = 'linjudy'
并且删除了linjudy.ldf文件
在运行
EXEC sp_attach_single_file_db @dbname = 'linjudy',
@physname = 'e:\Program Files\Microsoft SQL Server\MSSQL\Data\linjudy.mdf'
还是提示'E:\MSSQL7database\data\linjudy_Log.LDF' 在你的磁盘上是否存在,存在的话,把文件linjudy_Log.LDF移走。
各位救急呀
Top
9 楼duckcn(duck)回复于 2002-07-27 12:36:39 得分 0
不用先新建linjudy数据库。Top
10 楼a791223()回复于 2002-07-27 12:46:35 得分 0
你是说直接
EXEC sp_attach_single_file_db @dbname = 'linjudy',
@physname = 'e:\Program Files\Microsoft SQL Server\MSSQL\Data\linjudy.mdf
一样的出错提示,你有QQ吗Top
11 楼a791223()回复于 2002-07-27 12:52:40 得分 0
这和附加数据库是不是一样的意思,是不是因为我的sql安装盘符与原来的不一样造成的Top
12 楼skyword(网络新丁)回复于 2002-07-27 12:57:59 得分 0
我的做法一般都没有用LDF,只用MDF,而且都正常追加进了数据库。
exec sp_attach_db @dbname = 'xxx',
@filename1='*.mdf',
use xxx,
exec sp_updatestatsTop
13 楼a791223()回复于 2002-07-27 13:12:27 得分 0
E:\MSSQL7database\data\linjudy_Log.LDF(有可能原mdf文件是在这一路径上而我sql不是安装这一盘符上造成)Top
14 楼skyword(网络新丁)回复于 2002-07-27 13:53:00 得分 0
LDF文件可以在MDF建立的时候重建Top
15 楼a791223()回复于 2002-07-27 18:45:18 得分 0
附加数据库时总是提示
服务器: 消息 1813,级别 16,状态 2,行 1
未能打开新数据库 'linjudy'。CREATE DATABASE 将终止。
设备激活错误。物理文件名 'E:\MSSQL7database\data\linjudy_Log.LDF' 可能有误。
-----
linjudy.mdf文件难道有问题,救命呀,
我新建了一个linjudy数据库,在覆盖了mdf文件出现"置疑"问题在用附加数据库的方法还是出现以上提示,
以上提示是什么含义呀,Top
16 楼lgh21cn(天马行空)回复于 2002-07-27 20:36:44 得分 80
这个问题前段我也遇见过,使用了上面各位仁兄介绍的方法根本没有用。后来我采取的办法是:
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
然后
update sysdatabases set status = 32768 where name = '<db_name>'
现在,重新建立一个log文件(我试过但无法成功,不知高手有何方法)。
先把SQL Server 重新启动一下,然后检查你的数据库吧。
先设置成单用户模式,然后做dbcc
sp_dboption '<db_name>', 'single user', 'true'
DBCC CHECKDB('<db_name>')
把数据库状态改回去了,记得别忘了把系统表的修改选项关掉。
update sysdatabases set status = 28 where name = '<db_name>' --当然你的数据库状态可能不是这个,自己改为合适的值吧。也可以用sp_resetstatus
go
sp_configure 'allow updates', 0
reconfigure with override
如果无法成功创建日志文件,也没有关系,使用以上方法后,看是否已恢复数据库,应该能成功的。关闭SQL SERVER,然后重启,观察一下数据库状态是否正常,如果正常,一切万事大吉,如果数据库处于置疑状态。重新上面的步骤,注意将数据库名称更改为其他名字,恢复后不要关闭SQL SERVER,然后新建一个与原来数据库名称一样的数据库,然后耐心的将恢复得到的数据库中所有的表、视图、函数、存储过程(不包括系统内部的),复制到新建的数据库,要有耐心,特别要注意有相关性的表、视图、函数、存储过程等的复制先后次序,否则会复制失败的。
上面的方法是万不得已才使用的。我在恢复公司内的数据库时,最后就是采用这种方法才最后成功的。希望对你有所帮助。
Top
17 楼a791223()回复于 2002-07-29 00:08:07 得分 0
我的这个mdf文件是另一台机器上的,
数据库名为linjudy
我先新建了linjudy数据库/将sql停止后覆盖了mdf文件并删除了ldf文件再使用如下方法操作
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
update sysdatabases set status = 32768 where name = 'linjudy'
重启sql后在运行
sp_dboption 'linjudy', 'single user', 'true'
DBCC CHECKDB('linjudy')
update sysdatabases set status = 28 where name = 'linjudy'
go
sp_configure 'allow updates', 0
reconfigure with override
在重启sql后数据库状态为"置疑"
我因如何做呀,我急死了,QQ:116799879 MSN:abc791223@hotmail.com 所有可用分相送700分。
Top
18 楼a791223()回复于 2002-07-29 10:05:23 得分 0
急Top
19 楼a791223()回复于 2002-07-30 06:55:30 得分 0
请大家帮助Top
20 楼sky_blue(蓝天2007)回复于 2002-07-30 08:53:04 得分 0
找卖火柴的......Top
21 楼satan_m(伤心小箭)回复于 2002-07-30 16:46:15 得分 0
sp_attach_db 'linjudy','E:\MSSQL7database\data\linjudy_data.MDF'
Top
22 楼satan_m(伤心小箭)回复于 2002-07-30 16:48:48 得分 0
执行以上命令,mssqlserver会自动生成log文件Top
23 楼lgh21cn(天马行空)回复于 2002-07-30 19:51:36 得分 0
我在上面已经讲过,如果重启后数据库状态为"置疑",可以重新运用你上面恢复数据库的办法,要使用其他的数据库名称,使数据库处于紧急处理状态(32768 )。然后,不要重启,新建一个数据库,名称是你原来的数据库名(linjudy)。最后,通过导入数据(在新数据库上)或导出数据(在恢复的数据库上)功能,进行两个数据库的数据复制,可以一次进行多个数据和视图的导入或导出,但要注意相关联的表或视图导入或导出的先后次序,否则会出错的。如果不知道哪些表或视图有关联,可以一部分一部分的进行,如果出错就缩小进行的范围,要有耐心。导入或导出函数和存储过程时,要选择导入或导出方法的第三项,在下一步,特别要注意不要选择相关性,否则很容易导致错误,你也应一部分一部分的进行,不要一次全部完成。我想这样一定可以解决你的问题的,这是我的亲身体验。Top
24 楼a791223()回复于 2002-07-31 07:59:50 得分 0
我在用以上方法建立的数据库提示"置疑/紧急状态"没有办法导入导出Top
25 楼a791223()回复于 2002-07-31 08:03:33 得分 0
是否两台机器的sql安装目录要一样Top
26 楼duckcn(duck)回复于 2002-07-31 08:10:54 得分 0
sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。
注意 只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用 sp_resetstatus。否则,可能会损坏数据库。
由于该过程修改了系统表,系统管理员必须在创建这个过程前,启用系统表更新。要启用更新,使用下面的过程:
USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
过程创建后,立即禁用系统表更新:
sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO
只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即关闭 SQL Server。
语法为:
sp_resetstatus database_name
下面的例子将关闭 PRODUCTION 数据库的置疑标志。
sp_resetstatus PRODUCTION
下面是结果集:
Database 'PRODUCTION' status reset!
WARNING: You must reboot SQL Server prior to accessing this database!
Top
27 楼dayn9(无知者无罪)回复于 2002-07-31 10:18:58 得分 0
在这种情况下确实存在直接attach的情况,7。0我遇到过。不过现在还不清楚原因,很可能和版本有关,比如Desktop版很可能可以。
关于这个问题哪位高手指点一下。Top
28 楼a791223()回复于 2002-07-31 15:11:58 得分 0
各位问题解决了,我再次用了"天马行空"网友的方法,
我先新建了linjudy数据库/将sql停止后覆盖了mdf文件并删除了ldf文件再使用如下方法操作
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
update sysdatabases set status = 32768 where name = 'linjudy'
重启sql后在运行,发现linjudy数据库可以正常打开了,立即查看原有的数据有了,在新建了数据库导出所有表,成功。
重启sql后linjudy库变为"紧急状态"但可以通过“导出数据”导出数据至其它数据库。
至此数据恢复成功,数据是否可以用我没有试。
以后大家恢复时可以用"天马行空"网友的方法,并且在重启sql时可以看一下恢复库的状态如果是"紧急状态"可以通过导出数据导出至其它数据库。
谢谢“天马行空”,谢谢大家的帮助
Top




