Data Migration Assistant : Générer des rapports d’Assessment en PowerShell

LinkedIn 0
Twitter
Facebook 0
Google+ 0
Data Migration Assistant : Introduction

Data Migration Assistant (anciennement SQL Server Upgrade Advisor) est l’outil indispensable pour détecter des problèmes de compatibilité lors de vos futures migrations SQL Server.

Intégrant les dernières solutions du Cloud Azure, l’outil (appelons-le DMA) supporte les quatre plateformes cibles suivantes :

  • SQL Server
  • Azure SQL Database
  • Azure SQL Database Managed Instance
  • SQL Server on Azure Virtual Machines

Si l’outil est très simple d’utilisation (quelques clics seulement suffisent à créer un project d’Assessment), cela peut s’avérer long et fastidieux d’effectuer manuellement la création de nouveaux projets pour un parc SQL assez important.

Heureusement, l’outil DMA dispose d’un mode ligne de commande que je vous propose d’utiliser pour générer un rapport de compatibilité sur projet d’Assessment (les projets de migration n’étant pas encore supportés pour le moment).

 

DMA en ligne de commandes : Les différentes options 

L’ensemble des options disponibles s’affiche par le lancement de la commande ci-dessous (MS-DOS) :

Voici la liste de ces options :

On voit qu’il est possible de choisir précisément la plateforme cible ainsi que le type de recommandation ou d’évaluation souhaité. Les rapports générés peuvent être de deux formats différents (JSON et CSV).

 

Comment lancer un rapport d’Assessment DMA en ligne de commande ?

Prenons l’exemple suivant : Nous disposons d’une base de données « Ventes » hébergée dans une instance SQL nommée PRDSQL01\INS01. Nous souhaitons lancer l’Assessment de cette base de données pour une migration vers une cible de type Azure SQL Managed Instance.

Voici la commande en ligne pour générer le rapport d’Assessment de compatibilité au format CSV :

La syntaxe du DMA se révèle assez simple. Après quelques minutes, le résultat du rapport d’Assessment est généré au format CSV.

Générer un seul rapport est simple. Cependant, la complexité peut vite apparaître si l’on souhaite industrialiser la génération de rapports sur un parc SQL tout entier. Un des problèmes majeurs va être de générer la commande pour toutes les bases d’une instance. Si l’on ne dispose pas de liste des bases pour cette instance, il faudra la construire. L’utilisation du PowerShell va nous être utile pour cette tâche.

 

Comment automatiser un Assessment DMA sur toutes les bases d’une instance MSSQL (Multiple-Database Assessment) ?

Reprenons l’exemple de notre instance PRDSQL01\INS01. Cette fois-ci, nous allons générer un rapport d’Assessment pour l’ensemble des bases de cette instance.

Notre automatisation tient en deux parties :

  • Se connecter à l’instance PRDSQL01\INS01 pour récupérer la liste des bases de données.
  • Générer la syntaxe DMA pour générer un rapport d’Assessement à partir de la liste de ces bases.

Utilisons le PowerShell pour générer le script de rapport DMA. Dans un premier temps, il va falloir se connecter à l’instance pour récupérer la liste des bases. Diverses méthodes de connexion sont possibles en PowerShell (SMO, cmdlets, .Net). Dans notre exemple, choisissons d’utiliser les bibliothèques .NET

Voici comment déclarer la connexion à l’instance SQL PRDSQL01\INS01 :

Il nous faut ensuite exécuter la requête (select name from sys.databases where database_id > 4;) pour récupérer la liste des noms de bases de données. Choisissons d’utiliser un DataSet pour stocker le résultat de cette requête :

N’oublions pas de fermer la connexion lorsque la requête est terminée :

Notre Variable $ListDatabase va donc contenir le nom de toutes les bases de données de l’instance  PRDSQL01\INS01. Il ne reste plus qu’à générer l’ordre pour le DMA.

La petite boucle suivante est nécessaire pour générer l’ensemble des chaînes de connexion :

Vérifions le contenu de la variable $AssessmentDatabases :

La liste des chaînes de connexion est au bon format. Générons ensuite l’ordre d’exécution du DMA.

Petite Subtilité : Il n’est pas possible d’invoquer directement le binaire DmaCmd.exe en PowerShell. Il faut utiliser le cmdlet Start-process avec une liste d’arguments comme ci-dessous :

On remarque que le lancement du DMA va s’effectuer par l’intermédiaire d’une fenêtre MS-DOS. Cela va avoir une importance par la suite.

 

Comment automatiser un Assessment DMA pour une liste d’instances MSSQL ?

Bon, nous avons réussi à lancer un Assessment sur toutes les bases d’une instance. Si nous disposons d’une liste d’instances, il est possible de générer tous les Assessments depuis cette liste. Il faudra juste faire quelques petites adaptations :

  • Le nom du projet sera nommé « Assessment_<Nom de l’instance> ».
  • Le fichier CSV sera nommé « D:\DMA\Results\Assessment_<Nom de l’instance>.csv ».

Pour notre liste d’instance, nous allons juste créer un fichier texte contenant les noms de nos instances séparés par un saut de ligne.

 

Il y a également une autre subtilité à prendre en compte : Le lancement du DMA s’effectuant sur une autre fenêtre, il va falloir contrôler la fin de son exécution avant de lancer la prochaine occurence (Aucune exécution du DMA n’est possible en simultanée). L’utilisation du cmdlet Get-Process nous permettra de vérifier si le process DmaCmd.exe est toujours en en exécution.

En ajoutant les différents contrôles évoqués et en adaptant le script, cela nous donne le script PowerShell ci-dessous.

Il ne nous reste plus qu’à exécuter le script PowerShell pour générer tous nos rapports au format CSV :

 

Les limitations

L’utilisation du DMA souffre de quelques limitations :

  • Les projets d’Assessments, générés en ligne de commandes, ne sont pas consultables via l’interface graphique. Malheureusement, le seul moyen de visualiser les rapports est d’ouvrir les fichiers générés au format CSV et JSON.
  • L’outil DMA ne dispose pas de fonctionnalité pour consolider les projets et les rapports d’Assessments. Néanmoins, les données des fichiers JSON peuvent être intégrées dans une base dédiée pour y être exploitées.

 

Quelques liens utiles pour aller plus loin

 

LinkedIn 0
Twitter
Facebook 0
Google+ 0

Laisser un commentaire

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