Advertisement
lelejau

SQL Database Restorer

Dec 1st, 2011
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.72 KB | None | 0 0
  1.  
  2. #region Includes
  3.  
  4. using System;
  5. using System.Text;
  6. using Microsoft.SqlServer.Management.Smo;
  7. using Microsoft.SqlServer.Management.Common;
  8.  
  9. #endregion
  10.  
  11. namespace database_restorer
  12. {
  13.     class Program
  14.     {
  15.         static Server srvSql;
  16.  
  17.         static void Main(string[] args)
  18.         {
  19.             try
  20.             {
  21.                 Log.Start();
  22.                 var ini = new IniReader("config.ini");
  23.  
  24.                 var srvConn = new ServerConnection();
  25.  
  26.                 srvConn.LoginSecure = false;
  27.                 srvConn.ServerInstance = ini.ReadString("database_restorer", "server","(local)\\SQLEXPRESS");
  28.                 srvConn.Login = ini.ReadString("database_restorer", "user", "sa");
  29.                 srvConn.Password = ini.ReadString("database_restorer", "pass");
  30.                 srvSql = new Server(srvConn);
  31.  
  32.                 if (srvSql != null)
  33.                 {
  34.                     Log.Notice("Creating databases...");
  35.                     var databases = ini.ReadString("database_restorer", "databases");
  36.                     var spl = databases.Split(new char[] { ';' });
  37.                     if (spl.Length > 0)
  38.                     {
  39.                        foreach (var name in spl)
  40.                         {
  41.                             try
  42.                             {
  43.                                 Log.Warning("Creating {0}...", name);
  44.                                 var db = new Database(srvSql, name);
  45.                                
  46.                                 db.Create();
  47.                                 Log.Notice("*** {0} database created. ***", name);
  48.                             }
  49.                             catch { Log.Notice("{0} skipped.", name); continue; }
  50.                         }
  51.                         Log.Notice("Restoring backups...");
  52.                         var bkp_dir = ini.ReadString("database_restorer", "dir_bkp");
  53.                         foreach (var name in spl)
  54.                         {
  55.                             Log.Warning("Restoring {0}...", name);
  56.                             var restore = new Restore();
  57.  
  58.                             var bkp_name = name + ".bak";
  59.                             var path = bkp_dir + bkp_name;
  60.                             var bkp_folder = ini.ReadString("database_restorer", "sql_databases");
  61.                             var dataFile = bkp_folder + name + ".mdf";
  62.                             var logFile = bkp_folder + name + "_Log.ldf";
  63.  
  64.                             var device = new BackupDeviceItem(path, DeviceType.File);
  65.  
  66.                             restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete);
  67.                             restore.Action = RestoreActionType.Database;
  68.                             restore.Database = name;
  69.                             restore.Devices.Add(device);
  70.                             restore.NoRecovery = false;
  71.                             restore.ReplaceDatabase = true;
  72.                             var logicalRestoreFiles = restore.ReadFileList(srvSql);
  73.                             restore.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[0][0].ToString(), dataFile));
  74.                             restore.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[1][0].ToString(), logFile));
  75.  
  76.                             try { restore.SqlRestore(srvSql); }
  77.                             catch(Exception ex) {
  78.                                 Log.Notice("Error restoring {0}.", name);
  79.                                 Log.Error(ex.InnerException.ToString());
  80.                                
  81.                                 continue; }
  82.                         }
  83.                         Log.Notice("Done! Press enter to exit...");
  84.                         Console.ReadLine();
  85.                         Environment.Exit(1);
  86.                     }
  87.                     else
  88.                     {
  89.                         Log.Notice("There is not any databases to create! Aborting...");
  90.                         Console.Read();
  91.                         Environment.Exit(1);
  92.                     }
  93.                 }
  94.                 else
  95.                 {
  96.                     Log.Notice("Failed to connect to the database!");
  97.                     Console.Read();
  98.                     Environment.Exit(1);
  99.                 }
  100.             }
  101.             catch(Exception ex)
  102.             {
  103.                 Log.Notice(ex.InnerException.ToString());
  104.                 Console.ReadLine();
  105.             }
  106.         }
  107.  
  108.         static void restore_PercentComplete(object sender, PercentCompleteEventArgs e)
  109.         {
  110.             Console.Write(String.Format("\r{0}%       Complete...",e.Percent));
  111.             if (e.Percent == 100)
  112.                 Console.Write("\n");
  113.         }
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement