Question

I tried a few solutions and below is the most straight forward one but I get the error below

Logical file 'RestoredProcessMananger' is not part of database 'RestoredProcessMananger'. Use RESTORE FILELISTONLY to list the logical file names.

RESTORE DATABASE is terminating abnormally.

What am I doing wrong ? The idea is to create DLL to be used by other programs the allow a baseline database to be reloaded on a server overwriting whatever is there..

   ServerConnection connection = new ServerConnection("xxx", "sa", "srv$xxx");
   Server svr =new Server(connection);
   Restore res = new Restore();
   res.Database = "RestoredProcessMananger";
   res.Action = RestoreActionType.Database;
   res.Devices.AddDevice(@"C:\temp\ProcessManager.bak", DeviceType.File);
   res.ReplaceDatabase = true;

   res.RelocateFiles.Add(new RelocateFile("RestoredProcessMananger", _
          @"c:\ProcessManager2.mdf"));
   res.RelocateFiles.Add(new RelocateFile("RestoredProcessMananger_Log", _
          @"c:\ProcessManager2_log.ldf"));

   res.SqlRestore(svr);
   svr.Refresh();

EDIT 1: fixed

 public static void RestoreDatabase(string Server, //sqlserver //from CONFIG
        string BackupFilePath, //where the bak file I want to restore  //from CONFIG
        string destinationDatabaseName, //what the restored database will be called //from CONFIG
        string DatabaseFolder, //where the data/log files for the destination (break into 2 variables (2 different locations)) (get from GetDatabaseMDFFilePathName)
        string DatabaseFileName, //the destination MDF file name (get from GetDatabaseMDFFilePathName)
        string DatabaseLogFileName) //the destination LDF file name (get from GetDatabaseMDFFilePathName)
    {
        Server myServer = GetDatabases("xxx");
        Restore myRestore = new Restore();
        myRestore.Database = destinationDatabaseName;
        Database currentDb = myServer.Databases[destinationDatabaseName];
        if (currentDb != null)
            myServer.KillAllProcesses(destinationDatabaseName);
        myRestore.Devices.AddDevice(BackupFilePath, DeviceType.File);
        string DataFileLocation = DatabaseFolder + "\\" + destinationDatabaseName + ".mdf";
        string LogFileLocation = DatabaseFolder + "\\" + destinationDatabaseName + "_log.ldf";
        myRestore.RelocateFiles.Add(new RelocateFile(DatabaseFileName, DataFileLocation));
        myRestore.RelocateFiles.Add(new RelocateFile(DatabaseLogFileName, LogFileLocation));
        myRestore.ReplaceDatabase = true;
        myRestore.PercentCompleteNotification = 10;
        myRestore.SqlRestore(myServer);
        currentDb = myServer.Databases[destinationDatabaseName];
        currentDb.SetOnline();
    }
Was it helpful?

Solution

The error indicates that RestoredProcessMananger is not the name of a logical file contained in your backup file.

Have you used RESTORE FILELISTONLY ... to list the files contained in the .BAK file?

For instance, if your backup file is named C:\MyBackupFile.bak you would need to run the following query from SQL Server Management Studio (or SQLCMD, etc):

RESTORE FILELISTONLY FROM DISK='C:\MyBackupFile.bak';

This will provide a list of the logical files contained in the backup file. You will then need to pass the name of one of these files into your RelocateFile code.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top