public void RestoreDatabase(String databaseName, String filePath, String serverName, String userName, String password, String dataFilePath, String logFilePath)
        {
            try
            {
                Restore sqlRestore = new Restore();

                BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
                sqlRestore.Devices.Add(deviceItem);
                sqlRestore.Database = databaseName;

                ServerConnection connection = new ServerConnection(serverName, userName, password);
                Server sqlServer = new Server(connection);

                Database db = sqlServer.Databases[databaseName];
                sqlRestore.Action = RestoreActionType.Database;
                String dataFileLocation = dataFilePath + databaseName + ".mdf";
                String logFileLocation = logFilePath + databaseName + "_Log.ldf";
                db = sqlServer.Databases[databaseName];
                RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);

                sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
                sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));
                sqlRestore.ReplaceDatabase = true;
                sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
                sqlRestore.PercentCompleteNotification = 10;
                sqlRestore.PercentComplete += new PercentCompleteEventHandler(sqlRestore_PercentComplete);

                sqlRestore.SqlRestore(sqlServer);

                db = sqlServer.Databases[databaseName];

                db.SetOnline();

                sqlServer.Refresh();
            }
            catch (SqlServerManagementException ex)
            {
                ex.Message.ToString();
            }
        }
        public void RestoreDatabase(string databaseName, string backUpFile, string serverName, string restorePath)
        {
            try
            {
                ServerConnection connection  = new ServerConnection(serverName);
                Server           sqlServer   = new Server(connection);
                Restore          rstDatabase = new Restore();
                rstDatabase.Action   = RestoreActionType.Database;
                rstDatabase.Database = databaseName;
                BackupDeviceItem bkpDevice = new BackupDeviceItem(backUpFile, DeviceType.File);
                rstDatabase.Devices.Add(bkpDevice);
                var dataFilePath = restorePath;
                var logFilePath  = restorePath;

                //Create The Restore Database Ldf & Mdf file name
                string dataFileLocation = dataFilePath + databaseName + ".mdf";
                string logFileLocation  = logFilePath + databaseName + "_Log.ldf";

                RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);

                // Replace ldf, mdf file name of selected Backup file
                System.Data.DataTable logicalRestoreFiles = rstDatabase.ReadFileList(sqlServer);
                rstDatabase.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[0][0].ToString(), dataFileLocation));
                rstDatabase.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[1][0].ToString(), logFileLocation));


                rstDatabase.ReplaceDatabase = true;
                rstDatabase.SqlRestore(sqlServer);
            }
            catch (Exception e)
            {
                Console.WriteLine("Failed to restore database" + e.Message);
                throw e;
            }
        }
Exemple #3
0
 /// <summary>
 /// Sets restore plan properties
 /// </summary>
 private void SetRestorePlanProperties(RestorePlan rp)
 {
     if (rp == null || rp.RestoreOperations.Count < 1)
     {
         return;
     }
     rp.SetRestoreOptions(this.RestoreOptions);
     rp.CloseExistingConnections = this.CloseExistingConnections;
     if (this.targetDbName != null && !this.targetDbName.Equals(string.Empty))
     {
         rp.DatabaseName = targetDbName;
     }
     rp.RestoreOperations[0].RelocateFiles.Clear();
     foreach (DbFile dbFile in this.DbFiles)
     {
         // For XStore path, we don't want to try the getFullPath.
         string newPhysicalPath;
         Uri    pathUri;
         bool   uriCreated = Uri.TryCreate(dbFile.PhysicalNameRelocate, UriKind.Absolute, out pathUri);
         if (uriCreated && pathUri.Scheme == "https")
         {
             newPhysicalPath = dbFile.PhysicalNameRelocate;
         }
         else
         {
             newPhysicalPath = Path.GetFullPath(dbFile.PhysicalNameRelocate);
         }
         if (!dbFile.PhysicalName.Equals(newPhysicalPath))
         {
             RelocateFile relocFile = new RelocateFile(dbFile.LogicalName, dbFile.PhysicalNameRelocate);
             rp.RestoreOperations[0].RelocateFiles.Add(relocFile);
         }
     }
 }
Exemple #4
0
        public void RestoreDB(string databaseName)
        {
            Console.WriteLine("*** Restoring***");
            // Don't drop it! /// If you do, anyone with the default database of that DB will croak!
            //server.Databases[databaseName].Drop();
            Restore restore = new Restore();

            restore.Devices.Clear();
            string fileName = string.Format("{0}\\{1}.bak", testFolder, databaseName);

            restore.Devices.Add(new BackupDeviceItem(fileName, DeviceType.File));

            // Just give it a new name
            string destinationDatabaseName = string.Format("{0}_newly_restored", databaseName);

            // Go grab the current database's logical names for the data and log files
            // For this example, we assume there are 1 for each.
            Database currentDatabase    = server.Databases[databaseName];
            string   currentLogicalData = currentDatabase.FileGroups[0].Files[0].Name;
            string   currentLogicalLog  = currentDatabase.LogFiles[0].Name;

            // Now relocate the data and log files
            RelocateFile reloData = new RelocateFile(currentLogicalData, string.Format(@"{0}\{1}.mdf", testFolder, destinationDatabaseName));
            RelocateFile reloLog  = new RelocateFile(currentLogicalLog, string.Format(@"{0}\{1}_Log.ldf", testFolder, destinationDatabaseName));

            restore.RelocateFiles.Add(reloData);
            restore.RelocateFiles.Add(reloLog);

            restore.Database                    = destinationDatabaseName;
            restore.ReplaceDatabase             = true;
            restore.PercentCompleteNotification = 10;
            restore.PercentComplete            += new PercentCompleteEventHandler(restore_PercentComplete);
            restore.Complete                   += new ServerMessageEventHandler(restore_Complete);
            restore.SqlRestore(server);
        }
Exemple #5
0
        public void RestoreDatabase(String databaseName, String filePath, String serverName,
                                    String userName, String password, String dataFilePath, String logFilePath)
        {
            WriteLogFile("Start DB Restore: " + DateTime.Now.ToString());
            WriteLogFile("dataFilePath: " + dataFilePath + " logFilePath " + logFilePath);
            // Create Restore instance
            Restore sqlRestore = new Restore();

            // Point to database
            BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);

            sqlRestore.Devices.Add(deviceItem);
            sqlRestore.Database = databaseName;

            // Connect to DB Server
            ServerConnection connection;

            if (userName == "") // for Windows Authentication
            {
                SqlConnection sqlCon = new SqlConnection(@"Data Source=" + serverName + @"; 
                    Integrated Security=True;");
                connection = new ServerConnection(sqlCon);
            }
            else // for Server Authentication
            {
                connection = new ServerConnection(serverName, userName, password);
            }

            // Restoring
            Server   sqlServer = new Server(connection);
            Database db        = sqlServer.Databases[databaseName];

            sqlRestore.Action = RestoreActionType.Database;
            String dataFileLocation = dataFilePath + databaseName + ".mdf";
            String logFileLocation  = logFilePath + databaseName + "_log.ldf";

            db = sqlServer.Databases[databaseName];
            RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);

            sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "", dataFileLocation));
            sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));
            sqlRestore.ReplaceDatabase             = true;
            sqlRestore.PercentCompleteNotification = 10;
            sqlRestore.PercentComplete            += new PercentCompleteEventHandler(myRestore_PercentComplete);
            sqlRestore.Complete += new ServerMessageEventHandler(myRestore_Complete);

            try
            {
                sqlRestore.SqlRestore(sqlServer);
                db = sqlServer.Databases[databaseName];
                db.SetOnline();
            }
            catch (Exception ex)
            {
                WriteLogFile("error on restore " + ex.Message);
                MessageBox.Show("Error occurred on db restore. LogFile: " + DYLogFile);
            }

            sqlServer.Refresh();
        }
        public static void RestoreDbFromFile(string serverName, string dbName, string fileName)
        {
            Server server = CreateServer(serverName);

            Restore restore = new Restore
            {
                Database = dbName
            };

            restore.Devices.AddDevice(fileName, DeviceType.File);

            foreach (DataRow row in restore.ReadFileList(server).Rows)
            {
                RelocateFile relocateFile = new RelocateFile
                {
                    LogicalFileName  = (string)row[DB_FIELD_LOGICALNAME],
                    PhysicalFileName = NewFileName(server, (string)row[DB_FIELD_TYPE])
                };

                restore.RelocateFiles.Add(relocateFile);
            }

            if (server.Databases.Contains(dbName))
            {
                // Wait until just before restoring to drop any existing database.
                server.KillDatabase(dbName);
            }

            restore.SqlRestore(server);
        }
        public override async Task Restore(DbRestorOptions opt, IProgressBarProvider progressBarProvider,
                                           Action additionalCallbackOnCompleted)
        {
            await Task.Run(() =>
            {
                var srv = new Server(opt.SqlServerInstName);
                if (srv.Databases.Contains(opt.TargetDbName))
                {
                    srv.KillDatabase(opt.TargetDbName);
                }
                var res = new Restore();
                srv.ConnectionContext.StatementTimeout = 0;
                res.Devices.AddDevice(opt.SrcPath, DeviceType.File);

                res.Database = opt.TargetDbName;
                res.Action   = RestoreActionType.Database;
                res.PercentCompleteNotification = 1;
                res.ReplaceDatabase             = true;
                res.Complete += (sender, args) =>
                {
                    if (res.AsyncStatus.ExecutionStatus == ExecutionStatus.Failed)
                    {
                        progressBarProvider.OnError(args.Error.ToString());
                        return;
                    }
                    progressBarProvider.OnCompleted(FinishedRestore);
                    additionalCallbackOnCompleted?.Invoke();
                };
                res.PercentComplete += (sender, args) =>
                {
                    if (res.AsyncStatus.ExecutionStatus == ExecutionStatus.Failed)
                    {
                        progressBarProvider.OnError(res.AsyncStatus.LastException.ToString());
                    }
                    // give 10% for the recovering which happens after restoring.
                    const double weightOfRestoring = 90.0 / 100.0;
                    progressBarProvider.ReportProgress((int)(args.Percent *weightOfRestoring));
                };

                var fileList = res.ReadFileList(srv);

                var dataFile = new RelocateFile(
                    logicalFileName: fileList.Rows[0][0].ToString(),
                    physicalFileName: opt.RelocateMdfTo
                    );

                var logFile = new RelocateFile(
                    logicalFileName: fileList.Rows[1][0].ToString(),
                    physicalFileName: opt.RelocateLdfTo
                    );

                res.RelocateFiles.Add(dataFile);
                res.RelocateFiles.Add(logFile);

                res.ContinueAfterError = false;

                progressBarProvider.Start(true, "Restoring...");
                res.SqlRestoreAsync(srv);
            });
        }
Exemple #8
0
        /// <summary>
        /// phuc thuc phuc hoi du lieu , voi duong dan mac dinh se duoc tai cho thu muc cua chuong trinh
        /// </summary>
        /// <param name="p_FileName"></param>
        /// <param name="p_confItem"></param>
        public static void CreateRestore(string p_FileName, COMMAND.Config.ConfigItem p_confItem, object p_objCall)
        {
            try
            {
                objFormCall         = (Form)p_objCall;
                objFormCall.Enabled = false;
                objFormCall.Controls["groupControl1"].Controls["lblStatus"].Text = COMMAND.MessageUtils.Message.GetMessageById("BKRS_E_015");
                string l_PathApp = Application.StartupPath + "\\App_Data";
                if (!System.IO.Directory.Exists(l_PathApp))
                {
                    System.IO.Directory.CreateDirectory(l_PathApp);
                }

                //khai bao thiet bi du lieu phuc hoi
                BackupDeviceItem deviceItem = new BackupDeviceItem(p_FileName, DeviceType.File);
                //khai bao doi tuong server
                ServerConnection connection = new ServerConnection(p_confItem.StrServerName, p_confItem.StrUserName, p_confItem.StrPassword);
                Server           sqlServer  = new Server(connection);
                //khai bao doi tuong database
                Database db = sqlServer.Databases[p_confItem.StrDBName];
                if (db != null)
                {
                    sqlServer.KillAllProcesses(p_confItem.StrDBName);
                }
                //khai bao doi tuong phuc hoi du lieu
                Restore sqlRestore = new Restore();
                sqlRestore.Devices.Add(deviceItem);
                sqlRestore.Database = p_confItem.StrDBName;
                sqlRestore.Action   = RestoreActionType.Database;
                String       dataFileLocation = l_PathApp + "\\" + p_confItem.StrDBName + ".mdf";
                String       logFileLocation  = l_PathApp + "\\" + p_confItem.StrDBName + "_Log.ldf";
                RelocateFile rf = new RelocateFile(p_confItem.StrDBName, dataFileLocation);
                sqlRestore.RelocateFiles.Add(new RelocateFile(p_confItem.StrDBName, dataFileLocation));
                sqlRestore.RelocateFiles.Add(new RelocateFile(p_confItem.StrDBName + "_log", logFileLocation));
                sqlRestore.ReplaceDatabase             = true;
                sqlRestore.Complete                   += new ServerMessageEventHandler(sqlRestore_Complete);
                sqlRestore.PercentCompleteNotification = 10;
                sqlRestore.PercentComplete            += new PercentCompleteEventHandler(sqlRestore_PercentComplete);
                objFormCall.Controls["groupControl1"].Controls["lblStatus"].Text = COMMAND.MessageUtils.Message.GetMessageById("BKRS_E_014");
                sqlRestore.SqlRestore(sqlServer);
                db = sqlServer.Databases[p_confItem.StrDBName];
                db.SetOnline();
                sqlServer.Refresh();
            }
            catch (Exception ex)
            {
                if (objFormCall != null)
                {
                    objFormCall.Controls["groupControl1"].Controls["lblStatus"].Text = COMMAND.MessageUtils.Message.GetMessageById("BKRS_E_010");
                    objFormCall.Enabled = true;
                    LogUtils.Logger.AppLog.Debug(objFormCall.Name, p_confItem.Login_UserName,
                                                 objFormCall.Controls["groupControl1"].Controls["lblStatus"].Text, ex);
                }
            }
        }
        public void RestoreDB(string fileName, string databaseName, string DBPath)
        {
            Console.WriteLine("*** Restoring***");
            // Don't drop it! /// If you do, anyone with the default database of that DB will croak!
            //server.Databases[databaseName].Drop();
            Restore restore = new Restore();

            restore.Devices.Clear();
            //string fileName = string.Format("{0}\\{1}.bak", testFolder, databaseName);
            restore.Devices.Add(new BackupDeviceItem(fileName, DeviceType.File));

            // Just give it a new name
            //string destinationDatabaseName = string.Format("{0}_newly_restored", databaseName);
            string destinationDatabaseName = databaseName;

            // Go grab the current database's logical names for the data and log files
            // For this example, we assume there are 1 for each.
            Database currentDatabase    = server.Databases[databaseName];
            string   currentLogicalData = "";
            string   currentLogicalLog  = "";

            if (currentDatabase != null)
            {
                currentLogicalData = currentDatabase.FileGroups[0].Files[0].Name;
                currentLogicalLog  = currentDatabase.LogFiles[0].Name;
                if (currentDatabase.ActiveConnections > 0)
                {
                    currentDatabase.SetOffline();
                    server.KillAllProcesses(destinationDatabaseName);
                    //currentDatabase.Drop();
                }
            }
            else
            {
                currentDatabase = server.Databases["master"];
                DataSet ds = currentDatabase.ExecuteWithResults(@"restore filelistonly from disk='" + fileName + "'");
                if (ds != null && ds.Tables[0].Rows.Count > 0)
                {
                    currentLogicalData = ds.Tables[0].Rows[0].ItemArray[0].ToString();
                    currentLogicalLog  = ds.Tables[0].Rows[1].ItemArray[0].ToString();
                }
            }
            // Now relocate the data and log files
            RelocateFile reloData = new RelocateFile(currentLogicalData, string.Format(@"{0}\{1}.mdf", DBPath, destinationDatabaseName));
            RelocateFile reloLog  = new RelocateFile(currentLogicalLog, string.Format(@"{0}\{1}_Log.ldf", DBPath, destinationDatabaseName));

            restore.RelocateFiles.Add(reloData);
            restore.RelocateFiles.Add(reloLog);
            restore.Database                    = destinationDatabaseName;
            restore.ReplaceDatabase             = true;
            restore.PercentCompleteNotification = 1;
            restore.PercentComplete            += new PercentCompleteEventHandler(restore_PercentComplete);
            restore.Complete                   += new ServerMessageEventHandler(restore_Complete);
            restore.SqlRestore(server);
        }
