SMO et C# : sauvegarder vos bases de données

Pour sauvegarder les bases SQL Server, on utilise généralement un plan de maintenance ou un script T-SQL mais on peut également réaliser cette opération en C# (ou powershell) avec SMO.

Dans un précédent article, j’expliquais comment créer un projet SMO dans Visual Studio. Pour les sauvegardes, Il faut ajouter la DLL Microsoft.SqlServer.SmoExtended.

La logique du script ci-dessous est relativement simple. Je me connecte à une instance SQL Server et pour chaque base de données, j’effectue une sauvegarde FULL.

static void Main(string[] args)
{
   string _instance = "localhost";
   string _repertoireSauvegarde = @"C:temptest";

   string _horodatage = DateTime.Now.ToString("yyyyMMdd_hhmmss");
   smoCommon.ServerConnection sc = new smoCommon.ServerConnection(_instance);
   sc.Connect();
   smo.Server myServer = new smo.Server(sc);
   foreach (smo.Database myDb in myServer.Databases)
   {
      if (myDb.Name != "tempdb")
      {
         smo.Backup myBackup = new smo.Backup();
         myBackup.Database = myDb.Name;

         // Définit le type de sauvegarde à effectuer  (base ou log)
         myBackup.Action = smo.BackupActionType.Database;

         // Sauvegarde FULL = false, Sauvegarde DIFF = true
         myBackup.Incremental = false;

         // Activation de la compression de la sauvegarde
         myBackup.CompressionOption = smo.BackupCompressionOptions.Default;

         // Ajout du device. Ici il s'agit d'un fichier mais on pourrait envisager une sauvegarde sur bande
         myBackup.Devices.AddDevice(_repertoireSauvegarde + myDb.Name + "_" + _horodatage + ".bak", smo.DeviceType.File);
         try
         {
            myBackup.SqlBackup(myServer);
            Console.WriteLine(myDb.Name + " sauvegardée à " + DateTime.Now.ToString());
         }
         catch (Exception ex)
         {
            Console.WriteLine(ex.Message);
         }
      }
   }
   sc.Disconnect();
}

SMO sauvegarder SQL Server

Pour une sauvegarde différentielle, il suffit d’activer la propriété Incremental à true. Pour une sauvegarde du journal de transaction, il faut modifier la propriété Action à smo.BackupActionType.Log.

Dans la bibliothèque SMO, on retrouve toutes les options disponibles dans l’interface de sauvegarde de SQL Server Management Studio. Pourquoi ? Parce que SSMS utilise lui aussi ces bibliothèques. En voici la preuve, si je tente une sauvegarde dans un répertoire dans lequel je n’ai aucun droit, lisez le message d’erreur que j’ai souligné.

preuve_ssms

Sur le site MSDN, vous trouverez une liste exhaustive de toutes les propriétés, méthodes et évènements concernant les sauvegardes. Bon codage !

This entry was posted in C#, SMO and tagged , .

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload CAPTCHA.