2013-09-18 3 views
0

Я попытался несколько решений и ниже является наиболее прямо вперед один, но я получаю ошибку нижеИспользование SMO для восстановления базы данных из файла .bak

Логический файл «RestoredProcessMananger» не является частью базы данных " RestoredProcessMananger. Используйте RESTORE FILELISTONLY для отображения логических имен файлов.

RESTORE DATABASE заканчивается аномально.

Что я делаю неправильно? Идея заключается в том, чтобы создать DLL, которые будут использоваться другими программами разрешающее базовой линии базы данных будет перезагружен на сервере перезапись все, что там ..

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: фиксированный

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(); 
    } 
+0

Теперь у меня такой же пользователь .. тот же БД .. другой сервер (2008 вместо 2012 года), и теперь он не работает и сбой на этой строке База данных db = smoServer.Databases [имя_базы базы данных]; ..... Любые идея, почему все, что было, кроме версии сервера БД, нарушило бы это? – punkouter

ответ

2

Ошибка указывает что RestoredProcessMananger - это не имя логического файла, содержащегося в вашем файле резервной копии.

Вы использовали RESTORE FILELISTONLY ..., чтобы просмотреть файлы, указанные в файле .BAK?

Например, если ваш резервный файл с именем C: \ MyBackupFile.bak вам нужно будет выполнить следующий запрос от SQL Server Management Studio (или SQLCMD и т.д.):

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

Это обеспечит список логических файлов, содержащихся в файле резервной копии. Затем вам необходимо передать имя одного из этих файлов в ваш код RelocateFile.

+0

ok .. У меня было большое недопонимание того, что происходило в коде. Как файл bak относится к файлу MDF, относится к фактической базе данных. .. У меня есть рабочая версия, которая, кажется, восстанавливает существующую базу данных или создает новую БД, если она не существует. Поэтому теперь нужно сделать ее DLL и принять ее за несколько параметров извне – punkouter

Смежные вопросы