Autore ospite:Sander Stad (@sqlstad)
PSDatabaseClone è un modulo di PowerShell che ha la capacità di creare immagini di database ("cloni") e distribuire tali cloni a uno o più host.
Perché usare questo modulo?
Gli amministratori di database, e chiunque abbia a che fare con il provisioning dei dati, hanno utenti che vogliono lavorare con i nostri database. Questo può essere lo sviluppo di nuove soluzioni, l'estrazione dei dati per i processi ETL, la simulazione di problemi di prestazioni, il recupero dei dati a fini di reporting e così via.
Fornire i dati ad altre posizioni può essere un compito molto noioso e la maggior parte di noi dedica molto tempo e risorse allo svolgimento di tale attività.
Le soluzioni note per il provisioning dei dati sono il ripristino dei database o lo sviluppo di script estesi per risolvere questo problema. Queste soluzioni non sono sempre il modo più efficiente per eseguire il provisioning dei dati e possono richiedere una notevole quantità di tempo.
Oltre al tempo necessario per trasferire i dati in altre posizioni, può anche costare molto spazio su disco.
E se ci fosse un modo per ridurre la quantità di tempo necessaria per fornire i dati e, allo stesso tempo, ridurre la quantità di risorse necessarie? Ora c'è una soluzione per questo e si chiama PSDatabaseClone.
Come installare il modulo
L'installazione del modulo può essere eseguita in diversi modi.
Galleria PowerShell
Il modo più semplice è usare il comando Install-Module
. Il comando cerca il modulo nella raccolta di PowerShell. Esegui il codice seguente per installare il modulo utilizzando la Galleria di PowerShell:
Install-Module PSDatabaseClone
L'utilizzo di questo metodo semplifica inoltre l'aggiornamento del modulo quando viene rilasciata una nuova versione. Usa semplicemente il Update-Module
comando come di seguito per aggiornarlo all'ultima versione:
Update-Module PSDatabaseClone
Clonazione del repository
Un altro modo per installare il modulo è clonare il repository Git sul tuo computer locale. Consiglierei alle persone che vogliono contribuire al progetto di utilizzare questo metodo.
Esegui il seguente comando:
git clone https://github.com/sanderstad/PSDatabaseClone.git
Questo scaricherà l'intero repository sul tuo computer locale da cui potrai utilizzare il modulo o sviluppare nuove funzionalità per esso.
Come funziona il modulo?
Immagini
L'obiettivo del modulo era utilizzare il minor numero possibile di applicazioni esterne, in modo che tutti potessero utilizzare il modulo senza dover installare alcun extra. Il modulo funziona utilizzando la tecnologia nativa di Windows per creare dischi rigidi virtuali (VHD). Un VHD è un formato di file che rappresenta un disco rigido e può contenere volumi, partizioni che a loro volta possono contenere file e cartelle. I dischi rigidi virtuali possono essere distribuiti ad altri host e montati come disco aggiuntivo, proprio come collegare un'unità USB esterna. Una volta connesso, l'host può accedere ai file e alle cartelle come qualsiasi altro disco del sistema.
Il modulo crea un VHD che sarà la nostra cosiddetta immagine. L'immagine conterrà tutti i file e le cartelle necessari per il database.
Durante il processo di creazione di un'immagine, il modulo riceverà un backup dal database specificato e ripristinerà il database in un disco rigido virtuale.
Dopo il ripristino, il disco rigido virtuale viene chiuso e smontato e ora contiene tutti i file necessari per clonare il database.
Figura 1:processo di creazione di un'immagine
Cloni
Per creare un clone, il modulo crea un "disco di differenziazione" che contiene gli stessi file e cartelle del disco principale, ma salva solo il delta tra genitore e figlio.
Tale funzionalità consente di risparmiare immediatamente spazio su disco poiché per il clone viene utilizzata solo una frazione della dimensione del database originale.
Un altro vantaggio è che, poiché il clone salva il delta delle modifiche, l'immagine stessa non è interessata da nessuna delle modifiche. Ciò significa che anche altri cloni non sono interessati.
Il processo di creazione di un clone consiste nel creare un disco di differenziazione all'interno di un'immagine creata (disco padre). Il clone viene montato e il database all'interno del clone viene collegato a un'istanza.
Da quel momento in poi, il database è operativo come lo sarebbe stato quello originario. Contiene gli stessi oggetti, dati e comportamenti. Poiché tutti gli oggetti si trovano nel database come il database originale, i piani di query e le statistiche di query funzioneranno allo stesso modo.
Ciò offre all'utente o allo sviluppatore la possibilità di creare query che verranno eseguite in produzione come nel sistema di sviluppo, riducendo il rischio di eseguire query inefficienti.
Creazione delle immagini e dei cloni
Crea un'immagine
Il primo passo del processo è creare un'immagine. Per creare un'immagine hai i seguenti prerequisiti:
- Istanza di origine
- Istanza di destinazione (può essere la stessa dell'istanza di origine)
- Banca dati
- Percorso di rete
- Backup
Il comando che crea l'immagine è:New-PSDCImage
.
È molto importante utilizzare un percorso di rete per le immagini per consentire ad altri host di trovare l'immagine e utilizzarla per creare un clone.
Quando viene eseguito il seguente comando:
New-PSDCImage -SourceInstance SQLDB1 -DestinationInstance SQLDB1 -ImageNetworkPath \\sqldb1\psdatabaseclone\images -Database DB1 -CreateFullBackup
Otterrai il seguente risultato:
Questo comando è stato eseguito il 24-07-2018 intorno alle 21:00, il che spiega le date nell'immagine
In questo esempio il comando esamina l'istanza SQLDB1 per un database particolare e tenta di creare un'immagine utilizzando la stessa istanza. Creerà un nuovo backup completo per ottenere i dati più recenti.
Il risultato è un'immagine che si trova nella condivisione di rete \\sqldb1\psdatabaseclone\images
chiamato DB1_20180724214146.vhdx
.
I numeri nel nome dell'immagine sono un timestamp in cui è stata creata l'immagine.
Creazione di un clone
Il clone dipende dall'immagine e il modo più semplice per creare un clone da un particolare database è lasciare che sia il modulo a capirlo per te.
Eseguendo il comando seguente:
New-PSDCClone -SqlInstance SQLDB3 -Database DB1 -CloneName DB1_Clone2 -LatestImage
Creerà un risultato simile come di seguito:
Il comando ha appena creato un disco differenziale su un'altra istanza. Il clone è basato sull'ultima immagine per il database DB1 e il clone sarà denominato "DB1_Clone2".
Poiché non è stata fornita una destinazione, il comando cercherà la posizione dei dati predefinita dell'istanza di SQL Server.
All'interno di quella directory creerà una sottodirectory chiamata "clone". Il clone verrà posizionato all'interno di quella cartella.
Recupero delle informazioni
Durante la configurazione del modulo, è stata assegnata una posizione in cui è possibile trovare tutti i cloni. Questo era un database o una directory, e più specificamente una condivisione, in cui vengono scritti i file di configurazione.
Per recuperare le informazioni puoi usare i comandi Get-PSDCImage
e Get-PSDCClone
. Questi comandi recupereranno le informazioni dall'archivio informazioni e le restituiranno all'utente.
Informazioni sull'immagine
Per ottenere le informazioni sull'immagine devi usare il comando Get-PSDCCimage
. Questo ti darà un risultato simile al seguente:
Puoi vedere che possono esserci più immagini dallo stesso database, ognuna delle quali potrebbe avere dati diversi.
Clone informazioni
Simile al recupero delle informazioni sull'immagine, puoi ottenere informazioni sulla clonazione. Usa il comando Get-PSDCClone e otterrai un risultato simile al seguente:
Cosa c'è dopo?!
La prossima cosa con PSDatabaseClone è rendere possibile offuscare i dati nelle immagini per renderli adatti agli ambienti aziendali. Ultimamente sappiamo tutti degli incidenti di violazione dei dati e vogliamo assicurarci che i nostri dati, almeno i dati che non sono locali, siano mascherati in modo tale che nessuno sappia cosa farne.
Come puoi aiutare?
PSDatabaseClone è un modulo PowerShell open source e tutti coloro che sono interessati possono aiutare a migliorare il modulo. Se hai familiarità con lo sviluppo di funzioni e/o moduli di PowerShell, puoi aiutare a sviluppare nuove funzionalità, correggere bug (sono sicuro che ci sono bug da qualche parte). Se non ti senti a tuo agio nello sviluppare il codice, non preoccuparti; c'è un sacco di cose da fare.
Puoi aiutare a testare le diverse funzioni e provare a romperle. Io, come persona, posso solo andare così lontano e la maggior parte delle volte provo il flusso felice dei miei programmi. Probabilmente esegui il test in un modo diverso e ottieni altri risultati a cui non avrei mai pensato. Ciò contribuirà a migliorare il modulo.
Puoi anche aiutare a pensare a nuove funzionalità da aggiungere alla soluzione attuale. Potresti avere un'ottima idea per nuove funzionalità a cui non avrei potuto pensare da solo.
Se hai un'idea per una nuova funzionalità o hai trovato un bug, vai alla pagina di github e crea una richiesta di funzionalità o una segnalazione di bug. È molto apprezzato.
Informazioni
Sito web:https://psdatabaseclone.org
Github:https://github.com/sanderstad/PSDatabaseClone
Informazioni sull'autore
Sander lavora con SQL Server dalla versione 2000.Ha lavorato in diversi settori , da agricoltura, industrie finanziarie e assistenza sanitaria.
Lavora con PowerShell dalla versione 1 e sta abbracciando l'automazione dove può.