首页 新闻 赞助 找找看

sqlserver2008 还原bak文件失败

0
悬赏园豆:80 [已关闭问题] 关闭于 2016-01-26 19:14

我这边会定时备份数据库数据,备份采用 完整备份(1天)+日志备份(60分钟)。通过FTP把备份文件从A服务器传输给B服务器。通过批处理执行脚本还原。 先还原完整备份 然后再还原日志备份。然后回滚 。
2015年一切执行正常,但是在2016-01-01开始就还原失败,失败提示如下:

执行脚本:

1、磁盘只有C、E盘符,并且空间足够。根本就没有D盘,这是bak文件生成备份时之前A服务器上sqlserver的DATA路径。

2、B服务器上对应数据库里的DATA下只有mdf与ldf日志文件。根本就没有ndf文件存在。
3、通过命令去指定位置:

还是不行。提示一样,没有ndf文件存在。我手动在数据库sqlserver下DATA文件夹创建对应的ndf文件。还是不行。
4、手动执行完整备份。通过命令restore filelistonly from disk='c:/Northwind.bak'查询到只存在basedata.mdf与basedata_log.ldf文件。直接执行还原 OK。

5、通过从A服务器传过来的完整备份。通过命令得到除上面之外还存在30多个ndf文件。而对应需要还原的数据库下却没有ndf文件。然后执行。效果如下:



现在不知道是何原因导致。请大家帮忙看一下。多谢!

问题补充:

我觉得可能是完整备份bak文件的问题?有没有大神帮忙看看 ,提出解决方案?

泪幽无痕的主页 泪幽无痕 | 初学一级 | 园豆:127
提问于:2016-01-24 14:31
< >
分享
所有回答(3)
0

小于5G就能还原成功?

dudu | 园豆:31075 (高人七级) | 2016-01-24 14:35

对!大小在4G左右没有问题,当在5G左右就出现问题

支持(0) 反对(0) 泪幽无痕 | 园豆:127 (初学一级) | 2016-01-24 14:37

@泪幽无痕: 建议首先确认一下2016-01-23这天的完整备份本身是否有问题了

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2016-01-24 15:30

@dudu: 应该不会,因为我分别测试了其他时间点的。bak大小在5G左右 都这样。其他的都没问题 不知道问题出在哪

支持(0) 反对(0) 泪幽无痕 | 园豆:127 (初学一级) | 2016-01-24 15:40

@泪幽无痕: 是不是硬盘分区剩余空间不够了?

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2016-01-24 16:17

@泪幽无痕: 既然没有D盘,那还原时需要修改一下数据库文件的位置

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2016-01-24 16:47

@dudu: 哪为什么我之前没有指定位置就能成功? 我这边测试了一下 ,数据是在2016-01-01就开始出这个错了。不知道跟这个时间有没有关系? 还是对面的数据库在今年做了什么改动。我这边先试试,加上位置路径

支持(0) 反对(0) 泪幽无痕 | 园豆:127 (初学一级) | 2016-01-24 16:48

@dudu: 直接完整备份里面的逻辑文件名只要 mdf文件以及ldf文件  这个可以直接还原
 通过完整备份 +事务日志备份 里面完整备份出了上面的两个文件外还有其他的一些次要文件ndf 
  我已经把数据库删了再重新创建  去还原  之前2015年的都执行成功 就2016执行失败 。现在都失败了  都出现一样的错误信息

 

查看了sqlserver里DATA文件夹 里面只有 SAMDB.mdf与SAMDB.ldf文件

 

设置了指定位置,看看位置有没有写错? 

支持(0) 反对(0) 泪幽无痕 | 园豆:127 (初学一级) | 2016-01-24 19:55

@泪幽无痕: 参考SQL Server 备份和还原全攻略,在“还原为”处可以修改路径

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2016-01-24 20:04

现在的问题是这样的:

我手动备份bak文件里面只有mdf与ldf文件。直接手动还原没有问题

我再去执行通过系统备份的bak文件。查看到他里面出了mdf与ldf日志文件之外 ,还多出了30多个文件组等次要文件 ndf。 


 需要还原的数据库对应在sqlserver/DATA文件夹下只有对应的basedata.mdf与basedata.ldf数据文件,根本就没有ndf文件。

现在出了错就是

1、还原的服务器上根本就没有这个路径。这是在做备份哪台服务器上备份的路径

2、要还原的数据库对应的sqlserver/DATA根本就没有对应的 xxx.ndf文件。

 

以前通过以下代码执行还原没有问题。

现在却不行了。我尝试删除数据库再新建相同的数据库。在未删除之前2015年的都没有问题。在删除新建数据库之后 2015  2016都不行了。现在的问题就这样。我把之前的删了。太多了。看着头晕

支持(0) 反对(0) 泪幽无痕 | 园豆:127 (初学一级) | 2016-01-25 16:10
0

这样的备份有局限性,版本之间不兼容,还容易出错,我一般备份都是用Navicat软件直接将数据同步到另外一台机器,非常方便,就是数据量大的时候,需要一些时间,你不妨试试看,希望能够帮助到你。

CodeHsu | 园豆:5468 (大侠五级) | 2016-01-25 09:57
0

使用sqlserver数据库时,当数据量剧增的时候,mdf文件会变得很大,这时我们可以创建文件组来把数据分割。

如果是完整备份,他会把mdf文件、ldf文件、分割出来的文件组多个ndf(可理解为是mdf文件的一部分)文件一起打包,并且会带上数据库存储文件的路径。

 

当在另一台服务器上执行还原的时候,如果数据库DATA文件夹的位置跟之前备份的不一致时,会还原失败。当两个数据库位置一样的时候就没有这个问题。所以解决的办法有以下三点:

1、删除sqlserver 重新安装,安装的路径跟备份的数据库路径一致。

2、路径不一致时:如果提示需要使用move to来标示新的位置。这时,可通过脚本手动去修改文件位置。执行还原OK。

3、路径不一致时:可采用批处理自动还原,所以先得到备份时所有数据的逻辑文件名,然后遍历所有逻辑文件名拼接成sql语句。然后执行 OK!

其实说得简单一点,出现上面的问题是因为备份的数据文件找不到对应存储的路径。可采用修改数据库位置、手动修改路径手动或者批处理自动修改路径去指定。

 

泪幽无痕 | 园豆:127 (初学一级) | 2016-01-26 19:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册