Published on

May 30, 2020

Garder une copie des configurations des instances SQL Server avec dbatools et GIT

Aujourd’hui, je souhaite partager une méthode pour garder une copie des configurations des instances SQL Server en utilisant dbatools et GIT. Cette approche s’appuie sur le travail de Chrissy LeMaire, qui a écrit sur la simplification de la récupération après sinistre avec dbatools dans un précédent article de blog.

Prérequis

Avant de commencer, il y a quelques prérequis à respecter :

  • Un dépôt GIT où nous pouvons stocker les configurations
  • Les outils GIT installés sur le serveur où le script sera exécuté
  • Le module dbatools
  • Une liste ou un endroit pour obtenir toutes les instances pour lesquelles nous voulons exporter les configurations

Préparation du dépôt GIT

La première étape consiste à cloner le dépôt GIT dans un emplacement où dbatools peut écrire. Il est recommandé d’utiliser un jeton d’accès plutôt qu’un nom d’utilisateur/mot de passe pour l’authentification afin d’éviter d’être invité à saisir le mot de passe lors de la validation des modifications.

Obtention de la liste des instances

Pour exporter les configurations de plusieurs instances, nous avons besoin d’une liste de ces instances. Une approche consiste à utiliser une base de données centrale avec une table contenant la liste des serveurs. Nous pouvons utiliser la commande Invoke-DbaQuery de dbatools pour récupérer cette liste.

# Où nous obtiendrons la liste des serveurs
$centralServer = "centralServer"
$centralDatabase = "centralDatabase"
$query = "SELECT ConnString FROM <table/view>"

# Obtenir la liste des serveurs
$ServerList = Invoke-DbaQuery -SqlInstance $centralServer -Database $centralDatabase -Query $query | Select-Object -ExpandProperty ConnString

Exportation des configurations

La commande Export-DbaInstance de dbatools est utilisée pour exporter les configurations de chaque instance. Cette commande crée des scripts pour chaque type d’objet dans un chemin spécifié. Par exemple :

Export-DbaInstance -SqlInstance "devInstance" -Path "D:temp"

Cela créera un dossier nommé “devInstance-{date}” dans le chemin spécifié, contenant un fichier par type d’objet.

Exclusion des mots de passe de l’exportation

Par défaut, la commande Export-DbaInstance inclut les mots de passe des informations d’identification, des serveurs liés et des connexions dans les scripts exportés. Cependant, vous ne souhaitez peut-être pas enregistrer les mots de passe en clair. Pour exclure les mots de passe, vous pouvez utiliser le paramètre -ExcludePassword :

Export-DbaInstance -SqlInstance "devInstance" -Path "D:temp" -ExcludePassword

Cela remplacera les mots de passe des informations d’identification et des serveurs liés par des espaces réservés, tout en conservant les mots de passe hachés des connexions.

Utilisation de GIT pour suivre les modifications

Pour suivre les modifications des configurations au fil du temps, nous pouvons utiliser GIT. Voici les commandes GIT qui peuvent être utilisées :

  • git pull : Pour vous assurer que vous avez la version la plus récente du dépôt dans votre dossier local
  • git add . : Pour préparer toutes les modifications pour le prochain commit
  • git commit -m “un message” : Pour valider les modifications avec un message spécifique
  • git push : Pour pousser les modifications vers le dépôt central

Il est recommandé d’exécuter “git pull” avant de déclencher la commande Export-DbaInstance, et le reste des commandes GIT après que toutes les autres étapes soient terminées.

Renommer les fichiers et dossiers pour plus de cohérence

Lors de l’exportation des configurations, les fichiers et dossiers sont nommés selon un format spécifique. Cependant, pour assurer la cohérence et faciliter le suivi des modifications dans GIT, il est recommandé de renommer les fichiers et dossiers avant de valider les modifications.

Voici un exemple de comment renommer les fichiers :

# Trouver les fichiers .sql dont le nom commence par un nombre et renommer les fichiers pour exclure la partie numérique "#-<NOM>.sql" (supprimer le "#-")
Get-ChildItem -Path $tempPath -Recurse -Filter "*.sql" | Where {$_.Name -match '^[0-9]+.*'} | Foreach-Object {Rename-Item -Path $_.FullName -NewName $($_ -split '-')[1] -Force}

De même, vous pouvez renommer les dossiers :

# Supprimer le suffixe "-datetime"
Get-ChildItem -Path $tempPath | Foreach-Object {Rename-Item -Path $_.FullName -NewName $_.Name.Substring(0, $_.Name.LastIndexOf('-')) -Force}

Étapes finales

Après avoir renommé les fichiers et dossiers, les étapes finales consistent à déplacer les dossiers avec les fichiers du dossier temporaire vers le dossier final dans le dépôt GIT, et à nettoyer le dossier temporaire.

# Copier les dossiers/fichiers du répertoire temporaire vers un niveau supérieur (écraser)
Copy-Item -Path "$tempPath*" -Destination $instancesPath -Recurse -Force

# Nettoyer le dossier temporaire
Get-ChildItem $tempPath | Remove-Item -Force -Recurse -Confirm:$false

Conclusion

Dans cet article de blog, nous avons exploré comment utiliser dbatools et GIT pour garder une copie des configurations des instances SQL Server. En exportant les configurations et en suivant les modifications dans GIT, vous pouvez disposer d’une solution de sauvegarde et de récupération après sinistre. Cette méthode vous permet de comparer facilement les configurations au fil du temps et de revenir à des versions précédentes si nécessaire.

Restez à l’écoute pour la deuxième partie de ce processus, où nous mettrons en œuvre la parallélisme pour optimiser davantage les temps d’exécution. Merci de votre lecture !

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.