2016-12-27 77 views
0

我試圖通過網絡還原SQL Server備份。在SQL Server上還原網絡數據庫而不復制它

我發現很多方法通過網絡複製文件,但備份文件很大,我不想複製它們。

我的問題很簡單:這條線

var fileList = restore.ReadFileList(smoServer); 

執行SQL Server上。

這一個定義備份我嘗試恢復

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

的問題是路徑是這樣的:10.\*.\*.\*\\file.bak

所以我得到那個說

「10.異常* *。*「在服務器上找不到路徑

這就是說我需要提供機器的憑據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在計算器上,但我的IP是正確的,像10.20.30.40 \ backupfolder – Jebik

+0

從這裏開始:http://www.howtogeek.com/51788/how-to-backup- SQL的數據庫到一個網絡股/ – DWRoelands

相關問題