2016-12-27 5 views
0

Я пытаюсь восстановить резервную копию SQL Server по сети.Восстановить сетевую базу данных на SQL Server без ее копирования

Я нашел много способов скопировать файл по сети, но файлы резервных копий большие, я не хочу их копировать.

Моя проблема проста: эта линия

var fileList = restore.ReadFileList(smoServer); 

выполняется на SQL Server.

Это один определить резервную копию, я пытаюсь восстановить

var backupDeviceItem = new BackupDeviceItem(path, DeviceType.File); 

Проблема путь выглядит следующим образом: 10.\*.\*.\*\\file.bak

Так я получаю исключение, которое говорит

«10. * . *. * "путь не найден на сервере

Это lo гический - мне необходимо предоставить удостоверение для машины 10.\*.\*.\*

Если параметр пути C:\file.bak, мой код работает - если это \\10.\*.\*.\*\\file.bak, мой код говорит «файл не найден».

BackupDeviceItem имеет конструктор с учетными данными, но его SQL верительных ... или я уже на моем SQL Server ... Мне нужно учетные данные для машины, которая имеет файл .bak ...

Любые идеи ?

Только в случае, если кто-то хочет весь мой код здесь мой помощник

using Microsoft.SqlServer.Management.Common; 
using Microsoft.SqlServer.Management.Smo; 
using System; 
using System.IO; 

namespace SqlManager.Tools 
{ 
    public class SMOHelper 
    { 
     public static void RestoreDatabase(string path, string restore_name, SqlConfig sqlAccess) 
     { 
      ServerConnection SqlConnection; 

      if (String.IsNullOrWhiteSpace(sqlAccess.username)) 
      { 
       SqlConnection = new ServerConnection(sqlAccess.uri); 
      } 
      else 
      { 
       SqlConnection = new ServerConnection(sqlAccess.uri, sqlAccess.username, sqlAccess.password); 
      } 

      Server smoServer = new Server(SqlConnection); 

      try 
      { 
       // On crée la BDD 
       if (!smoServer.Databases.Contains(restore_name)) 
       { 
        Logger.Info("Creation de la base:"); 
        Logger.Info(restore_name); 
        var database = new Database(smoServer, restore_name); 
        database.Create(); 
       } 

       Logger.Success("Connexion SQL réussi"); 
       var targetDatabase = smoServer.Databases[restore_name]; 
       targetDatabase.RecoveryModel = RecoveryModel.Simple; 
       targetDatabase.Alter(); 

       Restore restore = new Restore(); 

       var backupDeviceItem = new BackupDeviceItem(path, DeviceType.File); 
       restore.Devices.Add(backupDeviceItem); 
       restore.Database = restore_name; 
       restore.ReplaceDatabase = true; 
       restore.NoRecovery = false; 
       restore.Action = RestoreActionType.Database; 

       var fileList = restore.ReadFileList(smoServer); 
       Logger.Success("Fichier de backup trouvé sur le serveur distant"); 

       var dataFile = new RelocateFile(); 
       dataFile.LogicalFileName = fileList.Rows[0][0].ToString(); 
       dataFile.PhysicalFileName = smoServer.Databases[restore_name].FileGroups[0].Files[0].FileName; 

       var logFile = new RelocateFile(); 
       logFile.LogicalFileName = fileList.Rows[1][0].ToString(); 
       logFile.PhysicalFileName = smoServer.Databases[restore_name].LogFiles[0].FileName; 

       restore.RelocateFiles.Add(dataFile); 
       restore.RelocateFiles.Add(logFile); 

       var backupHeaderInfo = restore.ReadBackupHeader(smoServer); 

       smoServer.KillAllProcesses(restore_name); 

       Logger.Info("Debut de la restauration sur le server"); 
       restore.SqlRestore(smoServer); 
       Logger.Success("Restauration terminer"); 

       targetDatabase.SetOnline(); 
       SqlConnection.Disconnect(); 
      } 
      catch (SmoException ex) 
      { 
       Logger.Error("SMO Message : " + ex.Message); 
       Logger.Error("SMO Exception : " + ex.InnerException); 
      } 
      catch (IOException ex) 
      { 
       Logger.Error("IO Message : " + ex.Message); 
       Logger.Error("IO Exception : " + ex.InnerException); 
      } 
      catch (Exception ex) 
      { 
       Logger.Error("Message : " + ex.Message); 
       Logger.Error("Exception : " + ex.InnerException); 
      } 
     } 
    } 
} 

ответ

0

Вы говорите

Так я получаю исключение, что сказать «10. *. *. *» Путь не найден на сервере

Вы не можете использовать звездочку в названии папки или имени файла на сервере Windows. См. Naming Files, Paths, and Namespaces

+0

Не было достаточно ясно, я не отправил ip на stackoverflow, но мой ip правильный, как 10.20.30.40 \ backupfolder – Jebik

+0

Начать здесь: http://www.howtogeek.com/51788/how-to-backup- SQL-базы данных, к-а-сети доля / – DWRoelands