Развернуть базу данных из бэкапа на удаленной машине

212
03 августа 2017, 22:11

Я пытаюсь перенести базу данных с локальной машины на удаленную. Из локального SQL Server я создаю backup и сохраняю его в расшаренную папку на удаленном компьютере(\\SERVER228\SharedFolder\). На удаленном компьютере также имеется SQL Server, и я собираюсь сделать RESTORE DATABASE из этого backup файла, имея ConnectionString к удаленному SQL Server'у. Команда RESTORE DATABASE требует параметр FROM DISK, в котором указывается имя backup файла ('D:\Shared\RetardsDB.bak').

Могу ли я узнать по сетевому имени папки её физический адрес для того, чтобы запустить RESTORE DATABASE команду напрямую? И если да, то как я могу это сделать? Пишу на C#.

Answer 1

Через WMI:

Вот пример получения полной информации:

  private DataTable GetSharedFolderAccessRule()
    {
        DataTable DT = new DataTable();
        try
        {
            DT.Columns.Add("ShareName");
            DT.Columns.Add("Caption");
            DT.Columns.Add("Path");
            DT.Columns.Add("Domain");
            DT.Columns.Add("User");
            DT.Columns.Add("AccessMask");
            DT.Columns.Add("AceType");
            ManagementScope Scope = new ManagementScope(@"\\.\root\cimv2");
            Scope.Connect();
            ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_LogicalShareSecuritySetting");
            ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query);
            ManagementObjectCollection QueryCollection = Searcher.Get();
            foreach (ManagementObject SharedFolder in QueryCollection)
            {
                {
                    String ShareName = (String) SharedFolder["Name"];
                    String Caption   = (String)SharedFolder["Caption"];
                    String LocalPath = String.Empty;
                    ManagementObjectSearcher Win32Share = new ManagementObjectSearcher("SELECT Path FROM Win32_share WHERE Name = '" + ShareName + "'");
                    foreach (ManagementObject ShareData in Win32Share.Get())
                    {
                        LocalPath = (String) ShareData["Path"];
                    }
                    ManagementBaseObject Method = SharedFolder.InvokeMethod("GetSecurityDescriptor", null, new InvokeMethodOptions());
                    ManagementBaseObject Descriptor = (ManagementBaseObject)Method["Descriptor"];
                    ManagementBaseObject[] DACL = (ManagementBaseObject[])Descriptor["DACL"];
                    foreach (ManagementBaseObject ACE in DACL)
                    {
                        ManagementBaseObject Trustee = (ManagementBaseObject)ACE["Trustee"];
                        // Full Access = 2032127, Modify = 1245631, Read Write = 118009, Read Only = 1179817
                        DataRow Row = DT.NewRow();
                        Row["ShareName"]  = ShareName;
                        Row["Caption"]    = Caption;
                        Row["Path"]       = LocalPath;
                        Row["Domain"]     = (String) Trustee["Domain"];
                        Row["User"]       = (String) Trustee["Name"];
                        Row["AccessMask"] = (UInt32) ACE["AccessMask"];
                        Row["AceType"]    = (UInt32) ACE["AceType"];
                        DT.Rows.Add(Row);
                        DT.AcceptChanges();
                    }
                }
            }
        }
        catch (Exception ex) 
        {
            MessageBox.Show(ex.StackTrace, ex.Message);
        }
        return DT;
    }

https://stackoverflow.com/questions/3567063/get-a-list-of-all-unc-shared-folders-on-a-local-network-server

READ ALSO
Visual Studio Online открытие проекта

Visual Studio Online открытие проекта

Я только осваиваю разработку в облакеМне нужно иметь доступ к коду с разных компов под одной учётной записью

205
Не увеличивает переменную в JS?

Не увеличивает переменную в JS?

Есть простой код: http://jsbincom/yulaturibe/edit?html,js,console,output

311
Как преобразовать номер телефона к виду 8999999999?

Как преобразовать номер телефона к виду 8999999999?

Как преобразовать номер телефона к виду 8999999999, сейчас вид такой +7(344) 444-44-44Сделала из него такой +73444444444 следующим образом:

255