Questo tutorial mostra due modi per clonare un database Microsoft SQL Server in esecuzione su Compute Engine. Un metodo utilizza snapshot dei dischi permanenti. L'altro metodo utilizza il backup e il ripristino nativi di SQL Server, trasferendo il backup utilizzando Cloud Storage. Cloud Storage è il servizio di archiviazione di oggetti di Google Cloud. Offre un modo semplice, sicuro, duraturo e ad alta disponibilità per archiviare i file.
La clonazione è il processo di copia di un database online su un altro server. La copia è indipendente dal database esistente e viene conservata come snapshot in un determinato momento. Puoi utilizzare un database clonato per vari scopi senza caricare il server di produzione o rischiare l'integrità dei dati di produzione. Ecco alcune di queste finalità:
- Eseguire query di analisi
- Test di carico o di integrazione delle app
- Estrazione dei dati per compilare i data warehouse
- Eseguire esperimenti sui dati
Ogni metodo di clonazione descritto in questo tutorial presenta vantaggi e svantaggi. Il metodo ideale per te dipende dalla tua situazione. La tabella seguente evidenzia alcuni problemi chiave.
Problema | Metodo 1: snapshot dei dischi | Metodo 2: backup e ripristino utilizzando Cloud Storage |
---|---|---|
Spazio su disco aggiuntivo richiesto sulle istanze SQL Server | Non è richiesto spazio su disco aggiuntivo | Spazio aggiuntivo necessario per l'archiviazione del file di backup durante la creazione e il recupero |
Carico aggiuntivo sulle istanze SQL Server di origine durante la clonazione | Nessun carico aggiuntivo | Carico aggiuntivo su CPU e I/O durante la creazione e il caricamento dei file di backup |
Durata della clonazione | Relativamente veloce per database di grandi dimensioni | Relativamente lento per database di grandi dimensioni |
Può eseguire la clonazione da istanze SQL Server esterne a Google Cloud | No | Sì |
complessità | Una sequenza complessa di comandi per il collegamento di dischi clonati | Un insieme di comandi relativamente semplici per la clonazione |
Può sfruttare i sistemi di backup esistenti | Sì, se il sistema di backup utilizza gli snapshot del disco Google Cloud | Sì, se il sistema di backup scrive i file di backup nativi di SQL Server su Cloud Storage |
Granularità della clonazione | Può clonare solo interi dischi | Può clonare solo il database specificato |
Coerenza dei dati | Coerenti al momento dello snapshot | Coerenti al momento del backup |
Questo tutorial presuppone che tu abbia familiarità con l'amministrazione di sistema di Microsoft Windows, PowerShell e Microsoft SQL Server utilizzando SQL Server Management Studio di Microsoft.
Obiettivi
- Scopri come eseguire un'istanza SQL Server su Google Cloud.
- Scopri come creare un database di prova su un disco secondario.
- Scopri come clonare un database SQL Server utilizzando gli snapshot dei dischi Compute Engine.
- Scopri come clonare un database SQL Server trasferendo un backup utilizzando Cloud Storage.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cloud Storage
- Microsoft Windows and SQL server licenses
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Abilita l'API Compute Engine. Abilita l'API
Assicurati di soddisfare questi prerequisiti aggiuntivi:
- Utilizzi il browser Google Chrome.
- Installa un client Remote Desktop Protocol (RDP) a tua scelta. Per saperne di più, consulta Client di Microsoft Remote Desktop. Se hai già installato un client RDP, puoi saltare questa attività.
Configurazione dell'ambiente
Per completare questo tutorial, devi configurare il tuo ambiente di calcolo con quanto segue:
- Un'istanza SQL Server su Compute Engine (denominata
sql-server-prod
) per rappresentare il server di database di produzione. - Un disco aggiuntivo (denominato
sql-server-prod-data
) collegato al server di produzione per l'archiviazione del database di produzione. - Una copia del database di esempio Wide World Importers SQL Server per simulare il database di produzione che vuoi clonare.
- Un'istanza SQL Server su Compute Engine denominata
sql-server-test
per rappresentare il server del database di test. Clona il database su questo server.
Il seguente diagramma illustra questa architettura.
Crea l'istanza VM di produzione
Per simulare un ambiente di produzione, configura un'istanza VM Compute Engine che esegue SQL Server su Windows Server.
L'istanza VM per questo tutorial utilizza due dischi: uno da 50 GB per il sistema operativo e gli account utente e uno da 100 GB per l'archiviazione del database.
In Compute Engine, l'utilizzo di dischi separati non offre vantaggi in termini di prestazioni. Le prestazioni del disco sono determinate dalla capacità di archiviazione totale di tutti i dischi collegati a un'istanza e dal numero totale di vCPU nell'istanza VM. Pertanto, il database e il file di log possono trovarsi sullo stesso disco.
Nella console Google Cloud, vai alla pagina Istanze VM.
Fai clic su Crea.
Nel campo Nome, digita
sql-server-prod
.In Regione, seleziona us-east1.
In Zona, seleziona us-east1-b.
In Configurazione macchina, imposta Tipo di macchina su n1-standard-2 (2 vCPU).
Accanto alla descrizione del disco di avvio, fai clic su Cambia.
Nel riquadro Disco di avvio, fai clic sulla scheda Immagini pubbliche.
Nell'elenco a discesa Sistema operativo, seleziona SQL Server su Windows Server.
Nell'elenco a discesa Versione, seleziona SQL Server 2022 Standard su Windows Server 2022 Datacenter.
Assicurati che siano impostati i seguenti valori:
- L'opzione Tipo di disco di avvio è impostata su Disco permanente standard.
- L'opzione Dimensioni (GB) sia impostata su 50.
Fai clic su Seleziona.
In Identità e accesso API, imposta Ambiti di accesso su Consenti l'accesso completo a tutte le API Cloud.
Espandi Gestione, sicurezza, dischi, networking, single-tenancy.
Fai clic sulla scheda Dischi.
Fai clic su Aggiungi nuovo disco add.
Nel campo Nome, digita
sql-server-prod-data
.Nel campo Dimensione (GB), digita
100
.Fai clic su Fine.
Fai clic su Crea.
Apri Cloud Shell.
Inizializza le seguenti variabili:
VPC_NAME=
SUBNET_NAME=VPC_NAME SUBNET_NAME Dove:
VPC_NAME
: il nome della tua VPCSUBNET_NAME
: il nome della subnet
Imposta l'ID progetto predefinito:
gcloud config set project
PROJECT_ID Sostituisci
PROJECT_ID
con l'ID del tuo progetto Google Cloud.Imposta la regione predefinita:
gcloud config set compute/region
REGION Sostituisci
REGION
con l'ID della regione in cui vuoi eseguire il deployment.Imposta la zona predefinita:
gcloud config set compute/zone
ZONE Sostituisci
ZONE
con l'ID della zona in cui vuoi eseguire il deployment.Crea un'istanza Compute Engine utilizzando l'immagine dell'app per SQL Server 2022 Standard su Windows Server 2022 Datacenter:
REGION=$(gcloud config get-value compute/region) ZONE=$(gcloud config get-value compute/zone) gcloud compute instances create sql-server-prod \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --image-family=sql-std-2022-win-2022 \ --image-project=windows-sql-cloud \ --boot-disk-size=50GB \ --boot-disk-device-name=sql-server-prod \ --create-disk="mode=rw,size=100,type=pd-standard,name=sql-server-prod-data,device-name=sql-server-prod-data" \ --subnet=$SUBNET_NAME
Questo comando concede all'istanza l'accesso completo alle API, crea un disco secondario da 100 GB e lo collega all'istanza. Google Cloud Ignora l'avviso relativo alle prestazioni del disco perché per questo tutorial non sono necessarie prestazioni elevate.
Connettiti all'istanza VM
Nella console Google Cloud, vai alla pagina Istanze VM.
Attendi circa 5 minuti per la preparazione dell'istanza VM.
Per monitorare il processo di inizializzazione della VM, visualizza l'output della porta seriale in Cloud Shell:
gcloud compute instances tail-serial-port-output sql-server-prod
Quando viene visualizzato il seguente messaggio, l'inizializzazione è completata.
Instance setup finished. sql-server-prod is ready to use.
Premi Ctrl+C per interrompere il monitoraggio della porta seriale.
Fai clic sul nome dell'istanza
sql-server-prod
per aprire la pagina Dettagli istanza VM.In Accesso remoto, fai clic su Imposta password di Windows e poi su Imposta per creare il tuo account sulla macchina remota.
In questo passaggio viene generata una password. Prendi nota della password o copiala in un file temporaneo sicuro.
Nella sezione Compute Engine della console Google Cloud, fai clic sul menu a discesa RDP e seleziona l'opzione Scarica il file RDP per scaricare il file RDP per l'istanza.
Utilizza questo file per connetterti all'istanza utilizzando un client RDP. Per saperne di più, consulta Client di Microsoft Remote Desktop.
Quando richiesto, inserisci la password appena generata e fai clic su OK.
Per accettare il certificato del server e accedere all'istanza Windows remota, fai clic su Continua.
Quando ti viene chiesto se vuoi che il computer possa essere rilevato da altri PC e dispositivi della rete, fai clic su No.
Configura il disco aggiuntivo
Il secondo disco collegato all'istanza di produzione è destinato allo stoccaggio del database di produzione. Questo disco è vuoto, quindi devi partizionarlo, formattarlo e montarlo.
- In una sessione RDP connessa all'istanza
sql-server-prod
, fai clic sul pulsante Avvia nella barra delle app di Windows, digitadiskpart
e poi fai clic su diskpart per aprire DiskPart. - Quando ti viene chiesto di consentire all'app di apportare modifiche, fai clic su Sì.
Visualizza un elenco dei dischi collegati all'istanza:
list disk
L'output è il seguente:
Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 50 GB 0 B Disk 1 Online 100 GB 100 GB
Il disco 1 (100 GB) è il disco dati.
Seleziona il disco di dati:
select disk 1
Inizializza il disco:
clean
Crea una tabella di partizione GUID:
convert gpt
Crea la partizione dei dati utilizzando l'intero disco:
create partition primary
Elenca i volumi disponibili:
list volume
L'output è il seguente:
Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ----- ---------- ------- --------- -------- Volume 0 C NTFS Partition 49 GB Healthy Boot Volume 1 FAT32 Partition 100 MB Healthy System Volume 2 RAW Partition 99 GB Healthy
Il volume 2 (99 GB) è il disco dati.
Seleziona il volume:
select volume 2
Formatta la partizione con il file system NTFS e assegnale l'etichetta
data
:format quick fs=ntfs label=data
Monta il disco come unità D:
assign letter=d
Esci da DiskPart:
exit
Scarica il database di esempio
Per configurare l'ambiente per questo esercizio di clonazione, devi svolgere quanto segue:
- Crea una struttura di directory sul disco D (
data
) per archiviare il database. - Scarica il database di esempio Wide World Importers per SQL Server file di backup completo. Questo database simula il database di produzione che vuoi clonare.
Per creare la directory e scaricare il file di backup:
Nella sessione RDP, fai clic sul pulsante Avvio sulla barra delle app di Windows, digita
PowerShell
e seleziona l'app Windows PowerShell.Al prompt di PowerShell, crea una struttura di directory per lo spazio di archiviazione del database:
mkdir D:\sql-server-data\wideworldimporters
Scarica il file di backup sul disco D:
bitsadmin /transfer sampledb /dynamic /download /priority FOREGROUND ` https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak ` D:\sql-server-data\WideWorldImporters-Full.bak
Ripristina il database di esempio
Devi ripristinare il database di esempio sul disco D (data
) in modo interattivo utilizzando le automazioni di Microsoft SQL Server Management Studio (SSMS) o direttamente eseguendo un comando Transact-SQL.
- Nella sessione RDP, fai clic sul pulsante Avvio sulla barra delle app di Windows, digita
ssms
e seleziona Microsoft SQL Server Management Studio (Esegui come amministratore). - Dopo l'avvio dell'app, fai clic su Connetti per connetterti al motore del database
sql-server-prod
utilizzando l'autenticazione Windows. - In Esplora oggetti, fai clic con il tasto destro del mouse su Database e seleziona Ripristina database.
- In Origine, seleziona Dispositivo e poi fai clic sul pulsante [...] accanto al nome del dispositivo.
- Nella finestra di dialogo Seleziona dispositivi di backup, assicurati che File sia selezionato per Tipo di supporto di backup e poi fai clic su Aggiungi.
- Nel selettore dei file, vai a
D:\sql-server-data
, fai clic sulWideWorldImporters-Full.bak
file e poi su OK. Fai clic su OK per chiudere la finestra di dialogo Seleziona dispositivi di backup.
La finestra di dialogo Ripristina database è ora compilata con i dati relativi al backup del database Wide World Importers.
In Seleziona una pagina, fai clic su File.
Seleziona la casella di controllo Ricolloca tutti i file nella cartella.
Inserisci
D:\sql-server-data\wideworldimporters
sia nel campo Cartella file di dati sia nel campo Cartella file di log.Fai clic su OK per avviare l'operazione di ripristino.
Dopo un paio di minuti, riceverai una notifica che ti informa che il database è stato ripristinato.
- Nella sessione RDP, fai clic sul pulsante Avvio sulla barra delle app di Windows, digita
ssms
e seleziona Microsoft SQL Server Management Studio (Esegui come amministratore). - Dopo l'avvio dell'app, fai clic su Connetti per connetterti al motore del database
sql-server-prod
utilizzando l'autenticazione Windows. - Seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query.
Avvia un ripristino dal file di backup che hai scaricato:
USE [master] GO RESTORE DATABASE [WideWorldImporters] FROM DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-Full.bak' WITH FILE = 1, MOVE N'WWI_Primary' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf', MOVE N'WWI_UserData' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf', MOVE N'WWI_Log' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf', MOVE N'WWI_InMemory_Data_1' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1', NOUNLOAD, STATS = 5 GO
Questo comando ripristina il database e il file di log nella directory
D:\sql-server-data\wideworldimporters
.Fai clic con il tasto destro del mouse sul codice della query e poi su Esegui.
Attendi un paio di minuti per il completamento del ripristino del database. Puoi fare clic su Aggiorna refresh in Esplora oggetti per verificare se il database è elencato nella struttura a albero Database. Al termine del ripristino del database, puoi chiudere la finestra della query senza salvare.
Per verificare che il database di esempio sia funzionale, puoi eseguire una query.
In Microsoft SQL Server Management Studio, seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query, quindi copia il seguente codice:
SELECT top(100) i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName, i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy FROM WideWorldImporters.Sales.Invoices i JOIN WideWorldImporters.Sales.Customers c ON i.CustomerID=c.CustomerID WHERE i.ConfirmedDeliveryTime IS NOT NULL ORDER BY i.InvoiceDate desc;
Questa query recupera le informazioni di riepilogo delle 100 fatture inviate più di recente.
Fai clic con il tasto destro del mouse sulla finestra della query e poi su Esegui.
Il riquadro Risultati mostra le informazioni di riepilogo.
Crea l'istanza VM di test
In questa sezione crei un'istanza SQL Server denominata sql-server-test
come destinazione per il database clonato. La configurazione di questa istanza è identica a quella dell'istanza di produzione. Tuttavia, non crei un secondo
disco di dati, ma lo colleghi più avanti in questo tutorial.
Vai alla pagina Istanze VM.
Fai clic su Crea.
Nel campo Nome, digita
sql-server-test
.In Regione, seleziona us-east1.
In Zona, seleziona us-east1-b.
In Configurazione macchina, imposta Tipo di macchina su n1-standard-2 (2 vCPU).
Accanto all'immagine Prenota disco, fai clic su Cambia.
Nel riquadro Disco di avvio, fai clic sulla scheda Immagini pubbliche.
Nell'elenco a discesa Sistema operativo, seleziona SQL Server su Windows Server.
Nell'elenco a discesa Versione, seleziona SQL Server 2022 Standard su Windows Server 2022 Datacenter.
Assicurati che siano impostati i seguenti valori:
- L'opzione Tipo di disco di avvio è impostata su Disco permanente standard.
- L'opzione Dimensioni (GB) sia impostata su 50.
Fai clic su Seleziona.
In Identità e accesso API, imposta Ambiti di accesso su Consenti l'accesso completo a tutte le API Cloud.
Fai clic su Crea.
Apri Cloud Shell.
Crea l'istanza SQL Server di test:
gcloud compute instances create sql-server-test \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --image-family=sql-std-2022-win-2022 \ --image-project=windows-sql-cloud \ --boot-disk-size=50GB \ --boot-disk-device-name=sql-server-test \ --subnet=$SUBNET_NAME
Puoi ignorare l'avviso relativo alle prestazioni del disco perché per questo tutorial non sono necessarie prestazioni elevate.
Connettiti all'istanza VM
Nella console Google Cloud, vai alla pagina Istanze VM.
Attendi circa 5 minuti per la preparazione dell'istanza VM.
Per monitorare il processo di inizializzazione della VM, visualizza l'output della porta seriale in Cloud Shell:
gcloud compute instances tail-serial-port-output sql-server-prod
Quando viene visualizzato il seguente messaggio, l'inizializzazione è completata.
Instance setup finished. sql-server-test is ready to use.
Premi Ctrl+C per interrompere il monitoraggio della porta seriale.
Fai clic sul nome dell'istanza
sql-server-test
per visualizzare la pagina Dettagli istanza VM.In Accesso remoto, fai clic su Imposta password di Windows e poi su Imposta per creare il tuo account sulla macchina remota.
In questo passaggio viene generata una password. Prendi nota della password o copiala in un file temporaneo sicuro.
Nella sezione Compute Engine della console Google Cloud, fai clic sul menu a discesa RDP e seleziona l'opzione Scarica il file RDP per scaricare il file RDP per l'istanza.
Utilizza questo file per connetterti all'istanza utilizzando un client RDP. Per saperne di più, consulta Client di Microsoft Remote Desktop.
Quando richiesto, inserisci la password appena generata, quindi fai clic su OK.
Per accettare il certificato del server e accedere all'istanza Windows remota, fai clic su Continua.
Quando ti viene chiesto se vuoi che il PC sia rilevabile, fai clic su No.
Clonazione del database utilizzando gli snapshot dei dischi di Compute Engine
Un modo per clonare un database SQL Server in esecuzione su Compute Engine è memorizzare il database su un disco di dati separato e utilizzare gli snapshot dei dischi permanenti per creare un clone del disco.
Gli snapshot dei dischi permanenti ti consentono di ottenere una copia point-in-time dei dati sul disco. La pianificazione degli snapshot dei dischi è un modo per eseguire automaticamente il backup dei dati.
In questa sezione del tutorial, esegui le seguenti operazioni:
- Acquisisci uno snapshot del disco di dati del server di produzione.
- Crea un nuovo disco dallo snapshot.
- Monta il nuovo disco sul server di test.
- Collega il database su questo disco a SQL Server nell'istanza di test.
Il seguente diagramma mostra come viene clonato un database utilizzando gli snapshot dei dischi.
Crea lo snapshot del disco
Nella console Google Cloud, vai alla pagina Istanze VM.
Fai clic sul nome dell'istanza
sql-server-prod
.Nella pagina Dettagli istanza VM, fai clic sul disco
sql-server-prod-data
.Fai clic su Crea snapshot.
Assegna un nome allo snapshot
sql-server-prod-data-snapshot
.In Località, seleziona Regionale.
Verifica che la regione sia impostata su
us-east1
(la stessa delle istanze VM).Seleziona l'opzione Attiva VSS.
Questa opzione utilizza il servizio Volume Shadow Copy in Microsoft Windows per creare uno snapshot coerente.
Fai clic su Crea.
Dopo alcuni minuti, lo snapshot viene creato.
Apri Cloud Shell.
Crea uno snapshot del disco di dati nella stessa zona dell'istanza VM:
gcloud compute disks snapshot sql-server-prod-data \ --snapshot-names=sql-server-prod-data-snapshot \ --guest-flush \ --zone="${ZONE}"
L'opzione
--guest-flush
utilizza il servizio Copia Shadow del volume in Microsoft Windows per creare uno snapshot coerente. Dopo alcuni minuti, lo snapshot viene creato.
Collega lo snapshot del disco all'istanza di test
Devi creare un nuovo disco dati dallo snapshot che hai creato e poi collegarlo all'istanza sql-server-test
.
Nei passaggi successivi, crei un nuovo disco permanente, utilizzi lo snapshot del disco di produzione per i relativi contenuti e poi colleghi il disco all'istanza di test.
Nella console Google Cloud, vai alla pagina Istanze VM.
Fai clic sul nome dell'istanza
sql-server-test
.Nella pagina Dettagli istanza VM, fai clic su Modifica.
Fai clic su Aggiungi nuovo disco add.
Assegna il nome
sql-server-test-data
al nuovo disco.In Tipo di origine, seleziona Snapshot.
Per l'istanza
sql-server-prod-data-snapshot
che hai creato, seleziona Snapshot di origine.Assicurati che Modalità sia impostata su Lettura/scrittura.
Fai clic su Fine.
Apri Cloud Shell.
Crea un nuovo disco permanente utilizzando lo snapshot del disco di produzione per i relativi contenuti:
gcloud beta compute disks create sql-server-test-data \ --size=100GB \ --source-snapshot=sql-server-prod-data-snapshot \ --zone="${ZONE}"
Collega il nuovo disco all'istanza
sql-server-test
con autorizzazioni di lettura/scrittura:gcloud compute instances attach-disk sql-server-test \ --disk=sql-server-test-data --mode=rw
Monta il nuovo disco di dati in Windows
Il disco che hai creato è collegato all'istanza VM, ma è offline e il volume è impostato su di sola lettura. Per configurare il volume come leggi/scrivi e montabile, segui questi passaggi:
- Nella finestra del client RDP connessa all'istanza
sql-server-test
, fai clic sul pulsante Avvia nella barra delle app di Windows, digitadiskpart
e poi fai clic su diskpart per aprire DiskPart. - Quando ti viene chiesto di consentire all'app di apportare modifiche, fai clic su Sì.
Visualizza un elenco dei dischi collegati all'istanza:
list disk
L'output è il seguente:
Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 50 GB 0 B Disk 1 Offline 100 GB 0 B *
Il disco dati (disco 1, 100 GB) è offline.
Seleziona il disco di dati:
select disk 1
Connetti il disco alla rete:
online disk
Elenca i volumi disponibili:
list volume
L'output è il seguente:
Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ----- ---------- ------- --------- -------- Volume 0 C NTFS Partition 49 GB Healthy Boot Volume 1 FAT32 Partition 100 MB Healthy System Volume 2 RAW Partition 99 GB Healthy
Il volume 2 (99 GB) è il volume di dati. È elencato come Nascosto senza lettera di unità assegnata.
Seleziona il volume:
select volume 2
Cancella gli attributi impostati quando hai creato il volume dallo snapshot:
attr volume clear readonly hidden nodefaultdriveletter shadowcopy
Questo comando rende il volume montabile.
Monta il volume come unità D:
assign letter=d
Esci da DiskPart:
exit
Reimpostare la proprietà e le autorizzazioni dei file
Poiché hai creato il disco di dati acquisendo uno snapshot nell'istanza sql-server-prod
, gli ID utente per la proprietà e le autorizzazioni dei file sono diversi da quelli nell'istanza sql-server-test
. Devi modificare la proprietà dei file assegnandola a un utente dell'istanza sql-server-test
e aggiornare le autorizzazioni per rendere i file leggibili per l'utente locale e l'utente MSSQLSERVER
.
- Nella finestra del client RDP connesso all'istanza
sql-server-test
, fai clic sul pulsante Avvia nella barra delle app di Windows, quindi digitacmd
. - Apri l'app Prompt dei comandi come amministratore.
Imposta l'utente servizio
MSSQLSERVER
come proprietario dei file nella cartellasql-server-data
:icacls d:\sql-server-data /setowner "nt service\mssqlserver" /t
Ripristina tutte le autorizzazioni per tutti i file nella cartella
sql-server-data
di primo livello:icacls d:\sql-server-data /reset /t
Aggiorna gli elenchi di controllo dell'accesso (ACL) per la cartella
sql-server-data
:icacls d:\sql-server-data /grant Administrators:(oi)(ci)f "nt service\mssqlserver":(oi)(ci)f "owner rights":(oi)(ci)f %USERNAME%:(oi)(ci)f
Disattiva l'ereditarietà dalla cartella principale del drive in modo che vengano applicate solo le autorizzazioni precedenti:
icacls d:\sql-server-data /inheritancelevel:r
Esci dall'app Prompt dei comandi:
exit
L'istanza SQL Server e l'utente locale dell'istanza sql-server-test
ora possono accedere ai file del database.
Collega il database clonato
Ora collega il database clonato sul disco D (data
) all'istanza SQL Server di test. Puoi collegare il database in modo interattivo utilizzando le procedure guidate di Microsoft SQL Server Management Studio o direttamente eseguendo un comando Transact-SQL.
- Nella sessione RDP connessa all'istanza
sql-server-test
, fai clic sul pulsante Avvio sulla barra delle app di Windows, digitassms
e poi seleziona Microsoft SQL Server Management Studio (Esegui come amministratore). - Fai clic su Connetti per connetterti al motore del database
sql-server-test
utilizzando l'autenticazione Windows. - In Esplora oggetti, fai clic con il tasto destro del mouse su Database e seleziona Collega.
- Nella procedura guidata Collega database, fai clic su Aggiungi.
- Vai alla directory
D:\sql-server-data\wideworldimporters
, fai clic sul fileWideWorldImporters.mdf
e poi su OK. Fai clic su OK per collegare il database.
Dopo alcuni istanti, il database clonato viene collegato. Puoi fare clic su Aggiorna refresh in Esplora oggetti per verificare se il database è elencato nella struttura a albero Database.
- In una sessione RDP connessa all'istanza
sql-server-test
, fai clic sul pulsante Avvio sulla barra delle app di Windows, digitassms
e poi seleziona Microsoft SQL Server Management Studio (Esegui come amministratore). - Fai clic su Connetti per connetterti al motore del database
sql-server-prod
utilizzando l'autenticazione Windows. - Seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query.
Allega i file di dati e log nella directory
D:\sql-server-data\wideworldimporters
:USE [master] GO CREATE DATABASE [WideWorldImporters] ON ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.mdf' ), ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.ldf' ), ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters_UserData.ndf' ) FOR ATTACH GO
Fai clic con il tasto destro del mouse sul codice della query e poi su Esegui.
Dopo alcuni istanti, il database clonato viene collegato. Puoi fare clic su Aggiorna refresh in Esplora oggetti per verificare se il tuo database è elencato nella struttura a albero Database. Dopo aver collegato il database, puoi chiudere la finestra di query senza salvare.
Per verificare che il database di esempio sia funzionale, puoi eseguire una query.
In SQL Server Management Studio, seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query, quindi copia il seguente codice:
SELECT top(100) i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName, i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy FROM WideWorldImporters.Sales.Invoices i JOIN WideWorldImporters.Sales.Customers c ON i.CustomerID=c.CustomerID WHERE i.ConfirmedDeliveryTime IS NOT NULL ORDER BY i.InvoiceDate desc;
Questa query recupera le informazioni di riepilogo delle 100 fatture inviate più di recente.
Per eseguire la query, fai clic con il tasto destro del mouse sulla finestra della query e seleziona Esegui.
Il riquadro Risultati mostra le informazioni di riepilogo.
Ora che hai visto come clonare un database utilizzando gli snapshot dei dischi permanenti,
potresti provare a clonare un database utilizzando il backup e il ripristino. Per completare il tutorial per questo secondo approccio, devi eliminare il database che hai clonato dall'istanza sql-server-test
.
Elimina il database clonato
Per eliminare il database clonato creato utilizzando gli snapshot dei dischi, svolgi i seguenti passaggi.
- Nella sessione RDP connessa all'istanza
sql-server-test
, apri Microsoft SQL Server Management Studio e poi connettiti al motore del databasesql-server-test
. - In Esplora oggetti, espandi Database, fai clic con il tasto destro del mouse sul database
WorldWideImporters
e seleziona Elimina. - Nella procedura guidata Elimina oggetto, assicurati che la casella di controllo Chiudi le connessioni esistenti sia selezionata.
- Fai clic su OK.
- Nella sessione RDP connessa all'istanza
sql-server-test
, apri Microsoft SQL Server Management Studio e poi connettiti al motore del databasesql-server-test
. Per chiudere tutte le connessioni al database
WideWorldImporters
ed eliminarlo, copia il seguente script in una nuova finestra di query, fai clic con il tasto destro del mouse sul codice e poi su Esegui:USE [master] GO ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO DROP DATABASE [WideWorldImporters] GO
Dopo aver eliminato il database, puoi chiudere la finestra di query senza salvare. Puoi fare clic su Aggiorna refresh in Object Explorer per confermare che il database è stato eliminato.
Clonazione mediante backup e ripristino
Un secondo metodo per clonare un database SQL Server in esecuzione su Compute Engine è utilizzare il backup e il ripristino di SQL Server nativo. Con questo approccio, trasferisci il backup utilizzando Cloud Storage.
Questa sezione del tutorial utilizza le risorse che hai creato nella sezione Clonazione del database utilizzando gli snapshot dei dischi di Compute Engine di questo tutorial. Se non hai completato questa sezione, devi farlo prima di continuare.
In questa sezione del tutorial, esegui le seguenti operazioni:
- Creare un bucket Cloud Storage.
- Esegui il backup del database sul server di produzione.
- Copia il file di backup dal server di produzione a Cloud Storage.
- Copia il file di backup da Cloud Storage al server di test.
- Ripristina il backup nell'istanza di test.
Il seguente diagramma mostra come viene clonato un database trasferendo un backup utilizzando Cloud Storage.
Poiché ai sistemi esterni Google Cloud puoi concedere l'accesso a Cloud Storage, puoi utilizzare questo approccio per clonare i database dalle istanze SQL Server esterne.
Crea un bucket Cloud Storage
Devi creare un bucket Cloud Storage in cui archiviare i file di backup mentre li trasferisci dall'istanza sql-server-prod
all'istanza sql-server-test
.
Nella console Google Cloud, vai alla pagina Browser in Cloud Storage.
Fai clic su Crea bucket.
Assegna al bucket il nome
project-name
-bucket.Sostituisci quanto segue:
project-name
: l'ID del tuo Google Cloud progetto.
Espandi Scegli una classe di archiviazione predefinita, quindi seleziona Regionale.
In Località, seleziona us-east1.
Fai clic su Crea.
Apri Cloud Shell.
Crea un bucket Cloud Storage nella stessa regione delle tue istanze VM:
gcloud storage buckets create "gs://$(gcloud config get-value project)-bucket" --location="${REGION}"
Esegui un backup completo point-in-time del database
Nel tuo ambiente di produzione potresti già eseguire dei backup. Puoi utilizzare questi backup come base per clonare il database. In questo tutorial viene creato un backup di sola copia in modo che non influisca sulle pianificazioni dei backup completi o incrementali esistenti.
- Nella sessione RDP connessa all'istanza
sql-server-prod
, apri Microsoft SQL Server Management Studio e poi connettiti al motore del databasesql-server-prod
. - In Esplora oggetti, espandi Database, fai clic con il tasto destro del mouse sul database
WorldWideImporters
e seleziona Attività > Backup. - Nella procedura guidata Esegui il backup del database, assicurati che siano impostati i seguenti valori:
- L'elemento Tipo di backup è impostato su Completo.
- L'opzione Backup solo di copia è selezionata.
- L'opzione Esegui il backup su sia impostata su Disco.
- Per aggiungere un file di backup, fai clic su Aggiungi.
Nel campo Destinazione, inserisci
D:\sql-server-data\WideWorldImporters-copy.bak
.Seleziona la pagina Opzioni multimediali, quindi seleziona Sovrascrivi tutti gli set di backup esistenti.
Seleziona la pagina Opzioni di backup e poi modifica Imposta compressione del backup in Comprimi backup.
Per creare il backup, fai clic su OK.
La creazione del backup richiede alcuni minuti.
- Nella sessione RDP connessa all'istanza
sql-server-prod
, apri Microsoft SQL Server Management Studio e poi connettiti al motore del databasesql-server-prod
. Per eseguire un backup compresso di sola copia del
WideWorldImporters
databasenel file
d:\sql-server-data\WideWorldImporters-copy.bak
, copia lo script seguente in una nuova finestra di query, fai clic con il tasto destro del mouse sul codice, quindi fai clic su Esegui.BACKUP DATABASE [WideWorldImporters] TO DISK = N'd:\sql-server-data\WideWorldImporters-copy.bak' WITH COPY_ONLY, NOFORMAT, INIT, NAME = N'WideWorldImporters-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10 GO
Attendi qualche minuto per consentire al server di creare il backup. Al termine del backup del database, puoi chiudere la finestra della query senza salvare.
Copia il file di backup in Cloud Storage
- Nella sessione RDP connessa all'istanza
sql-server-prod
, apri una finestra di Windows PowerShell. Copia il file di backup nel bucket Cloud Storage che hai creato in precedenza:
gcloud storage cp d:\sql-server-data\WideWorldImporters-copy.bak "gs://$(gcloud config get-value project)-bucket/" --no-clobber
Esci da PowerShell.
exit
Copia il file di backup da Cloud Storage a sql-server-test
- Nella sessione RDP connessa all'istanza
sql-server-test
, apri una finestra Windows PowerShell. Copia il file di backup nel bucket Cloud Storage che hai creato in precedenza:
gcloud storage cp "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" d:\sql-server-data\
Esci da PowerShell.
exit
L'istanza di test ora ha il backup completo del database sul suo disco locale.
Ripristina il backup
Ora puoi ripristinare il backup con copia completa sul disco D (data
) dell'istanza sql-server-test
.
- Nella sessione RDP connessa all'istanza
sql-server-test
, apri Microsoft SQL Server Management Studio e poi connettiti al motore del databasesql-server-test
. - In Esplora oggetti, fai clic con il tasto destro del mouse su Database e seleziona Ripristina database.
- Per Origine, seleziona il Dispositivo e poi fai clic sul pulsante [...] accanto al nome del dispositivo.
- Nella finestra di dialogo Seleziona dispositivi di backup, seleziona File nell'elenco Tipo di supporto di backup e poi fai clic su Aggiungi.
- Nel selettore dei file, vai a
D:\sql-server-data
, fai clic sul fileWideWorldImporters-copy.bak
e poi su OK. Fai clic su OK per chiudere la finestra di dialogo Seleziona dispositivi di backup.
La finestra di dialogo Ripristina database è ora compilata con i dati relativi al backup del database
WideWorldImporters
.In Seleziona una pagina, fai clic su File.
Seleziona Ricolloca tutti i file nella cartella.
Nei campi Cartella file di dati e Cartella file di log, inserisci
D:\sql-server-data\wideworldimporters
.Per avviare l'operazione di ripristino, fai clic su OK.
Al termine della procedura, viene visualizzato il messaggio
Database 'WideWorldImporters' restored successfully
.
- Nella sessione RDP connessa all'istanza
sql-server-test
, apri Microsoft SQL Server Management Studio e poi connettiti al motore del databasesql-server-test
. - Seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query.
Copia il seguente comando T-SQL per avviare un ripristino dal file di backup che hai copiato da Cloud Storage, ripristinando il database e il file di log nella directory
D:\sql-server-data\wideworldimporters
:USE [master] GO RESTORE DATABASE [WideWorldImporters] FROM DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-copy.bak' WITH FILE = 1, MOVE N'WWI_Primary' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf', MOVE N'WWI_UserData' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf', MOVE N'WWI_Log' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf', MOVE N'WWI_InMemory_Data_1' TO N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1', NOUNLOAD, STATS = 5 GO
Fai clic con il tasto destro del mouse sul codice e poi su Esegui.
Dopo un paio di minuti, il ripristino del database viene completato. Puoi fare clic su Aggiorna refresh in Esplora oggetti per verificare se il database è elencato nella struttura a albero Database. Al termine del ripristino del database, puoi chiudere la finestra della query senza salvare.
Per dimostrare che il database è funzionale, puoi eseguire una query.
In Microsoft SQL Management Studio, seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query, quindi copia il seguente codice:
SELECT top(100) i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName, i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy FROM WideWorldImporters.Sales.Invoices i JOIN WideWorldImporters.Sales.Customers c ON i.CustomerID=c.CustomerID WHERE i.ConfirmedDeliveryTime IS NOT NULL ORDER BY i.InvoiceDate desc;
Questa query recupera le informazioni di riepilogo delle 100 fatture inviate più di recente.
Fai clic con il tasto destro del mouse sulla finestra della query e poi su Esegui.
Il riquadro Risultati mostra le informazioni di riepilogo.
Utilizzo di Cloud SQL come destinazione della clonazione
Se il database di destinazione è ospitato su Cloud SQL e il database di origine è su Compute Engine, l'unico meccanismo supportato per la clonazione è eseguire il backup del database in Cloud Storage e poi ripristinarlo in Cloud SQL.
Per questo tutorial, riutilizza il backup creato nella sezione precedente.
Crea un'istanza Cloud SQL per SQL Server
Apri Cloud Shell.
Crea un'istanza Cloud SQL per SQL Server che esegue la stessa versione del database dell'istanza
sql-server-prod
:gcloud sql instances create sqlserver-cloudsql \ --database-version=SQLSERVER_2022_STANDARD \ --cpu=2 \ --memory=5GB \ --root-password=sqlserver12@ \ --region=${REGION}
Viene creata un'istanza con utente root
sqlserver
e passwordsqlserver12@
.
Aggiorna le autorizzazioni degli oggetti
Le autorizzazioni corrette devono essere impostate sia sul bucket Cloud Storage sia sull'oggetto di backup in modo che l'account di servizio Cloud SQL possa leggerle.
Queste autorizzazioni vengono impostate automaticamente quando utilizzi la console Google Cloud per importare l'oggetto oppure puoi impostarle utilizzando i comandi gcloud
.
Apri Cloud Shell.
Imposta una variabile di ambiente contenente l'indirizzo dell'account di servizio della tua istanza Cloud SQL:
CLOUDSQL_SA="$(gcloud sql instances describe sqlserver-cloudsql --format='get(serviceAccountEmailAddress)')"
Aggiungi l'account di servizio alla policy IAM del bucket come lettore e scrittore:
gcloud storage buckets add-iam-policy-binding "gs://$(gcloud config get-value project)-bucket/" \ --member=user:"${CLOUDSQL_SA}" --role=roles/storage.objectUser
Importa il database esportato
Apri Cloud Shell.
Importa il file esportato nell'istanza Cloud SQL:
gcloud sql import bak sqlserver-cloudsql \ "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" \ --database WideWorldImporters
Quando richiesto, inserisci
y
.Installa il pacchetto degli strumenti SQL Server:
sudo apt install -y mssql-tools
Se accetti i termini della licenza, inserisci
yes
quando richiesto.Utilizza questi strumenti per connetterti a Cloud SQL da Cloud Shell in modo da poter eseguire query sull'istanza Cloud SQL.
Connetti il proxy Cloud SQL all'istanza SQL Server:
CONNECTION_NAME=$(gcloud sql instances describe sqlserver-cloudsql --format='value(connectionName)') cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
Per verificare che il database clonato sia funzionale, esegui una query:
/opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q \ 'SELECT top(100) i.InvoiceDate, i.InvoiceID, i.CustomerID, LEFT(c.CustomerName,20) CustomerName, i.ConfirmedDeliveryTime, LEFT(i.ConfirmedReceivedBy,20) ConfirmedReceivedBy FROM WideWorldImporters.Sales.Invoices i JOIN WideWorldImporters.Sales.Customers c ON i.CustomerID=c.CustomerID WHERE i.ConfirmedDeliveryTime IS NOT NULL ORDER BY i.InvoiceDate desc;'
Quando richiesto, inserisci la password dell'utente
sqlserver
delsqlserver-cloudsql
server di database (sqlserver12@
).Questa query recupera le informazioni di riepilogo delle 100 fatture inviate più di recente.
L'output è il seguente:
InvoiceDate InvoiceID CustomerID CustomerName ConfirmedDeliveryTime ConfirmedReceivedBy ---------------- ----------- ----------- -------------------- -------------------------------------- -------------------- 2016-05-30 70349 581 Wingtip Toys (Munich 2016-05-31 07:05:00.0000000 Youssef Eriksson 2016-05-30 70350 123 Tailspin Toys (Roe P 2016-05-31 07:10:00.0000000 Ella Zvirbule 2016-05-30 70351 175 Tailspin Toys (San A 2016-05-31 07:15:00.0000000 Julio Correa 2016-05-30 70352 1029 Veronika Necesana 2016-05-31 07:20:00.0000000 Veronika Necesana 2016-05-30 70353 1014 Narendra Tickoo 2016-05-31 07:25:00.0000000 Narendra Tickoo 2016-05-30 70354 930 Shantanu Huq 2016-05-31 07:30:00.0000000 Shantanu Huq 2016-05-30 70355 963 Be Trang 2016-05-31 07:35:00.0000000 Be Trang 2016-05-30 70356 567 Wingtip Toys (Jerome 2016-05-31 07:40:00.0000000 Severins Polis 2016-05-30 70357 510 Wingtip Toys (Grabil 2016-05-31 07:45:00.0000000 Manish Ghosh ...
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, puoi eliminare il Google Cloud progetto che hai creato per questo tutorial.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Passaggi successivi
- Scopri le best practice per l'esecuzione di istanze SQL Server su Compute Engine.
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.