Questo tutorial mostra due modi per clonare un database Microsoft SQL Server in esecuzione su Compute Engine. Un metodo utilizza snapshot del disco permanente. L'altro metodo utilizza il backup e il ripristino nativi di SQL Server per trasferire il backup utilizzando Cloud Storage. Cloud Storage è il servizio di archiviazione di oggetti di Google Cloud. Offre un modo semplice, duraturo, ad alta affidabilità e con sicurezza avanzata per archiviare i file.
La clonazione è il processo tramite cui un database online viene copiato su un altro server. La copia è indipendente dal database esistente e viene conservata come snapshot point-in-time. Puoi utilizzare un database clonato per vari scopi senza aggiungere un carico al server di produzione o rischiare l'integrità dei dati di produzione. Alcuni di questi scopi includono:
- Esecuzione di query di analisi
- Test di carico o di integrazione delle tue app
- Estrazione dei dati per il popolamento dei data warehouse
- Esecuzione di esperimenti sui dati
Ogni metodo di clonazione descritto in questo tutorial presenta vantaggi e svantaggi. Il metodo ideale per te dipende dalla situazione. La tabella seguente evidenzia alcuni problemi chiave.
Problema | Metodo 1: snapshot del disco | Metodo 2: backup e ripristino tramite Cloud Storage |
---|---|---|
Spazio su disco aggiuntivo richiesto sulle istanze SQL Server | Nessuno spazio su disco aggiuntivo richiesto | Spazio aggiuntivo richiesto per archiviare il file di backup durante la creazione e il ripristino |
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 lenta per database di grandi dimensioni |
Supporta la clonazione da istanze SQL Server esterne aGoogle Cloud | No | Sì |
Complessità | Una sequenza complessa di comandi per il collegamento dei 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 snapshot del disco di Google Cloud | Sì, se il sistema di backup scrive file di backup nativi di SQL Server in 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 sistemi Microsoft Windows, PowerShell e Microsoft SQL Server utilizzando SQL Server Management Studio di Microsoft.
Configurazione dell'ambiente
Per completare questo tutorial, devi configurare il tuo ambiente di computing con quanto segue:
- Un'istanza SQL Server su Compute Engine (denominata
sql-server-prod
) per rappresentare il server del 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 SQL Server Wide World Importers 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. Clonerai 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 di 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 lo spazio di 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.
Console
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, modifica Tipo di macchina in n1-standard-2 (2 vCPU).
Accanto alla descrizione 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:
- Tipo di disco di avvio è impostato su Disco permanente standard.
- Dimensioni (GB) è impostato 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 Dimensioni (GB), digita
100
.Fai clic su Fine.
Fai clic su Crea.
Cloud Shell
Apri Cloud Shell.
Inizializza le seguenti variabili:
VPC_NAME=
VPC_NAME
SUBNET_NAME=SUBNET_NAME
Dove:
VPC_NAME
: il nome del tuo VPCSUBNET_NAME
: il nome della tua 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 Google Cloud , crea un disco secondario da 100 GB e lo collega all'istanza. Ignora l'avviso relativo alle prestazioni del disco perché non hai bisogno di prestazioni elevate per questo tutorial.
Connettiti all'istanza VM
Nella console Google Cloud , vai alla pagina Istanze VM.
Attendi circa 5 minuti affinché l'istanza VM sia pronta.
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.Nella sezione Accesso remoto, fai clic su Imposta password di Windows e poi su Imposta per creare il tuo account sul computer remoto.
Questo passaggio genera una password per te. 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ù, vedi Client 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 all'archiviazione 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 Start (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 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:
- Crea una struttura di directory sull'unità D (
data
) per archiviare il database. - Scarica il file di backup completo del database di esempio Wide World Importers SQL Server. 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 Start (Avvio) nella barra delle app di Windows, digita
PowerShell
e poi seleziona l'app Windows PowerShell.Al prompt di PowerShell, crea una struttura di directory per l'archiviazione del database:
mkdir D:\sql-server-data\wideworldimporters
Scarica il file di backup sull'unità 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 nell'unità D (data
), in modo interattivo utilizzando le procedure guidate di Microsoft SQL Server Management Studio (SSMS) o direttamente eseguendo un comando Transact-SQL.
Procedura guidata SSMS
- Nella sessione RDP, fai clic sul pulsante Start nella 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 di Windows. - In Esplora oggetti, fai clic con il tasto destro del mouse su Database e seleziona Ripristina database.
- In Origine, seleziona Dispositivo, quindi 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, quindi fai clic su Aggiungi.
- Nel selettore di file, vai a
D:\sql-server-data
, fai clic sul fileWideWorldImporters-Full.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 contiene i dati relativi al backup del database Wide World Importers.
Nella sezione Seleziona una pagina, fai clic su File.
Seleziona la casella di controllo Sposta tutti i file nella cartella.
Nei campi Cartella file di dati e Cartella file di log, inserisci
D:\sql-server-data\wideworldimporters
.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.
Transact-SQL
- Nella sessione RDP, fai clic sul pulsante Start nella 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 di Windows. - Seleziona File > Nuovo > Query con connessione attuale 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 fai clic su Esegui.
Attendi un paio di minuti per il completamento del ripristino del database. Puoi fare clic su Aggiorna refresh in Esplora oggetti per vedere se il database è elencato nell'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 attuale 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 consegnate 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 creerai 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 creerai un secondo disco dati, ma lo collegherai più avanti nel tutorial.
Console
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 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:
- Tipo di disco di avvio è impostato su Disco permanente standard.
- Dimensioni (GB) è impostato 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.
Cloud Shell
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 affinché l'istanza VM sia pronta.
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.Nella sezione Accesso remoto, fai clic su Imposta password di Windows e poi su Imposta per creare il tuo account sul computer remoto.
Questo passaggio genera una password per te. 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ù, vedi Client Microsoft Remote Desktop.
Quando richiesto, inserisci la password appena generata e poi 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 possa essere rilevato, fai clic su No.
Clonazione del database utilizzando gli snapshot del disco di Compute Engine
Un modo per clonare un database SQL Server in esecuzione su Compute Engine è archiviare il database su un disco dati separato e utilizzare gli snapshot del disco permanente per creare un clone del disco.
Gli snapshot del disco permanente ti consentono di ottenere una copia point-in-time dei dati sul disco. Pianificare la creazione di snapshot del disco può essere un modo per eseguire automaticamente il backup dei dati.
In questa sezione del tutorial, eseguirai questi passaggi:
- Acquisirai uno snapshot del disco dati del server di produzione.
- Creerai un nuovo disco dallo snapshot.
- Monterai il nuovo disco sul server di test.
- Collega il database su questo disco a SQL Server sull'istanza di test.
Il seguente diagramma mostra come viene clonato un database utilizzando gli snapshot del disco.
Crea lo snapshot del disco
Console
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 allo snapshot il nome
sql-server-prod-data-snapshot
.Per Località, seleziona A livello di regione.
Verifica che la regione sia impostata su
us-east1
(la stessa delle tue istanze VM).Seleziona l'opzione Enable VSS (Attiva VSS).
Questa opzione utilizza il servizio Copia Shadow del volume in Microsoft Windows per creare uno snapshot coerente.
Fai clic su Crea.
Dopo alcuni minuti, lo snapshot viene creato.
Cloud Shell
Apri Cloud Shell.
Crea uno snapshot del disco 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
.
Console
Nei passaggi successivi, crea un nuovo disco permanente, utilizza lo snapshot del disco di produzione per i contenuti e poi collega 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 al nuovo disco il nome
sql-server-test-data
.Per Tipo di origine, seleziona Snapshot.
Per l'istanza
sql-server-prod-data-snapshot
che hai creato, seleziona Snapshot di origine.Assicurati che la Modalità sia impostata su Lettura/Scrittura.
Fai clic su Fine.
Cloud Shell
Apri Cloud Shell.
Crea un nuovo disco permanente utilizzando lo snapshot del disco di produzione per i 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 in lettura/scrittura:gcloud compute instances attach-disk sql-server-test \ --disk=sql-server-test-data --mode=rw
Monta il nuovo disco dati in Windows
Il disco che hai creato è collegato all'istanza VM, ma è offline e il volume è impostato su sola lettura. Per configurare il volume come leggibile/scrivibile e montabile, segui questi passaggi:
- Nella finestra del client RDP connessa all'istanza
sql-server-test
, fai clic sul pulsante Start (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 dati:
select disk 1
Metti online il disco:
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. È elencata come Nascosta 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 montabile il volume.
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 dati scattando uno snapshot dell'istanza sql-server-prod
, gli ID utente per la proprietà e le autorizzazioni dei file sono diversi da quelli dell'istanza sql-server-test
. Devi trasferire la proprietà dei file 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 connessa all'istanza
sql-server-test
, fai clic sul pulsante Start (Avvio) nella barra delle app di Windows, quindi digitacmd
. - Apri l'app Prompt dei comandi come amministratore.
Imposta il proprietario dei file nella cartella
sql-server-data
sull'utente del servizioMSSQLSERVER
:icacls d:\sql-server-data /setowner "nt service\mssqlserver" /t
Reimposta 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 sull'istanza sql-server-test
ora possono accedere ai file di database.
Allega il database clonato
Ora collega il database clonato sull'unità 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 oppure direttamente eseguendo un comando Transact-SQL.
Procedura guidata SSMS
- Nella sessione RDP connessa all'istanza
sql-server-test
, fai clic sul pulsante Start nella 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 di 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 allegare il database.
Dopo qualche istante, il database clonato viene allegato. Puoi fare clic su Aggiorna refresh in Esplora oggetti per vedere se il database è elencato nell'albero Database.
Transact-SQL
- In una sessione RDP connessa all'istanza
sql-server-test
, fai clic sul pulsante Start nella 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 di Windows. - Seleziona File > Nuovo > Query con connessione attuale per aprire una nuova finestra di query.
Allega i file di dati e di 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 fai clic su Esegui.
Dopo qualche istante, il database clonato viene allegato. Puoi fare clic su Aggiorna refresh in Esplora oggetti per vedere se il tuo database è elencato nell'albero Database. Dopo aver allegato il database, puoi chiudere la finestra della 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 attuale 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 consegnate 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 del disco permanente, potresti provare a clonare un database utilizzando il backup e il ripristino. Per completare il tutorial per questo secondo approccio, devi eliminare il database clonato dall'istanza sql-server-test
.
Elimina il database clonato
Per eliminare il database clonato creato utilizzando gli snapshot del disco, segui i seguenti passaggi.
Procedura guidata SSMS
- 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 poi seleziona Elimina. - Nella procedura guidata Elimina oggetto, assicurati che la casella di controllo Chiudi connessioni esistenti sia selezionata.
- Fai clic su OK.
Transact-SQL
- 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 fai clic su Esegui:USE [master] GO ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO DROP DATABASE [WideWorldImporters] GO
Dopo l'eliminazione del database, puoi chiudere la finestra della query senza salvare. Puoi fare clic su Aggiorna refresh in Esplora oggetti per verificare che il database sia 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 nativi di SQL Server. 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 del disco di Compute Engine di questo tutorial. Se non hai completato la sezione, devi farlo prima di continuare.
In questa sezione del tutorial, eseguirai questi passaggi:
- 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 tramite Cloud Storage.
Poiché è possibile concedere l'accesso a Cloud Storage ai sistemi esterni a Google Cloud , 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
.
Console
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 progetto Google Cloud.
Espandi Scegli una classe di archiviazione predefinita, quindi seleziona Regionale.
Per Località, seleziona us-east1.
Fai clic su Crea.
Cloud Shell
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 point-in-time completo del database
Nel tuo ambiente di produzione, potresti già eseguire i backup. Puoi utilizzare questi backup come base per clonare il database. In questo tutorial, creerai un backup di sola copia in modo che non influisca sulle pianificazioni dei backup completi o incrementali esistenti.
Procedura guidata SSMS
- 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à > Esegui il backup. - Nella procedura guidata Backup di database, assicurati che siano impostati i seguenti valori:
- Tipo di backup è impostato su Completo.
- È selezionato Backup di sola copia.
- Esegui il backup su è impostato 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 media, quindi seleziona Sovrascrivi tutti i set di backup esistenti.
Seleziona la pagina Opzioni di backup e poi imposta Imposta compressione backup su Comprimi backup.
Per creare il backup, fai clic su Ok.
La creazione del backup richiede alcuni minuti.
Transact-SQL
- 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 il seguente script in una nuova finestra di query, fai clic con il tasto destro del mouse sul codice e poi 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. Una volta completato il 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 di 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
Ora l'istanza di test ha il backup di copia completa del database sul disco locale.
Ripristinare il backup
Ora puoi ripristinare il backup della copia completa sull'unità D (data
) dell'istanza sql-server-test
.
Procedura guidata SSMS
- 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 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, poi fai clic su Aggiungi.
- Nel selettore di file, vai a
D:\sql-server-data
, fai clic sul fileWideWorldImporters-copy.bak
, quindi fai clic su Ok. Fai clic su Ok per chiudere la finestra di dialogo Seleziona dispositivi di backup.
La finestra di dialogo Ripristina database ora contiene i dati relativi al backup del database
WideWorldImporters
.Nella sezione Seleziona una pagina, fai clic su File.
Seleziona Sposta 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
.
Transact-SQL
- 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 attuale 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 vedere se il database è elencato nell'albero Database. Una volta completato il 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 attuale 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 consegnate 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, riutilizzi il backup che hai 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 l'utente root
sqlserver
con una passwordsqlserver12@
.
Aggiorna le autorizzazioni degli oggetti
Devi impostare le autorizzazioni corrette sia sul bucket Cloud Storage sia sull'oggetto di backup in modo che il account di servizio Cloud SQL possa leggerli.
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 del service account della tua istanza Cloud SQL:
CLOUDSQL_SA="$(gcloud sql instances describe sqlserver-cloudsql --format='get(serviceAccountEmailAddress)')"
Aggiungi il service account alla policy IAM del bucket come reader e writer:
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 di strumenti SQL Server:
sudo apt install -y mssql-tools
Se accetti i termini della licenza, inserisci
yes
quando richiesto.Utilizzi 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
del server di databasesqlserver-cloudsql
(sqlserver12@
).Questa query recupera le informazioni di riepilogo delle 100 fatture consegnate 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 ...