首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >还原数据库备份时出错

还原数据库备份时出错
EN

Stack Overflow用户
提问于 2012-05-25 00:11:57
回答 14查看 93K关注 0票数 24

在恢复使用以前版本(SQL Server 2008)创建的备份时,我在使用SQL Server 2012时出错。实际上,我有同一数据库的几个备份文件(在过去的不同时间拍摄)。恢复最新的文件时没有任何问题;但是,其中一个文件会显示以下错误:

System.Data.SqlClient.SqlError:文件"C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL.1\MSSQL\DATA\MYDB_ABC.MDF“的目录查找失败,出现操作系统错误3(系统找不到指定的路径。)。(Microsoft.SqlServer.SmoExtended)

这是一台x64机器,我的数据库文件位于以下位置:c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL

我不明白为什么它尝试在MSSQL.1上而不是在MSSQL11.MSSQLSERVER上进行恢复。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2012-05-25 17:17:09

我已经设法从代码中做到了这一点。这还不够

代码语言:javascript
复制
Restore bkp = new Restore();
bkp.PercentCompleteNotification = 1;
bkp.Action = RestoreActionType.Database;
bkp.Database = sDatabase;
bkp.ReplaceDatabase = true;

RelocateFiles属性必须填充要重新定位的文件的名称和路径。对于每个文件,必须指定文件名和新的物理路径。因此,我所做的是查看要恢复到的数据库的PrimaryFilePath,并将其用作物理位置。如下所示:

代码语言:javascript
复制
if (!string.IsNullOrEmpty(sDataFileName) && !File.Exists(sDataFileName))
{
   if (originaldb != null)
   {
      if (string.Compare(Path.GetDirectoryName(sDataFileName), originaldb.PrimaryFilePath, true) != 0)
      {
         string sPhysicalDataFileName = Path.Combine(originaldb.PrimaryFilePath, sDatabase + ".MDF");
         bkp.RelocateFiles.Add(new RelocateFile(sLogicalDataFileName, sPhysicalDataFileName));
      }                  
   }
}

日志文件也是如此。

票数 7
EN

Stack Overflow用户

发布于 2012-05-25 00:16:03

听起来备份是在一台路径与您的不匹配的机器上进行的。尝试使用T-SQL而不是UI执行备份。还要确保您指定的路径实际存在,并且其中没有这些mdf/ldf文件的副本。

代码语言:javascript
复制
RESTORE DATABASE MYDB_ABC FROM DISK = 'C:\path\file.bak'
WITH MOVE 'mydb' TO 'c:\valid_data_path\MYDB_ABC.mdf',
MOVE 'mydb_log' TO 'c:\valid_log_path\MYDB_ABC.ldf';
票数 39
EN

Stack Overflow用户

发布于 2018-01-18 17:56:30

恢复时,在文件下,选中‘将所有文件重新定位到文件夹’

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10741281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档