Gastauteur:Sander Stad (@sqlstad)
PSDatabaseClone is een PowerShell-module die de mogelijkheid heeft om afbeeldingen van databases ("klonen") te maken en die klonen naar een of meer hosts te distribueren.
Waarom deze module gebruiken?
Databasebeheerders, en eigenlijk iedereen die met dataprovisioning te maken heeft, hebben gebruikers die met onze databases willen werken. Dit kan zijn om nieuwe oplossingen te ontwikkelen, de gegevens voor ETL-processen te extraheren, prestatieproblemen te simuleren, gegevens op te halen voor rapportagedoeleinden, enzovoort.
Het verstrekken van de gegevens aan andere locaties kan een zeer vervelende taak zijn en de meesten van ons besteden veel tijd en middelen aan het uitvoeren van die taak.
Bekende oplossingen om de gegevens te leveren, zijn door databases te herstellen of uitgebreide scripts te ontwikkelen om dit probleem op te lossen. Deze oplossingen zijn niet altijd de meest efficiënte manier om gegevens te verstrekken en kunnen veel tijd in beslag nemen.
Naast de tijd die het kost om de data naar de andere locaties te krijgen, kan het ook veel schijfruimte kosten.
Wat als er een manier was om de hoeveelheid tijd die nodig is om de gegevens te verstrekken te verminderen en tegelijkertijd de hoeveelheid benodigde middelen te verminderen? Daar is nu een oplossing voor en die heet PSDatabaseClone.
Hoe de module te installeren
De installatie van de module kan op verschillende manieren gebeuren.
PowerShellGallery
De gemakkelijkste manier is door het commando Install-Module
. te gebruiken . De opdracht zoekt naar de module in de PowerShell Gallery. Voer de volgende code uit om de module te installeren met behulp van de PowerShell Gallery:
Install-Module PSDatabaseClone
Het gebruik van deze methode maakt het ook gemakkelijker om de module bij te werken wanneer een nieuwe versie wordt uitgebracht. Gebruik gewoon de Update-Module
commando zoals hieronder om het bij te werken naar de nieuwste versie:
Update-Module PSDatabaseClone
De repository klonen
Een andere manier om de module te installeren is door de Git-repository naar uw lokale computer te klonen. Ik zou mensen die willen bijdragen aan het project aanraden om deze methode te gebruiken.
Voer de volgende opdracht uit:
git clone https://github.com/sanderstad/PSDatabaseClone.git
Hiermee wordt de volledige repository naar uw lokale computer gedownload, van waaruit u de module kunt gebruiken of er nieuwe functies voor kunt ontwikkelen.
Hoe werkt de module?
Afbeeldingen
Het doel van de module was om zo min mogelijk externe applicaties te gebruiken, zodat iedereen de module kan gebruiken zonder extra's te hoeven installeren. De module werkt met behulp van native technologie in Windows om virtuele harde schijven (VHD's) te maken. Een VHD is een bestandsindeling die een harde schijf vertegenwoordigt en volumes kan bevatten, partities die op hun beurt bestanden en mappen kunnen bevatten. VHD's kunnen naar andere hosts worden gedistribueerd en als een extra schijf worden gemount, net zoals het aansluiten van een externe USB-drive. Eenmaal verbonden, heeft de host toegang tot de bestanden en mappen zoals elke andere schijf op het systeem.
De module creëert een VHD die onze zogenaamde afbeelding zal zijn. De afbeelding bevat alle bestanden en mappen die nodig zijn voor de database.
Tijdens het proces van het maken van een afbeelding, haalt de module een back-up uit de database die u hebt opgegeven en herstelt de database naar een VHD.
Na het terugzetten wordt de VHD gesloten en ontkoppeld en bevat nu alle bestanden die nodig zijn om de database te klonen.
Figuur 1:Proces voor het maken van een afbeelding
Klonen
Om een kloon te maken, maakt de module een "differentiërende schijf" die dezelfde bestanden en mappen bevat als de bovenliggende schijf, maar alleen de delta tussen bovenliggende en onderliggende schijf opslaat.
Die functionaliteit bespaart direct schijfruimte omdat slechts een fractie van de oorspronkelijke databasegrootte voor de kloon wordt gebruikt.
Een ander voordeel is dat, omdat de kloon de delta van de wijzigingen opslaat, de afbeelding zelf niet wordt beïnvloed door de wijzigingen. Dit betekent dat andere klonen ook niet worden beïnvloed.
Het proces van het maken van een kloon is het maken van een differentiërende schijf in een gemaakte afbeelding (bovenliggende schijf). De kloon wordt aangekoppeld en de database in de kloon wordt aan een instantie gekoppeld.
Vanaf dat moment is de database operationeel op dezelfde manier als de originele. Het bevat dezelfde objecten, gegevens en gedragingen. Omdat alle objecten zich in de database bevinden zoals de originele database, zullen queryplannen en querystatistieken hetzelfde werken.
Dit geeft de gebruiker of ontwikkelaar de kans om query's te maken die in productie hetzelfde zullen worden uitgevoerd als op hun ontwikkelsysteem, waardoor het risico op inefficiënte query's wordt verkleind.
De afbeeldingen en klonen maken
Maak een afbeelding
De eerste stap van het proces is het maken van een afbeelding. Om een afbeelding te maken heb je de volgende vereisten:
- Broninstantie
- Bestemmingsinstantie (kan hetzelfde zijn als de broninstantie)
- Database
- Netwerkpad
- Back-up
Het commando dat de afbeelding maakt is:New-PSDCImage
.
Het is erg belangrijk om een netwerkpad naar de afbeeldingen te gebruiken, zodat andere hosts de afbeelding kunnen vinden en gebruiken om een kloon te maken.
Wanneer het volgende commando wordt uitgevoerd:
New-PSDCImage -SourceInstance SQLDB1 -DestinationInstance SQLDB1 -ImageNetworkPath \\sqldb1\psdatabaseclone\images -Database DB1 -CreateFullBackup
Je krijgt het volgende resultaat:
Deze opdracht is uitgevoerd op 24-07-2018 rond 21.00 uur, wat de datums in de afbeelding verklaart
In dit voorbeeld kijkt de opdracht naar de instantie SQLDB1 voor een bepaalde database en probeert een afbeelding te maken met dezelfde instantie. Er wordt een nieuwe volledige back-up gemaakt om de nieuwste gegevens te krijgen.
Het resultaat is een afbeelding in de netwerkshare \\sqldb1\psdatabaseclone\images
genaamd DB1_20180724214146.vhdx
.
De cijfers in de naam van de afbeelding zijn een tijdstempel op het moment waarop de afbeelding is gemaakt.
Een kloon maken
De kloon is afhankelijk van de afbeelding en de gemakkelijkste manier om een kloon van een bepaalde database te maken, is door de module dat voor je te laten uitzoeken.
Het volgende commando uitvoeren:
New-PSDCClone -SqlInstance SQLDB3 -Database DB1 -CloneName DB1_Clone2 -LatestImage
Zal een soortgelijk resultaat creëren zoals hieronder:
De opdracht heeft zojuist een differentiële schijf gemaakt op een andere instantie. De kloon is gebaseerd op de nieuwste afbeelding voor database DB1 en de kloon krijgt de naam "DB1_Clone2".
Omdat we geen bestemming hebben opgegeven, zoekt de opdracht de standaardgegevenslocatie van de SQL Server-instantie op.
Binnen die map wordt een submap gemaakt met de naam "kloon". De kloon wordt in die map geplaatst.
Informatie ophalen
Tijdens het instellen van de module heb je een locatie toegewezen waar alle klonen te vinden zijn. Dit was ofwel een database of een directory, en meer specifiek een share, waar de configuratiebestanden worden geschreven.
Om de informatie op te halen kunt u de commando's Get-PSDCImage
. gebruiken en Get-PSDCClone
. Deze commando's halen de informatie op uit het informatiearchief en geven deze terug aan de gebruiker.
Beeldinformatie
Om de afbeeldingsinformatie te krijgen, moet je het commando Get-PSDCCimage
. gebruiken . Dit geeft u een vergelijkbaar resultaat als hieronder:
U ziet dat er meerdere afbeeldingen uit dezelfde database kunnen zijn die elk verschillende gegevens kunnen hebben.
Kloon informatie
Net als bij het ophalen van afbeeldingsinformatie, kunt u klooninformatie krijgen. Gebruik het commando Get-PSDCClone en je krijgt een vergelijkbaar resultaat als hieronder:
Wat nu?!
Het volgende ding met PSDatabaseClone is om het mogelijk te maken om de gegevens in de afbeeldingen te verdoezelen om het geschikt te maken voor bedrijfsomgevingen. We zijn allemaal op de hoogte van de incidenten met datalekken van de laatste tijd en we willen ervoor zorgen dat onze gegevens, in ieder geval de gegevens die niet on-premises zijn, op zo'n manier worden gemaskeerd dat niemand weet wat ermee te doen.
Hoe kunt u helpen?
PSDatabaseClone is een open source PowerShell-module en iedereen die geïnteresseerd is, kan helpen om de module te verbeteren. Als je bekend bent met het ontwikkelen van PowerShell-functies en/of -modules, kun je helpen bij het ontwikkelen van nieuwe functies, het oplossen van bugs (ik weet zeker dat er ergens bugs zijn). Als u zich niet op uw gemak voelt bij het ontwikkelen van de code, hoeft u zich geen zorgen te maken; er is genoeg te doen.
U kunt helpen de verschillende functies te testen en te proberen ze te doorbreken. Ik, als één persoon, kan maar zo ver gaan en meestal test ik de gelukkige stroom van mijn programma's. Je test waarschijnlijk op een andere manier en krijgt andere resultaten waar ik nooit aan had gedacht. Dit zal helpen om de module beter te maken.
U kunt ook meedenken over nieuwe functies die u aan de huidige oplossing kunt toevoegen. Misschien heb je een geweldig idee voor nieuwe functionaliteit die ik zelf niet had kunnen bedenken.
Als je een idee hebt voor een nieuwe functie of een bug hebt gevonden, ga dan naar de github-pagina en maak een functieverzoek of een bugrapport aan. Het wordt zeer op prijs gesteld.
Informatie
Website:https://psdatabaseclone.org
Github:https://github.com/sanderstad/PSDatabaseClone
Over de auteur
Sander werkt sinds versie 2000 met SQL Server.Hij heeft in verschillende sectoren gewerkt , uit de landbouw, de financiële sector en de gezondheidszorg.
Hij werkt sinds versie 1 met PowerShell en omarmt automatisering waar hij kan.