Exemple #10
0
        private bool restoreDatabase(String _filePath)
        {
            if (new CDataConnection().openConnection())
            {
                m_serverCoon = new ServerConnection();
                m_serverCoon.ServerInstance = CDatabase.m_ServerName;
                m_server = new Server(m_serverCoon);
                m_server.KillAllProcesses(CDatabase.m_DatabaseName);
                try
                {
                    Restore _restore = new Restore();

                    _restore.Devices.AddDevice(_filePath, DeviceType.File);

                    RelocateFile DataFile = new RelocateFile();
                    string       MDF      = _restore.ReadFileList(m_server).Rows[0][1].ToString();
                    DataFile.LogicalFileName  = _restore.ReadFileList(m_server).Rows[0][0].ToString();
                    DataFile.PhysicalFileName = m_server.Databases[CDatabase.m_DatabaseName].FileGroups[0].Files[0].FileName;

                    RelocateFile LogFile = new RelocateFile();
                    string       LDF     = _restore.ReadFileList(m_server).Rows[1][1].ToString();
                    LogFile.LogicalFileName  = _restore.ReadFileList(m_server).Rows[1][0].ToString();
                    LogFile.PhysicalFileName = m_server.Databases[CDatabase.m_DatabaseName].LogFiles[0].FileName;

                    _restore.RelocateFiles.Add(DataFile);
                    _restore.RelocateFiles.Add(LogFile);

                    _restore.Database                    = CDatabase.m_DatabaseName;
                    _restore.NoRecovery                  = false;
                    _restore.ReplaceDatabase             = true;
                    _restore.PercentCompleteNotification = 10;
                    _restore.PercentComplete            += new PercentCompleteEventHandler(percentComplete);
                    _restore.SqlRestore(m_server);
                    m_server.Refresh();
                    m_serverCoon.Disconnect();
                    return(true);
                }
                catch (SmoException)
                {
                    //DevExpress.XtraEditors.XtraMessageBox.Show(ex.ToString());
                    // throw new SmoException(ex.Message, ex.InnerException);
                    return(false);
                }
                catch (IOException)
                {
                    //throw new IOException(ex.Message, ex.InnerException);
                    return(false);
                }
            }
            else
            {
                return(false);
                //DevExpress.XtraEditors.XtraMessageBox.Show("Don't restore data from file");
            }
        }
Exemple #11
0
            public static void RestoreDatabase(string serverName = "(local)", string databaseName = "qlcdv", string filePath = "FullBackUp.bak")
            {
                conn = new ServerConnection();
                conn.ServerInstance = serverName;
                srv = new Server(conn);

                try
                {
                    Database database = new Database(srv, databaseName);
                    database.Refresh();
                    srv.KillAllProcesses(databaseName);
                    database.DatabaseOptions.UserAccess = DatabaseUserAccess.Single;
                    database.Alter(TerminationClause.RollbackTransactionsImmediately);



                    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);



                    database.DatabaseOptions.UserAccess = DatabaseUserAccess.Multiple;



                    conn.Disconnect();
                }
                catch (SmoException ex)
                {
                    throw new SmoException(ex.Message, ex.InnerException);
                }
                catch (IOException ex)
                {
                    throw new IOException(ex.Message, ex.InnerException);
                }
            }
Exemple #12
0
        public static void Execute(Server server, string folder, string databaseName)
        {
            var bak = Directory.EnumerateFiles(folder, "*.bak").First(x => x.Contains(databaseName));

            //If the database doesn't exist, create it so that we have something
            //to overwrite.
            if (!server.Databases.Contains(databaseName))
            {
                Consoler.Information($"Database does not exist... Creating {databaseName}");
                var database = new Database(server, databaseName);
                database.Create();
            }

            var targetDatabase = server.Databases[databaseName];

            targetDatabase.RecoveryModel = RecoveryModel.Simple;
            targetDatabase.Alter();
            Restore restore = new Restore
            {
                Database        = databaseName,
                ReplaceDatabase = true
            };

            restore.Devices.AddDevice(bak, DeviceType.File);
            restore.Information += Restore_Information;


            var fileList = restore.ReadFileList(server);

            // restore to new location
            var dataFile = new RelocateFile
            {
                LogicalFileName  = fileList.Rows[0][0].ToString(),
                PhysicalFileName = Path.Combine(folder, databaseName.WithoutExtension() + ".mdf")
            };

            var logFile = new RelocateFile
            {
                LogicalFileName  = fileList.Rows[1][0].ToString(),
                PhysicalFileName = Path.Combine(folder, databaseName.WithoutExtension() + "_log.log")
            };

            restore.RelocateFiles.Add(dataFile);
            Consoler.Information($"dataFile {dataFile.LogicalFileName}");
            restore.RelocateFiles.Add(logFile);
            Consoler.Information($"logFile {logFile.LogicalFileName}");

            server.KillAllProcesses(databaseName);
            Consoler.Information($"KillAllProcesses");
            restore.SqlRestore(server);
            Consoler.Information($"Database restored ");
        }
