sql >> データベース >  >> RDS >> Sqlserver

smo データベースの復元

    SMO の使用に成功しました データベースを復元します。コードを共有します。それが役に立てば幸い。ただし、このソリューションには注意点が 1 つあります。プライマリ データ ファイルは 1 つしかないと見なされます。ログ ファイルとデータ ファイルを照合するのは非常に難しく、さまざまな点で問題が発生する可能性があります。とにかく試してみて、これが役立つことを知らせてください。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.IO;
    using System.Text;
    using System.Threading;
    using Microsoft.SqlServer.Management.Common;
    using Microsoft.SqlServer.Management.Smo;
    using Microsoft.Win32;
    
    namespace DatabaseUtility
    {
        public class BackupRestore
        {
            static Server srv;
            static ServerConnection conn;
    
            public static void BackupDatabase(string serverName, string databaseName, string filePath)
            {
                conn = new ServerConnection();
                conn.ServerInstance = serverName;
                srv = new Server(conn);
    
                try
                {
                    Backup bkp = new Backup();
    
                    bkp.Action = BackupActionType.Database;
                    bkp.Database = databaseName;
    
                    bkp.Devices.AddDevice(filePath, DeviceType.File);
                    bkp.Incremental = false;
    
                    bkp.SqlBackup(srv);
    
                    conn.Disconnect();
                    conn = null;
                    srv = null;
                }
    
                catch (SmoException ex)
                {
                    throw new SmoException(ex.Message, ex.InnerException);
                }
                catch (IOException ex)
                {
                    throw new IOException(ex.Message, ex.InnerException);
                }
            }
    
            public static void RestoreDatabase(string serverName, string databaseName, string filePath)
            {
    
                conn = new ServerConnection();
                conn.ServerInstance = serverName;
                srv = new Server(conn);
    
                try
                {
                    Restore res = new Restore();
    
                    res.Devices.AddDevice(filePath, DeviceType.File);
    
                    RelocateFile DataFile = new RelocateFile();
                    string MDF = res.ReadFileList(srv).Rows[0][1].ToString();
                    DataFile.LogicalFileName = res.ReadFileList(srv).Rows[0][0].ToString();
                    DataFile.PhysicalFileName = srv.Databases[databaseName].FileGroups[0].Files[0].FileName;
    
                    RelocateFile LogFile = new RelocateFile();
                    string LDF = res.ReadFileList(srv).Rows[1][1].ToString();
                    LogFile.LogicalFileName = res.ReadFileList(srv).Rows[1][0].ToString();
                    LogFile.PhysicalFileName = srv.Databases[databaseName].LogFiles[0].FileName;
    
                    res.RelocateFiles.Add(DataFile);
                    res.RelocateFiles.Add(LogFile);
    
                    res.Database = databaseName;
                    res.NoRecovery = false;
                    res.ReplaceDatabase = true;
                    res.SqlRestore(srv);
                    conn.Disconnect();
                }
                catch (SmoException ex)
                {
                    throw new SmoException(ex.Message, ex.InnerException);
                }
                catch (IOException ex)
                {
                    throw new IOException(ex.Message, ex.InnerException);
                }
            }
    
            public static Server Getdatabases(string serverName)
            {
                conn = new ServerConnection();
                conn.ServerInstance = serverName;
    
                srv = new Server(conn);
                conn.Disconnect();
                return srv;
    
            }
        }
    }
    



    1. ExcelとAccess:切り替える時期はいつですか?

    2. 1年前のタイムスタンプをクエリするVB.netSQLステートメント

    3. 2人のユーザーが同じデータを編集できないようにする

    4. PostgreSQLのlc_monetaryを設定します