在恢复使用以前版本(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
上进行恢复。
发布于 2012-05-25 17:17:09
我已经设法从代码中做到了这一点。这还不够
Restore bkp = new Restore();
bkp.PercentCompleteNotification = 1;
bkp.Action = RestoreActionType.Database;
bkp.Database = sDatabase;
bkp.ReplaceDatabase = true;
RelocateFiles
属性必须填充要重新定位的文件的名称和路径。对于每个文件,必须指定文件名和新的物理路径。因此,我所做的是查看要恢复到的数据库的PrimaryFilePath
,并将其用作物理位置。如下所示:
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));
}
}
}
日志文件也是如此。
发布于 2012-05-25 00:16:03
听起来备份是在一台路径与您的不匹配的机器上进行的。尝试使用T-SQL而不是UI执行备份。还要确保您指定的路径实际存在,并且其中没有这些mdf/ldf文件的副本。
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';
发布于 2018-01-18 17:56:30
恢复时,在文件下,选中‘将所有文件重新定位到文件夹’
https://stackoverflow.com/questions/10741281
复制相似问题