Exemple #13
0
        public static void RestoreDatabase(string serverName, string databaseName, string filePath, string userName,
                                           string password)
        {
            Console.WriteLine("started restoring up {0}", databaseName);

            var conn = new ServerConnection(serverName, userName, password)
            {
                ConnectTimeout = 200 * 200
            };
            var srv = new Server(conn);

            srv.ConnectionContext.StatementTimeout = 200 * 200;
            try
            {
                var res = new Restore();

                res.Devices.AddDevice(filePath, DeviceType.File);

                var dataFile = new RelocateFile
                {
                    LogicalFileName  = res.ReadFileList(srv).Rows[0][0].ToString(),
                    PhysicalFileName = srv.Databases[databaseName].FileGroups[0].Files[0].FileName
                };

                var logFile = new RelocateFile
                {
                    LogicalFileName  = res.ReadFileList(srv).Rows[1][0].ToString(),
                    PhysicalFileName = srv.Databases[databaseName].LogFiles[0].FileName
                };

                res.RelocateFiles.Add(dataFile);
                res.RelocateFiles.Add(logFile);

                res.Database        = databaseName;
                res.NoRecovery      = false;
                res.ReplaceDatabase = true;
                srv.KillAllProcesses(databaseName);
                res.SqlRestore(srv);
                conn.Disconnect();

                Console.WriteLine("finished restoring up {0}", databaseName);
            }
            catch (SmoException ex)
            {
                throw new SmoException(ex.Message, ex.InnerException);
            }
            catch (IOException ex)
            {
                throw new IOException(ex.Message, ex.InnerException);
            }
        }
Exemple #14
0
        public void RestoreDatabase(String databaseName, String filePath, String serverName, String userName, String password, String dataFilePath, String logFilePath)
        {
            try
            {
                Restore sqlRestore = new Restore();

                BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
                sqlRestore.Devices.Add(deviceItem);
                sqlRestore.Database = databaseName;

                ServerConnection connection = new ServerConnection(serverName, userName, password);
                //Add by JP
                sqlRestore.ReplaceDatabase = true;

                Server sqlServer = new Server(connection);

                //Add by JP
                sqlServer.KillAllProcesses(databaseName);
                sqlRestore.Wait();


                Database db = sqlServer.Databases[databaseName];


                sqlRestore.Action = RestoreActionType.Database;
                String dataFileLocation = dataFilePath + databaseName + ".mdf";
                String logFileLocation  = logFilePath + databaseName + "_Log.ldf";
                db = sqlServer.Databases[databaseName];
                RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);

                sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
                sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));
                sqlRestore.ReplaceDatabase             = true;
                sqlRestore.Complete                   += new ServerMessageEventHandler(sqlRestore_Complete);
                sqlRestore.PercentCompleteNotification = 10;
                sqlRestore.PercentComplete            += new PercentCompleteEventHandler(sqlRestore_PercentComplete);

                sqlRestore.SqlRestore(sqlServer);

                db = sqlServer.Databases[databaseName];

                db.SetOnline();

                sqlServer.Refresh();
            }
            catch (Exception EX)
            {
                throw new Exception(EX.Message, EX.InnerException);
            }
        }
Exemple #15
0
        /***
         * Restores a Bak file to a SQL Server
         ***/
        public static bool RestoreBakFile(string dbServerMachineName, string username, string password, string dbName, string databaseBakFile)
        {
            var    serverConnection = new ServerConnection(dbServerMachineName, username, password);
            Server server           = new Server(serverConnection);

            Database database = new Database(server, dbName);

            //If Need
            database.Create();
            database.Refresh();

            //Restoring
            Restore restore = new Restore
            {
                NoRecovery = false,
                Action     = RestoreActionType.Database
            };

            BackupDeviceItem bdi = default(BackupDeviceItem);

            bdi = new BackupDeviceItem(databaseBakFile, DeviceType.File);

            restore.Devices.Add(bdi);
            restore.Database        = dbName;
            restore.ReplaceDatabase = true;

            RelocateFile DataFile = new RelocateFile();
            string       MDF      = restore.ReadFileList(server).Rows[0][1].ToString();

            DataFile.LogicalFileName  = restore.ReadFileList(server).Rows[0][0].ToString();
            DataFile.PhysicalFileName = server.Databases[dbName].FileGroups[0].Files[0].FileName;

            RelocateFile LogFile = new RelocateFile();
            string       LDF     = restore.ReadFileList(server).Rows[1][1].ToString();

            LogFile.LogicalFileName  = restore.ReadFileList(server).Rows[1][0].ToString();
            LogFile.PhysicalFileName = server.Databases[dbName].LogFiles[0].FileName;

            restore.RelocateFiles.Add(DataFile);
            restore.RelocateFiles.Add(LogFile);

            restore.PercentCompleteNotification = 10;
            restore.SqlRestore(server);
            database.Refresh();
            database.SetOnline();
            server.Refresh();

            return(true);
        }
Exemple #16
0
        public static bool RestoreDatabase(string databaseName, string filePath, string connectionString)
        {
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);

            conn = new ServerConnection(builder.DataSource, builder.UserID, builder.Password);
            srv  = new Server(conn);
            bool success = false;

            try
            {
                Restore  res = new Restore();
                Database db  = new Database(srv, databaseName);
                db.Create();

                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();
                success = true;
            }
            catch (SmoException ex)
            {
                throw new SmoException(ex.Message, ex.InnerException);
            }
            catch (IOException ex)
            {
                throw new IOException(ex.Message, ex.InnerException);
            }

            return(success);
        }
Exemple #17
0
        public static void RestoreDatabase(string serverName, string databaseName, string filePath)
        {
            conn = new ServerConnection();
            conn.ServerInstance = serverName;
            conn.LoginSecure    = false;
            conn.Login          = "******";
            conn.Password       = "******";
            srv = new Server(conn);
            Database db;

            db = new Database(srv, databaseName);
            db.Create();

            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);
            }
        }
