Gæsteforfatter:Sander Stad (@sqlstad)
PSDatabaseClone er et PowerShell-modul, der har evnen til at skabe billeder af databaser ("kloner") og distribuere disse kloner til en eller flere værter.
Hvorfor bruge dette modul?
Databaseadministratorer, og i virkeligheden alle, der skal beskæftige sig med dataforsyning, har brugere, der ønsker at arbejde med vores databaser. Dette kan være at udvikle nye løsninger, at udtrække data til ETL-processer, simulere præstationsproblemer, hente data til rapporteringsformål og så videre.
At levere data til andre lokationer kan være en meget kedelig opgave, og de fleste af os bruger meget tid og ressourcer på at udføre denne opgave.
Kendte løsninger til levering af data er ved at gendanne databaser eller udvikle nogle omfattende scripting for at løse dette problem. Disse løsninger er ikke altid den mest effektive måde at klargøre data på og kan tage lang tid.
Udover den tid det koster at få dataene til de andre lokationer, kan det også koste meget diskplads.
Hvad hvis der var en måde at reducere den tid, det tager at levere dataene og samtidig reducere mængden af nødvendige ressourcer? Nu er der en løsning til det, og den hedder PSDatabaseClone.
Sådan installeres modulet
Installationen af modulet kan udføres på flere måder.
PowerShellGallery
Den nemmeste måde er at bruge kommandoen Install-Module
. Kommandoen leder efter modulet i PowerShell Gallery. Udfør følgende kode for at installere modulet ved hjælp af PowerShell Gallery:
Install-Module PSDatabaseClone
Brug af denne metode gør det også nemmere at opdatere modulet, når en ny version bliver frigivet. Brug blot Update-Module
kommando som nedenfor for at opdatere den til den nyeste version:
Update-Module PSDatabaseClone
Klonning af depotet
En anden måde at installere modulet på er ved at klone Git-lageret til din lokale maskine. Jeg vil råde folk, der ønsker at bidrage til projektet, til at bruge denne metode.
Udfør følgende kommando:
git clone https://github.com/sanderstad/PSDatabaseClone.git
Dette vil downloade hele lageret til din lokale maskine, hvorfra du kan bruge modulet eller udvikle nye funktioner til det.
Hvordan fungerer modulet?
Billeder
Målet med modulet var at bruge et minimum af eksterne applikationer som muligt, så alle kan bruge modulet uden at skulle installere ekstraudstyr. Modulet fungerer ved at bruge indbygget teknologi i Windows til at skabe virtuelle harddiske (VHD'er). En VHD er et filformat, der repræsenterer en harddisk og kan indeholde volumener, partitioner, som igen kan indeholde filer og mapper. VHD'er kan distribueres til andre værter og monteres som en ekstra disk, ligesom at tilslutte et eksternt USB-drev. Når den er tilsluttet, kan værten få adgang til filerne og mapperne som enhver anden disk på systemet.
Modulet laver en VHD som bliver vores såkaldte image. Billedet vil indeholde alle de filer og mapper, der er nødvendige for databasen.
Under processen med at oprette et billede vil modulet få en sikkerhedskopi fra den database, du har angivet, og gendanne databasen til en VHD.
Efter gendannelsen er VHD'en lukket og afmonteret og indeholder nu alle de filer, der er nødvendige for at klone databasen.
Figur 1:Processen med at oprette et billede
Kloner
For at oprette en klon opretter modulet en "differentieringsdisk", som indeholder de samme filer og mapper som den overordnede disk, men kun gemmer deltaet mellem forælder og underordnet.
Denne funktionalitet sparer straks diskplads, fordi kun en brøkdel af den oprindelige databasestørrelse bruges til klonen.
En anden fordel er, at fordi klonen gemmer ændringernes delta, bliver selve billedet ikke påvirket af nogen af ændringerne. Det betyder, at andre kloner heller ikke påvirkes.
Processen med at skabe en klon er at skabe en differensdisk inde i et oprettet billede (overordnet disk). Klonen monteres, og databasen inde i klonen er knyttet til en instans.
Fra det øjeblik er databasen operationel på samme måde som den oprindelige ville være. Den indeholder de samme objekter, data og adfærd. Fordi alle objekterne er i databasen ligesom den originale database, vil forespørgselsplaner og forespørgselsstatistikker fungere på samme måde.
Dette giver brugeren eller udvikleren mulighed for at oprette forespørgsler, der kører på samme måde i produktionen som på deres udviklingssystem, hvilket reducerer risikoen for at køre ineffektive forespørgsler.
Oprettelse af billeder og kloner
Opret et billede
Det første trin i processen er at skabe et billede. For at oprette et billede har du følgende forudsætninger:
- Kildeforekomst
- Destinationsforekomst (kan være den samme som kildeforekomsten)
- Database
- Netværkssti
- Sikkerhedskopiering
Kommandoen der opretter billedet er:New-PSDCImage
.
Det er meget vigtigt at bruge en netværkssti til billederne for at gøre det muligt for andre værter at finde billedet og bruge det til at oprette en klon.
Når følgende kommando udføres:
New-PSDCImage -SourceInstance SQLDB1 -DestinationInstance SQLDB1 -ImageNetworkPath \\sqldb1\psdatabaseclone\images -Database DB1 -CreateFullBackup
Du får følgende resultat:
Denne kommando blev udført 2018-07-24 omkring kl. 21.00, hvilket forklarer datoerne i billedet
I dette eksempel ser kommandoen på instansen SQLDB1 for en bestemt database og forsøger at oprette et billede ved hjælp af den samme instans. Det vil oprette en ny fuld sikkerhedskopi for at få de seneste data.
Resultatet er et billede placeret i netværkssharet \\sqldb1\psdatabaseclone\images
kaldet DB1_20180724214146.vhdx
.
Tallene i billedets navn er et tidsstempel på hvilket tidspunkt billedet blev oprettet.
Oprettelse af en klon
Klonen er afhængig af billedet, og den nemmeste måde at oprette en klon fra en bestemt database på er at lade modulet finde ud af det for dig.
Udførelse af følgende kommando:
New-PSDCClone -SqlInstance SQLDB3 -Database DB1 -CloneName DB1_Clone2 -LatestImage
Vil skabe et lignende resultat som nedenfor:
Kommandoen har lige oprettet en differentiel disk på en anden instans. Klonen er baseret på det seneste billede til databasen DB1, og klonen vil få navnet "DB1_Clone2."
Fordi vi ikke har leveret en destination, vil kommandoen slå standarddataplaceringen for SQL Server-forekomsten op.
Inden for den mappe vil den oprette en undermappe kaldet "klon". Klonen vil blive placeret i den mappe.
Henter oplysninger
Under opsætningen af modulet tildelte du en placering, hvor alle klonerne kan findes. Dette var enten en database eller en mappe, og mere specifikt en share, hvor konfigurationsfilerne er skrevet.
For at hente informationen kan du bruge kommandoerne Get-PSDCImage
og Get-PSDCClone
. Disse kommandoer vil hente informationen fra informationslageret og returnere den til brugeren.
Billedoplysninger
For at få billedinformationen skal du bruge kommandoen Get-PSDCCimage
. Dette vil give dig et resultat svarende til nedenfor:
Du kan se, at der kan være flere billeder fra den samme database, som hver kan have forskellige data.
Klonoplysninger
På samme måde som at hente billedinformation kan du få kloninformation. Brug kommandoen Get-PSDCClone, og du vil få et lignende resultat som nedenfor:
Hvad er det næste?
Den næste ting med PSDatabaseClone er at gøre det muligt at sløre dataene i billederne for at gøre det velegnet til virksomhedsmiljøer. Vi kender alle til databrudshændelser på det seneste, og vi vil gerne sikre os, at vores data, i det mindste de data, der ikke er på stedet, er maskeret på en sådan måde, at ingen ved, hvad de skal gøre med dem.
Hvordan kan du hjælpe?
PSDatabaseClone er et open source PowerShell-modul, og alle, der er interesserede, kan hjælpe med at forbedre modulet. Hvis du er fortrolig med at udvikle PowerShell-funktioner og/eller moduler, kan du hjælpe med at udvikle nye funktioner, rette fejl (jeg er sikker på, at der er fejl et sted). Hvis du ikke er tryg ved at udvikle koden, skal du ikke bekymre dig; der er masser af ting at lave.
Du kan hjælpe med at teste de forskellige funktioner og prøve at bryde dem. Jeg, som én person, kan kun nå så langt, og det meste af tiden tester jeg det glade flow i mine programmer. Du tester sikkert på en anden måde og får andre resultater, som jeg aldrig ville have tænkt på. Dette vil hjælpe med at gøre modulet bedre.
Du kan også hjælpe med at tænke på nye funktioner, du kan tilføje til den nuværende løsning. Du har måske en god idé til ny funktionalitet, som jeg ikke kunne have tænkt på alene.
Hvis du har en idé til en ny funktion eller fundet en fejl, så gå til github-siden og opret en funktionsanmodning eller en fejlrapport. Det er meget værdsat.
Oplysninger
Hjemmeside:https://psdatabaseclone.org
Github:https://github.com/sanderstad/PSDatabaseClone
Om forfatteren
Sander har arbejdet med SQL Server siden version 2000.Han har arbejdet i en række forskellige brancher , fra landbrug, finansielle industrier og sundhedsvæsen.
Han har arbejdet med PowerShell siden version 1 og omfavner automatisering, hvor han kan.