首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Server上还原网络数据库而不复制它

在Server上还原网络数据库而不复制它
EN

Stack Overflow用户
提问于 2016-12-27 17:23:43
回答 1查看 280关注 0票数 0

我试图通过网络恢复Server备份。

我发现了很多通过网络复制文件的方法,但是备份文件很大,我不想复制它们。

我的问题很简单:这一行

代码语言:javascript
复制
var fileList = restore.ReadFileList(smoServer);

在Server上执行。

这个定义了我尝试还原的备份。

代码语言:javascript
复制
var backupDeviceItem = new BackupDeviceItem(path, DeviceType.File);

问题是路径看起来像:10.\*.\*.\*\\file.bak

所以我得到了一个例外

“10.*”在服务器上找不到路径

这是合乎逻辑的-我需要为机器10.\*.\*.\*提供凭证。

如果path参数为C:\file.bak,则我的代码可以工作--如果它是\\10.\*.\*.\*\\file.bak,则我的代码中写着“未找到文件”。

BackupDeviceItem有一个具有凭据的构造函数,但是它的SQL凭据.或者我已经在我的Server上了..。我需要有.bak文件的机器的凭证.

有什么想法吗?

以防万一有人想要我的全部代码是我的助手

代码语言:javascript
复制
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);
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-12-27 18:28:36

你说

因此,我得到了一个异常,在服务器上找不到“10.*”路径。

不能在文件夹名中使用星号,也不能在Windows服务器上使用文件名。请参阅命名文件、路径和命名空间

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41349450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档