Exemple #18
0
        public static void RestoreDatabase(string serverName, string databaseName, string filePath)
        {
            _conn = new ServerConnection();
            _conn.ServerInstance = serverName;
            _srv = new Server(_conn);

            try
            {
                var res = new Restore();

                _srv.KillAllProcesses(databaseName);

                res.Devices.AddDevice(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\" +
                                      filePath, DeviceType.File);

                var    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;

                var    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;

                _srv.KillDatabase(databaseName);
                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 void RestoreDatabase(string fileName)
        {
            CreateDatabase();

            var restore = new Restore
            {
                Database        = _DatabaseName,
                Action          = RestoreActionType.Database,
                NoRecovery      = false,
                ReplaceDatabase = true
            };

            var path = Path.Combine(Directory.GetCurrentDirectory(), fileName);

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

            restore.Devices.Add(device);
            var backupHeader         = restore.ReadBackupHeader(_Server);
            var originalDatabaseName = backupHeader.Rows[0]["DatabaseName"].ToString();

            if (originalDatabaseName != _DatabaseName)
            {
                var dataFile = new RelocateFile
                {
                    PhysicalFileName = Path.Combine(_Server.DefaultFile, _DatabaseName + ".mdb"),
                    LogicalFileName  = originalDatabaseName
                };
                Console.WriteLine("Relocating {0} to {1}", dataFile.LogicalFileName, dataFile.PhysicalFileName);
                restore.RelocateFiles.Add(dataFile);

                var logFile = new RelocateFile
                {
                    PhysicalFileName = Path.Combine(_Server.DefaultLog, _DatabaseName + "_log.ldb"),
                    LogicalFileName  = originalDatabaseName + "_log"
                };
                Console.WriteLine("Relocating {0} to {1}", logFile.LogicalFileName, logFile.PhysicalFileName);
                restore.RelocateFiles.Add(logFile);
            }

            _Server.KillAllProcesses(_DatabaseName);
            restore.PercentCompleteNotification = 10;
            restore.PercentComplete            += (sender, e) => Console.WriteLine(e.Percent + "%");
            restore.SqlRestore(_Server);
        }
Exemple #20
0
        public void Restore(string _BackupFileName)
        {
            RestartTheService();
            Restore          dbRestore = new Restore();
            ServerConnection sc        = new ServerConnection();

            dbRestore.Database        = _DbName;
            dbRestore.Action          = RestoreActionType.Database;
            dbRestore.ReplaceDatabase = true;
            BackupDeviceItem device = new BackupDeviceItem
                                          (_BackupFileName, DeviceType.File);

            dbRestore.PercentComplete +=
                new PercentCompleteEventHandler(CompletionStatusInPercent);
            sc.ServerInstance = ".";
            Server MyServer = new Server(sc);

            try
            {
                dbRestore.Devices.Add(device);

                RelocateFile DataFile = new RelocateFile();
                //string MDF = dbRestore.ReadFileList(MyServer).Rows[0][1].ToString();
                DataFile.LogicalFileName  = dbRestore.ReadFileList(MyServer).Rows[0][0].ToString();
                DataFile.PhysicalFileName = MyServer.Databases[_DbName].FileGroups[0].Files[0].FileName;

                RelocateFile LogFile = new RelocateFile();
                //string LDF = dbRestore.ReadFileList(MyServer).Rows[1][1].ToString();
                LogFile.LogicalFileName  = dbRestore.ReadFileList(MyServer).Rows[1][0].ToString();
                LogFile.PhysicalFileName = MyServer.Databases[_DbName].LogFiles[0].FileName;

                dbRestore.RelocateFiles.Add(DataFile);
                dbRestore.RelocateFiles.Add(LogFile);

                dbRestore.SqlRestore(MyServer);
                sc.Disconnect();
            }
            catch (Exception exc)
            {
                dbRestore.Abort();
                throw exc;
            }
        }
        public static Exception RestoreDatabase(Info_Server info_Server, string databaseName, string filePath)
        {
            conn = new ServerConnection(info_Server.Server_Name, info_Server.User, info_Server.Pass);
            //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)
            {
                return(new Exception(ex.Message, ex.InnerException));
            }
            catch (IOException ex)
            {
                return(new Exception(ex.Message, ex.InnerException));
            }

            return(null);
        }
        public static void RestoreDatabase(string serverName, string databaseName, string filePath)
        {
            serverConnection = new ServerConnection {
                ServerInstance = serverName
            };
            server = new Server(serverConnection);

            try
            {
                Restore res = new Restore();

                res.Devices.AddDevice(filePath, DeviceType.File);

                RelocateFile dataFile = new RelocateFile
                {
                    LogicalFileName  = res.ReadFileList(server).Rows[0][0].ToString(),
                    PhysicalFileName = server.Databases[databaseName].FileGroups[0].Files[0].FileName
                };

                RelocateFile logFile = new RelocateFile();
                string       LDF     = res.ReadFileList(server).Rows[1][1].ToString();
                logFile.LogicalFileName  = res.ReadFileList(server).Rows[1][0].ToString();
                logFile.PhysicalFileName = server.Databases[databaseName].LogFiles[0].FileName;

                res.RelocateFiles.Add(dataFile);
                res.RelocateFiles.Add(logFile);

                res.Database        = databaseName;
                res.NoRecovery      = false;
                res.ReplaceDatabase = true;
                res.SqlRestore(server);
                serverConnection.Disconnect();
            }
            catch (SmoException ex)
            {
                throw new SmoException(ex.Message, ex.InnerException);
            }
            catch (IOException ex)
            {
                throw new IOException(ex.Message, ex.InnerException);
            }
        }
Exemple #23
0
        public static void RestoreDb(string path)
        {
            Server        server    = new Server("localhost\\SQLEXPRESS");
            Restore       restore   = new Restore();
            DirectoryInfo directory = new DirectoryInfo(path);

            if (directory.Exists)
            {
                string fileName = string.Format("{0}\\{1}.bak", path, "LibDB");
                restore.Devices.Add(new BackupDeviceItem(fileName, DeviceType.File));

                string destinationDatabaseName =
                    string.Format("LibDB");

                Database currentDatabase    = server.Databases["LibDB"];
                string   currentLogicalData =
                    currentDatabase.FileGroups[0].Files[0].Name;
                string currentLogicalLog = currentDatabase.LogFiles[0].Name;

                // Now relocate the data and log files
                RelocateFile reloData =
                    new RelocateFile(currentLogicalData,
                                     string.Format(@"{0}\{1}.mdf", path,
                                                   destinationDatabaseName));
                RelocateFile reloLog =
                    new RelocateFile(currentLogicalLog,
                                     string.Format(@"{0}\{1} _Log.ldf", path,
                                                   destinationDatabaseName));
                restore.RelocateFiles.Add(reloData);
                restore.RelocateFiles.Add(reloLog);

                restore.Database        = destinationDatabaseName;
                restore.ReplaceDatabase = true;

                restore.PercentCompleteNotification = 10;
                server.KillAllProcesses(destinationDatabaseName);
                restore.SqlRestore(server);
            }
        }
Exemple #24
0
 public static void RestoreDatabase()
 {
     try
     {
         ServerConnection connection  = new ServerConnection(@"Server\instance", "uname", "PWD");
         Server           sqlServer   = new Server(connection);
         Restore          rstDatabase = new Restore();
         rstDatabase.Action   = RestoreActionType.Database;
         rstDatabase.Database = "H5MI_Automation_Restore_Backup";
         BackupDeviceItem bkpDevice = new BackupDeviceItem(@"E:\DATA\QA_SP\MSSQL11.QA_SP\MSSQL\Backup\H5MI_Automation.bak", DeviceType.File);
         rstDatabase.Devices.Add(bkpDevice);
         rstDatabase.ReplaceDatabase = true;
         //As mentioned in the above solution this code will take care .mdf and .ldf file location issue
         foreach (DataRow r in rstDatabase.ReadFileList(sqlServer).Rows)
         {
             var relocateFile = new RelocateFile();
             relocateFile.LogicalFileName = r["LogicalName"].ToString();
             Console.WriteLine(relocateFile.LogicalFileName);
             var physicalName = r["PhysicalName"].ToString();
             Console.WriteLine(physicalName);
             var path = System.IO.Path.GetDirectoryName(physicalName);
             Console.WriteLine(path);
             var filename = System.IO.Path.GetFileName(physicalName);
             Console.WriteLine(filename);
             physicalName = path + @"\H5MI_Automation_Restore_Backup_" + filename;
             Console.WriteLine(physicalName);
             relocateFile.PhysicalFileName = physicalName;
             Console.WriteLine(relocateFile.PhysicalFileName);
             Console.WriteLine(relocateFile);
             rstDatabase.RelocateFiles.Add(relocateFile);
         }
         rstDatabase.SqlRestore(sqlServer);
         connection.Disconnect();
     }
     catch (Exception e)
     {
         Console.Write(e);
     }
 }
Exemple #25
0
        /// <summary>
        /// Creates the new field data base.
        /// </summary>
        public static void CreateNewFieldDataBase()
        {
            string            applicationDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
            string            userName            = "******";
            DirectoryInfo     dInfo1     = new DirectoryInfo(applicationDataPath);
            DirectorySecurity dSecurity1 = dInfo1.GetAccessControl();

            dSecurity1.AddAccessRule(new FileSystemAccessRule(userName, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
            dInfo1.SetAccessControl(dSecurity1);
            string           localFilePath    = applicationDataPath + "\\TerrascanFieldDB_Data.bak";
            SqlConnection    sqlConnection    = new SqlConnection(connectionStringMaster);
            ServerConnection serverConnection = new ServerConnection(sqlConnection);
            Server           serverObject     = new Server(serverConnection);
            Server           svr;

            svr = serverObject;
            Restore rest = new Restore();

            rest.Database = TerraScanCommon.FieldDataBaseName;
            RelocateFile DATAFILE = new RelocateFile();
            RelocateFile LOGFILE  = new RelocateFile();

            rest.Action = Microsoft.SqlServer.Management.Smo.RestoreActionType.Database;
            rest.Devices.AddDevice(localFilePath, DeviceType.File);
            string mdf = applicationDataPath + "\\TerrascanFieldDB_Data.mdf";

            DATAFILE.LogicalFileName  = rest.ReadFileList(svr).Rows[0][0].ToString();
            DATAFILE.PhysicalFileName = Path.Combine(Path.GetDirectoryName(applicationDataPath + "\\TerrascanFieldDB_Data.mdf"), TerraScanCommon.FieldDataBaseName + Path.GetExtension(mdf));
            string ldf = applicationDataPath + "\\TerrascanFieldDB_Data.ldf";

            LOGFILE.LogicalFileName  = rest.ReadFileList(svr).Rows[1][0].ToString();
            LOGFILE.PhysicalFileName = Path.Combine(Path.GetDirectoryName(ldf), TerraScanCommon.FieldDataBaseName + Path.GetExtension(ldf));
            rest.RelocateFiles.Add(DATAFILE);
            rest.RelocateFiles.Add(LOGFILE);
            rest.PercentCompleteNotification = 10;
            rest.ReplaceDatabase             = true;
            rest.NoRecovery = false;
            rest.SqlRestore(svr);
        }
Exemple #26
0
        public static bool DbRestore(System.Windows.Forms.OpenFileDialog backup, String databaseName)
        {
            try
            {
                dboperation db = new dboperation();
                dboperation.GetConn("master");
                ServerConnection conn = new ServerConnection();
                conn.ServerInstance = ServerInstance();
                Server  srv = new Server(conn);
                Restore res = new Restore();
                res.Devices.AddDevice(backup.FileName, 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      = true;
                res.ReplaceDatabase = true;
                res.SqlRestore(srv);
                conn.Disconnect();
                return(true);
            }
            catch (Exception)
            {
            }
            return(false);
        }
        public static void RestoreDatabase(this Server server, string databaseName, string filePath)
        {
            var res = new Restore();

            res.Devices.AddDevice(filePath, DeviceType.File);

            var DataFile = new RelocateFile();
            string MDF = res.ReadFileList(server).Rows[0][1].ToString();
            DataFile.LogicalFileName = res.ReadFileList(server).Rows[0][0].ToString();
            DataFile.PhysicalFileName = server.Databases[databaseName].FileGroups[0].Files[0].FileName;

            var LogFile = new RelocateFile();
            string LDF = res.ReadFileList(server).Rows[1][1].ToString();
            LogFile.LogicalFileName = res.ReadFileList(server).Rows[1][0].ToString();
            LogFile.PhysicalFileName = server.Databases[databaseName].LogFiles[0].FileName;

            res.RelocateFiles.Add(DataFile);
            res.RelocateFiles.Add(LogFile);

            res.Database = databaseName;
            res.NoRecovery = false;
            res.ReplaceDatabase = true;
            res.SqlRestore(server);
        }
Exemple #28
0
        public void Import(DataFile file)
        {
            if (context.DatabaseExists(file.database))
            {
                throw new InvalidOperationException("database already exists");
            }

            Restore          restore = new Restore();
            BackupDeviceItem backup  = new BackupDeviceItem(file.path, DeviceType.File);

            restore.Database = file.database;
            restore.Devices.Add(backup);

            RelocateFile relocateDataFile = new RelocateFile(LookupLogicalName(restore, "D"), string.Format(savePath, file.database, DataConfig.mdfExt));
            RelocateFile relocateLogFile  = new RelocateFile(LookupLogicalName(restore, "L"), string.Format(savePath, file.database, DataConfig.ldfExt));

            restore.RelocateFiles.Add(relocateDataFile);
            restore.RelocateFiles.Add(relocateLogFile);
            restore.Action          = RestoreActionType.Database;
            restore.ReplaceDatabase = false;
            restore.SqlRestore(SQLServerContext.Server);

            context.ChangeDatabase(file.database);
        }
Exemple #29
0
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            if (e.Argument.ToString() == "getList")
            {
                e.Result = DbUtility.GetListOfAvailibleDatabaseServers();
            }
            else
            {
                try
                {
                    Restore sqlRestore      = new Restore();
                    string  assemblyDirPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                    string  backupPath      = assemblyDirPath + @"\DBBackup\SharedAPI.bak";
                    string  databaseName    = "Chapter7SharedDatabase";

                    BackupDeviceItem buDevice = new BackupDeviceItem(backupPath, DeviceType.File);
                    sqlRestore.Devices.Add(buDevice);
                    sqlRestore.Database = databaseName;
                    string           serverName = e.Argument.ToString();
                    ServerConnection connection = new ServerConnection(serverName);
                    Server           sqlServer  = new Server(connection);
                    Information      info       = sqlServer.Information;

                    //use default database directories
                    string   dataFilePath = info.MasterDBPath;
                    string   logFilePath  = info.MasterDBLogPath;
                    Database database     = sqlServer.Databases[databaseName];
                    if (database == null)
                    {
                        database = new Database(sqlServer, databaseName);
                        database.Create();
                    }
                    String       dataFileLocation = dataFilePath + "\\" + databaseName + ".mdf";
                    String       logFileLocation  = logFilePath + "\\" + databaseName + "_Log.ldf";
                    Database     db = sqlServer.Databases[databaseName];
                    RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);

                    sqlRestore.Complete += sqlRestore_Complete;

                    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
                    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));
                    sqlRestore.ReplaceDatabase = true;

                    sqlRestore.SqlRestore(sqlServer);
                }
                catch (Microsoft.SqlServer.Management.Smo.FailedOperationException error)
                {
                    SearchingLabel.Dispatcher.BeginInvoke(
                        new UpdateTextDel(UpdateText),
                        string.Format("The sample database creation failed with the following error:{0}.",
                                      error.Message)
                        );
                }
                catch (ConnectionFailureException connectError)
                {
                    SearchingLabel.Dispatcher.BeginInvoke(
                        new UpdateTextDel(UpdateText),
                        string.Format("We could not connect to the database. error:{0}.",
                                      connectError.Message)
                        );
                }
            }
        }
Exemple #30
0
        private void Restore(string databaseName,string backupPath,string dbLogicalName,string dbRelocatePath,
            string logLogicalName,string logRelocatePath)
        {
            Restore restore = new Restore
                                  {
                                      Database = databaseName,
                                      PercentCompleteNotification = 10,
                                      NoRecovery = _diffBackupPending,
                                      ReplaceDatabase = true,
                                      ContinueAfterError = true
                                  };

            if (dbRelocatePath != null)
            {
                RelocateFile rf = new RelocateFile();
                rf.LogicalFileName = dbLogicalName;
                rf.PhysicalFileName = dbRelocatePath;
                restore.RelocateFiles.Add(rf);

                RelocateFile rfl = new RelocateFile();
                rfl.LogicalFileName = logLogicalName;
                rfl.PhysicalFileName = logRelocatePath;
                restore.RelocateFiles.Add(rfl);
            }

            restore.PercentComplete += restore_PercentComplete;
            restore.Complete += restore_Complete;
            restore.Devices.AddDevice(backupPath, DeviceType.File);
            restore.SqlRestoreAsync(_server);
        }
Exemple #31
0
        private void btnRestore_Click(object sender, EventArgs e)
        {
            try
            {
                if (String.IsNullOrEmpty(txtPath.Text))
                {
                    MessageBox.Show("No File Selected");
                    return;
                }
                else if (!File.Exists(txtPath.Text))
                {
                    MessageBox.Show("File Not Found");
                    return;
                }
                if (String.IsNullOrEmpty(txtDatabaseName.Text))
                {
                    MessageBox.Show("No Database Name Entered");
                    return;
                }
                string path = txtPath.Text;
                string name = txtDatabaseName.Text;

                Restore sqlRestore = new Restore {
                    Database = name
                };
                Server sqlServer = GetServer();

                if (sqlServer.Databases[name] != null)
                {
                    if (
                        MessageBox.Show("Delete existing database?", "Confirm Delete", MessageBoxButtons.YesNo,
                                        MessageBoxIcon.Warning) == DialogResult.Yes)
                    {
                        sqlServer.KillDatabase(name);
                    }
                    else
                    {
                        return;
                    }
                }

                Database db = new Database(sqlServer, name);
                db.Create();

                BackupDeviceItem backupDevice = new BackupDeviceItem(path, DeviceType.File);


                sqlRestore.Action = RestoreActionType.Database;
                sqlRestore.Devices.Add(backupDevice);

                var table = sqlRestore.ReadBackupHeader(sqlServer);

                var fileNumber = sqlRestore.FileNumber;
                foreach (DataRow r in table.Rows)
                {
                    var tempNum = -1;
                    if (!int.TryParse(r["Position"].ToString(), out tempNum))
                    {
                        continue;
                    }
                    if (tempNum > fileNumber)
                    {
                        fileNumber = tempNum;
                    }
                }
                sqlRestore.FileNumber = fileNumber;

                String dataFileLocation = db.FileGroups[0].Files[0].FileName;
                String logFileLocation  = db.LogFiles[0].FileName;
                db = sqlServer.Databases[name];
                sqlServer.ConnectionContext.Disconnect();

                RelocateFile rf = new RelocateFile(sqlRestore.ReadFileList(sqlServer).Rows[0]["LogicalName"].ToString(), dataFileLocation);
                RelocateFile lf = new RelocateFile(sqlRestore.ReadFileList(sqlServer).Rows[1]["LogicalName"].ToString(), logFileLocation);

                sqlRestore.RelocateFiles.Add(rf);
                sqlRestore.RelocateFiles.Add(lf);


                sqlRestore.ReplaceDatabase             = true;
                sqlRestore.PercentCompleteNotification = 1;
                sqlRestore.PercentComplete            += new PercentCompleteEventHandler(PercentCompleteHandler);
                //sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);

                sqlRestore.SqlRestore(sqlServer);

                db = sqlServer.Databases[name];
                db.SetOnline();
                sqlServer.Refresh();
                MessageBox.Show("Restore Completed");
                progressBar.Visible = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #32
0
        public void RestoreDatabase(SqlConnection connection, string dbName, string filePath)
        {
            using (connection)
            {
                connection.Open();
                Server   srv = new Server(new ServerConnection(connection));
                Database db  = GetDatabase(srv, dbName);
                //srv.KillAllProcesses(db.Name);

                // Define a Restore object variable.
                Restore rs = new Restore();

                if (db.UserAccess != DatabaseUserAccess.Single)
                {
                    db.UserAccess = DatabaseUserAccess.Single;
                    db.Alter(TerminationClause.RollbackTransactionsImmediately);
                    db.Refresh();
                }

                try
                {
                    rs.Action          = RestoreActionType.Database;
                    rs.ReplaceDatabase = true;
                    //rs.Restart = true;

                    // Set the NoRecovery property to true, so the transactions are not recovered.
                    rs.NoRecovery = false;
                    //http://social.msdn.microsoft.com/Forums/sqlserver/en-US/fe8dd4c4-3550-48cd-baaf-fae9246ff87a/smo-restore-unable-to-complete-restore?forum=sqlsmoanddmo

                    // Specify the database name.
                    rs.Database = db.Name;

                    // Declare a BackupDeviceItem by supplying the backup device file name in the constructor, and the type of device is a file.
                    BackupDeviceItem bdi = default(BackupDeviceItem);
                    bdi = new BackupDeviceItem(filePath, DeviceType.File);

                    // Add the device that contains the full database backup to the Restore object.
                    rs.Devices.Add(bdi);

                    var dataFile = new RelocateFile
                    {
                        LogicalFileName  = rs.ReadFileList(srv).Rows[0][0].ToString(),
                        PhysicalFileName = srv.Databases[dbName].FileGroups[0].Files[0].FileName
                    };

                    var logFile = new RelocateFile
                    {
                        LogicalFileName  = rs.ReadFileList(srv).Rows[1][0].ToString(),
                        PhysicalFileName = srv.Databases[dbName].LogFiles[0].FileName
                    };

                    rs.RelocateFiles.Add(dataFile);
                    rs.RelocateFiles.Add(logFile);

                    connection.ChangeDatabase("master"); // You cannot restore a database that you are connected to

                    rs.PercentCompleteNotification = 1;
                    rs.PercentComplete            += Restore_PercentComplete;
                    rs.Complete += Restore_Complete;

                    // Restore the full database backup with no recovery.
                    rs.SqlRestore(srv); //SqlRestoreAsync won't fire Complete event ?
                }
                finally
                {
                    db.UserAccess = DatabaseUserAccess.Multiple;
                    db.Alter(TerminationClause.RollbackTransactionsImmediately);
                    db.Refresh();
                }
            }
        }
Exemple #33
0
        private void PhucHoiDuLieu()
        {
            GetDatabaseInformation();

            var cnn = new SqlConnection(_connectionString);
            cnn.Open();
            var conn = new ServerConnection(cnn);
            var server = new Server(conn);
            cnn.Close();

            Restore restore = new Restore();

            //string fileName = string.Format("{0}\\{1}.bak", testFolder, databaseName);
            string fileName = txtTenTapTin.Text;

            restore.Devices.Add(new BackupDeviceItem(fileName, DeviceType.File));
            // Just give it a new name

            //string destinationDatabaseName = string.Format("{0}_newly_restored", databaseName);
            string destinationDatabaseName = txtCoSoDuLieu.Text;

            // Go grab the current database’s logical names for the data
            // and log files. For this example, we assume there are 1 for each.

            //Database currentDatabase = server.Databases[databaseName];
            //string currentLogicalData_ = currentDatabase.FileGroups[0].Files[0].Name;
            //string currentLogicalLog_ = currentDatabase.LogFiles[0].Name;

            // Now relocate the data and log files

            //RelocateFile reloData = new RelocateFile(currentLogicalData, string.Format(@"{0}\{1}.mdf", testFolder, destinationDatabaseName));
            //RelocateFile reloLog = new RelocateFile(currentLogicalLog, string.Format(@"{0}\{1}_Log.ldf", testFolder, destinationDatabaseName));

            RelocateFile reloData = new RelocateFile(currentLogicalData, physicalFileName);
            RelocateFile reloLog = new RelocateFile(currentLogicalLog, physicalFileLogName);

            //MessageBox.Show(fileName);
            //MessageBox.Show(destinationDatabaseName);

            //MessageBox.Show(currentLogicalData);
            //MessageBox.Show(currentLogicalLog);

            //MessageBox.Show(currentLogicalData_);
            //MessageBox.Show(currentLogicalLog_);

            //MessageBox.Show(string.Format(@"{0}\{1}.mdf", testFolder, destinationDatabaseName));
            //MessageBox.Show(string.Format(@"{0}\{1}_Log.ldf", testFolder, destinationDatabaseName));

            //MessageBox.Show(physicalFileName);
            //MessageBox.Show(physicalFileLogName);

            restore.RelocateFiles.Add(reloData);
            restore.RelocateFiles.Add(reloLog);
            restore.Database = destinationDatabaseName;
            restore.ReplaceDatabase = true;
            restore.PercentCompleteNotification = 10;
            restore.PercentComplete += restore_PercentComplete;
            //restore.Complete += restore_Complete;

            restore.ReplaceDatabase = true;
            server.KillAllProcesses(txtCoSoDuLieu.Text);
            restore.SqlRestore(server);
            server.Refresh();
            MessageBox.Show("Quá trình hoàn tất");

            Bar.EditValue = 0;
            Bar.Refresh();

            //progressBar1.Value = 0;
            //progressBar1.Refresh();
        }
Exemple #34
0
        private void RS()
        {
            Restore sqlRestore = new Restore();

            BackupDeviceItem deviceItem = new BackupDeviceItem(@"D:\Bakup\Weedon.bak", DeviceType.File);
            sqlRestore.Devices.Add(deviceItem);
            sqlRestore.Database = "Weedon";

            ServerConnection connection = new ServerConnection(@".\SQLEXPRESS");

            Server sqlServer = new Server(connection);

            Database db = sqlServer.Databases["Weedon"];
            sqlRestore.Action = RestoreActionType.Database;
            String dataFileLocation = @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\Weedon.mdf";
            String logFileLocation = @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\Weedon_Log.ldf";
            db = sqlServer.Databases["Weedon"];
            RelocateFile rf = new RelocateFile("Weedon", dataFileLocation);

            //sqlRestore.RelocateFiles.Add(new RelocateFile("Weedon", dataFileLocation));
            //sqlRestore.RelocateFiles.Add(new RelocateFile("Weedon" + "_log", logFileLocation));

            System.Data.DataTable logicalRestoreFiles = sqlRestore.ReadFileList(sqlServer);
            sqlRestore.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[0][0].ToString(), dataFileLocation));
            sqlRestore.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[1][0].ToString(), logFileLocation));

            sqlRestore.ReplaceDatabase = true;
            //sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
            sqlRestore.PercentCompleteNotification = 10;
            //sqlRestore.PercentComplete +=
               //new PercentCompleteEventHandler(sqlRestore_PercentComplete);

            //sqlServer.ConnectionContext.Disconnect();

            sqlRestore.SqlRestore(sqlServer);
            db = sqlServer.Databases["Weedon"];
            db.SetOnline();
            sqlServer.Refresh();
        }
