Я пытаюсь восстановить резервную копию 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);
}
}
}
}
Не было достаточно ясно, я не отправил ip на stackoverflow, но мой ip правильный, как 10.20.30.40 \ backupfolder – Jebik
Начать здесь: http://www.howtogeek.com/51788/how-to-backup- SQL-базы данных, к-а-сети доля / – DWRoelands