Auteur invité :Sander Stad (@sqlstad)
PSDatabaseClone est un module PowerShell qui a la capacité de créer des images de bases de données ("clones") et de distribuer ces clones à un ou plusieurs hôtes.
Pourquoi utiliser ce module ?
Les administrateurs de bases de données, et vraiment tous ceux qui doivent gérer le provisionnement des données, ont des utilisateurs qui souhaitent travailler avec nos bases de données. Il peut s'agir de développer de nouvelles solutions, d'extraire les données pour les processus ETL, de simuler des problèmes de performances, de récupérer des données à des fins de création de rapports, etc.
Le provisionnement des données vers d'autres emplacements peut être une tâche très fastidieuse et la plupart d'entre nous consacrons beaucoup de temps et de ressources à cette tâche.
Les solutions connues pour provisionner les données consistent à restaurer des bases de données ou à développer des scripts étendus pour résoudre ce problème. Ces solutions ne constituent pas toujours le moyen le plus efficace d'approvisionner les données et peuvent prendre un temps considérable.
Outre le temps nécessaire pour acheminer les données vers les autres emplacements, cela peut également coûter beaucoup d'espace disque.
Et s'il existait un moyen de réduire le temps nécessaire pour provisionner les données et, en même temps, de réduire la quantité de ressources nécessaires ? Il existe maintenant une solution pour cela et elle s'appelle PSDatabaseClone.
Comment installer le module
L'installation du module peut être réalisée de plusieurs manières.
Galerie PowerShell
Le plus simple est d'utiliser la commande Install-Module
. La commande recherche le module dans la PowerShell Gallery. Exécutez le code suivant pour installer le module à l'aide de PowerShell Gallery :
Install-Module PSDatabaseClone
L'utilisation de cette méthode facilite également la mise à jour du module lorsqu'une nouvelle version est publiée. Utilisez simplement le Update-Module
commande comme ci-dessous pour le mettre à jour vers la dernière version :
Update-Module PSDatabaseClone
Cloner le dépôt
Une autre façon d'installer le module consiste à cloner le référentiel Git sur votre ordinateur local. Je conseillerais aux personnes qui veulent contribuer au projet d'utiliser cette méthode.
Exécutez la commande suivante :
git clone https://github.com/sanderstad/PSDatabaseClone.git
Cela téléchargera l'intégralité du référentiel sur votre machine locale à partir de laquelle vous pourrez utiliser le module ou développer de nouvelles fonctionnalités pour celui-ci.
Comment fonctionne le module ?
Images
L'objectif du module était d'utiliser le moins d'applications externes possible, afin que tout le monde puisse utiliser le module sans avoir à installer d'extras. Le module fonctionne en utilisant la technologie native de Windows pour créer des disques durs virtuels (VHD). Un VHD est un format de fichier qui représente un disque dur et peut contenir des volumes, des partitions qui à leur tour peuvent contenir des fichiers et des dossiers. Les VHD peuvent être distribués à d'autres hôtes et montés en tant que disque supplémentaire, un peu comme brancher un lecteur USB externe. Une fois connecté, l'hôte peut accéder aux fichiers et dossiers comme n'importe quel autre disque du système.
Le module crée un VHD qui sera notre soi-disant image. L'image contiendra tous les fichiers et dossiers nécessaires à la base de données.
Pendant le processus de création d'une image, le module obtiendra une sauvegarde de la base de données que vous avez spécifiée et restaurera la base de données dans un VHD.
Après la restauration, le VHD est fermé et démonté et contient maintenant tous les fichiers nécessaires pour cloner la base de données.
Figure 1 :Processus de création d'une image
Clone
Pour créer un clone, le module crée un "disque de différenciation" qui contient les mêmes fichiers et dossiers que le disque parent, mais enregistre uniquement le delta entre le parent et l'enfant.
Cette fonctionnalité économise immédiatement de l'espace disque car seule une fraction de la taille de la base de données d'origine est utilisée pour le clone.
Un autre avantage est que, comme le clone enregistre le delta des modifications, l'image elle-même n'est affectée par aucune des modifications. Cela signifie que les autres clones ne sont pas non plus affectés.
Le processus de création d'un clone consiste à créer un disque de différenciation à l'intérieur d'une image créée (disque parent). Le clone est monté et la base de données à l'intérieur du clone est attachée à une instance.
À partir de ce moment, la base de données est opérationnelle de la même manière que la base de données d'origine. Il contient les mêmes objets, données et comportements. Étant donné que tous les objets se trouvent dans la base de données comme la base de données d'origine, les plans de requête et les statistiques de requête agiront de la même manière.
Cela donne à l'utilisateur ou au développeur la possibilité de créer des requêtes qui s'exécuteront de la même manière en production que sur leur système de développement, réduisant ainsi le risque d'exécuter des requêtes inefficaces.
Création des images et des clones
Créer une image
La première étape du processus consiste à créer une image. Pour créer une image, vous avez les prérequis suivants :
- Instance source
- Instance de destination (peut être la même que l'instance source)
- Base de données
- Chemin réseau
- Sauvegarde
La commande qui crée l'image est :New-PSDCImage
.
Il est très important d'utiliser un chemin réseau vers les images pour permettre à d'autres hôtes de trouver l'image et de l'utiliser pour créer un clone.
Lorsque la commande suivante est exécutée :
New-PSDCImage -SourceInstance SQLDB1 -DestinationInstance SQLDB1 -ImageNetworkPath \\sqldb1\psdatabaseclone\images -Database DB1 -CreateFullBackup
Vous obtiendrez le résultat suivant :
Cette commande a été exécutée le 2018-07-24 vers 21h, ce qui explique les dates dans l'image
Dans cet exemple, la commande examine l'instance SQLDB1 pour une base de données particulière et tente de créer une image à l'aide de la même instance. Il créera une nouvelle sauvegarde complète pour obtenir les dernières données.
Le résultat est une image située dans le partage réseau \\sqldb1\psdatabaseclone\images
appelé DB1_20180724214146.vhdx
.
Les nombres dans le nom de l'image sont un horodatage auquel l'image a été créée.
Créer un clone
Le clone dépend de l'image et le moyen le plus simple de créer un clone à partir d'une base de données particulière est de laisser le module le déterminer pour vous.
Exécution de la commande suivante :
New-PSDCClone -SqlInstance SQLDB3 -Database DB1 -CloneName DB1_Clone2 -LatestImage
Créera un résultat similaire comme ci-dessous :
La commande vient de créer un disque différentiel sur une autre instance. Le clone est basé sur la dernière image de la base de données DB1 et le clone sera nommé "DB1_Clone2".
Comme nous n'avons pas fourni de destination, la commande recherchera l'emplacement des données par défaut de l'instance SQL Server.
Dans ce répertoire, il créera un sous-répertoire appelé "clone". Le clone sera placé dans ce dossier.
Récupérer des informations
Lors de la configuration du module, vous avez attribué un emplacement où tous les clones peuvent être trouvés. Il s'agissait soit d'une base de données, soit d'un répertoire, et plus précisément d'un partage, où sont écrits les fichiers de configuration.
Pour récupérer les informations vous pouvez utiliser les commandes Get-PSDCImage
et Get-PSDCClone
. Ces commandes récupèrent les informations de la banque d'informations et les renvoient à l'utilisateur.
Informations sur l'image
Pour obtenir les informations sur l'image, vous devez utiliser la commande Get-PSDCCimage
. Cela vous donnera un résultat similaire à celui ci-dessous :
Vous voyez qu'il peut y avoir plusieurs images de la même base de données, chacune pouvant avoir des données différentes.
Cloner les informations
Semblable à la récupération des informations d'image, vous pouvez obtenir des informations de clonage. Utilisez la commande Get-PSDCClone et vous obtiendrez un résultat similaire à celui ci-dessous :
Quelle est la prochaine ? !
La prochaine chose avec PSDatabaseClone est de permettre d'obscurcir les données dans les images pour les rendre adaptées aux environnements d'entreprise. Nous sommes tous au courant des incidents de violation de données ces derniers temps et nous voulons nous assurer que nos données, du moins les données qui ne sont pas sur site, sont masquées de manière à ce que personne ne sache quoi en faire.
Comment pouvez-vous aider ?
PSDatabaseClone est un module PowerShell open source et toute personne intéressée peut aider à améliorer le module. Si vous êtes familier avec le développement de fonctions et/ou de modules PowerShell, vous pouvez aider à développer de nouvelles fonctionnalités, corriger des bogues (je suis sûr qu'il y a des bogues quelque part). Si vous n'êtes pas à l'aise pour développer le code, ne vous inquiétez pas; il y a plein de choses à faire.
Vous pouvez aider à tester les différentes fonctions et essayer de les casser. Moi, en tant que personne, je ne peux pas aller plus loin et la plupart du temps, je teste le bon déroulement de mes programmes. Vous testez probablement d'une manière différente et obtenez d'autres résultats auxquels je n'aurais jamais pensé. Cela aidera à améliorer le module.
Vous pouvez également aider à réfléchir à de nouvelles fonctionnalités à ajouter à la solution actuelle. Vous avez peut-être une excellente idée de nouvelle fonctionnalité à laquelle je n'aurais pas pu penser par moi-même.
Si vous avez une idée de nouvelle fonctionnalité ou si vous avez trouvé un bogue, rendez-vous sur la page github et créez une demande de fonctionnalité ou un rapport de bogue. C'est très apprécié.
Informations
Site Web :https://psdatabaseclone.org
Github :https://github.com/sanderstad/PSDatabaseClone
À propos de l'auteur
Sander travaille avec SQL Server depuis la version 2000.Il a travaillé dans divers secteurs , de l'agriculture, des industries financières et de la santé.
Il travaille avec PowerShell depuis la version 1 et adopte l'automatisation là où il le peut.