Exemple #35
0
        private void btnRestore_Click(object sender, EventArgs e)
        {
            try
            {
                if (String.IsNullOrEmpty(txtPath.Text))
                {
                    MessageBox.Show("No File Selected");
                    return;
                }
                else if (!File.Exists(txtPath.Text))
                {
                    MessageBox.Show("File Not Found");
                    return;
                }
                if (String.IsNullOrEmpty(txtDatabaseName.Text))
                {
                    MessageBox.Show("No Database Name Entered");
                    return;
                }
                string path = txtPath.Text;
                string name = txtDatabaseName.Text;

                Restore sqlRestore = new Restore { Database = name };
                Server sqlServer = GetServer();

                if (sqlServer.Databases[name] != null)
                {
                    if (
                        MessageBox.Show("Delete existing database?", "Confirm Delete", MessageBoxButtons.YesNo,
                                        MessageBoxIcon.Warning) == DialogResult.Yes)
                    {
                        sqlServer.KillDatabase(name);
                    }
                    else
                    {
                        return;
                    }
                }

                Database db = new Database(sqlServer, name);
                db.Create();

                BackupDeviceItem backupDevice = new BackupDeviceItem(path, DeviceType.File);

                sqlRestore.Action = RestoreActionType.Database;
                sqlRestore.Devices.Add(backupDevice);

                var table = sqlRestore.ReadBackupHeader(sqlServer);

                var fileNumber = sqlRestore.FileNumber;
                foreach (DataRow r in table.Rows)
                {
                    var tempNum = -1;
                    if (!int.TryParse(r["Position"].ToString(), out tempNum)) continue;
                    if (tempNum > fileNumber)
                    {
                        fileNumber = tempNum;
                    }
                }
                sqlRestore.FileNumber = fileNumber;

                String dataFileLocation = db.FileGroups[0].Files[0].FileName;
                String logFileLocation = db.LogFiles[0].FileName;
                db = sqlServer.Databases[name];
                sqlServer.ConnectionContext.Disconnect();

                RelocateFile rf = new RelocateFile(sqlRestore.ReadFileList(sqlServer).Rows[0]["LogicalName"].ToString(), dataFileLocation);
                RelocateFile lf = new RelocateFile(sqlRestore.ReadFileList(sqlServer).Rows[1]["LogicalName"].ToString(), logFileLocation);

                sqlRestore.RelocateFiles.Add(rf);
                sqlRestore.RelocateFiles.Add(lf);

                sqlRestore.ReplaceDatabase = true;
                sqlRestore.PercentCompleteNotification = 1;
                sqlRestore.PercentComplete += new PercentCompleteEventHandler(PercentCompleteHandler);
                //sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);

                sqlRestore.SqlRestore(sqlServer);

                db = sqlServer.Databases[name];
                db.SetOnline();
                sqlServer.Refresh();
                MessageBox.Show("Restore Completed");
                progressBar.Visible = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #36
0
        public bool RestoreDatabase(string database, string filePath)
        {
            using (var sqlConnection = new SqlConnection(ConfigUtil.GetConnectionString()))
            {
                ServerConnection conn = new ServerConnection(ConfigUtil.GetServerName(), ConfigUtil.GetUserName(), ConfigUtil.GetPassword());
                srv = new Server(conn);

                try
                {
                    res = new Restore()
                    {
                        Database        = database,
                        NoRecovery      = false,
                        ReplaceDatabase = true
                    };


                    res.PercentComplete += new PercentCompleteEventHandler(Restore_PercentComplete);
                    res.Devices.AddDevice(filePath, DeviceType.File);

                    var DataFile = new RelocateFile();
                    var MDF      = res.ReadFileList(srv).Rows[0][1].ToString();
                    DataFile.LogicalFileName  = res.ReadFileList(srv).Rows[0][0].ToString();
                    DataFile.PhysicalFileName = srv.Databases[database].FileGroups[0].Files[0].FileName;

                    var LogFile = new RelocateFile();
                    var LDF     = res.ReadFileList(srv).Rows[1][1].ToString();
                    LogFile.LogicalFileName  = res.ReadFileList(srv).Rows[1][0].ToString();
                    LogFile.PhysicalFileName = srv.Databases[database].LogFiles[0].FileName;

                    res.RelocateFiles.Add(DataFile);
                    res.RelocateFiles.Add(LogFile);

                    this.KillProcesses(database);

                    //this.viewModel.RestoreStarted = true;

                    res.SqlRestore(srv);

                    return(true);
                }
                catch (SmoException ex)
                {
                    var innerExceptionMessage = "";
                    if (ex.InnerException != null)
                    {
                        innerExceptionMessage = ex.InnerException.Message;
                    }
                    MessageBox.Show(string.Format("{0}\n\n{1}", ex.Message, innerExceptionMessage));
                    return(false);
                }
                catch (IOException ex)
                {
                    MessageBox.Show(ex.Message);
                    return(false);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return(false);
                }
            }
        }