Migrazione dei dati tra SQL Server 2017 e Cloud SQL per SQL Server utilizzando file di backup


In questo tutorial, eseguirai la migrazione dei dati da SQL Server 2017 Enterprise in esecuzione su Compute Engine a Cloud SQL per SQL Server 2017 Enterprise. Il tutorial mostra come esportare i dati da SQL Server 2017, importarli in Cloud SQL per SQL Server 2017 e verificare la corretta importazione dei dati.

Se vuoi eseguire la migrazione dei dati da SQL Server 2008, consulta Migrazione dei dati tra SQL Server 2008 e Cloud SQL per SQL Server utilizzando file di backup.

Questo tutorial è utile se sei un amministratore di sistema, uno sviluppatore, un ingegnere, un amministratore di database o un ingegnere DevOps che vuole eseguire la migrazione dei dati da SQL Server 2017 a Cloud SQL per SQL Server.

Il tutorial presuppone che tu conosca le seguenti nozioni:

Obiettivi

  • Crea un'istanza di macchina virtuale (VM) SQL Server su Compute Engine per ospitare il database di esempio.
  • Creare un'istanza di Cloud SQL per SQL Server.
  • Creare un bucket Cloud Storage.
  • Esegui il backup del database di esempio.
  • Importa il database in Cloud SQL per SQL Server.
  • Convalida i dati importati.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Cloud Storage, Cloud SQL Admin, and Compute Engine.

    Abilita le API

  5. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Abilita le API Cloud Storage, Cloud SQL Admin, and Compute Engine.

    Abilita le API

  8. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

Creazione di uno script per un database di esempio

In questa sezione creerai uno script per compilare un database di esempio precaricato. Quindi creerai un'istanza SQL Server 2017 su Compute Engine che utilizza questo database.

  1. In Cloud Shell, crea uno script PowerShell di cui eseguire il deployment come script di avvio:

    cat << 'EOF' > startup.ps1
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    $dataseturl = "https://opendata.maryland.gov/api/views/ryxx-aeaf/rows.csv?accessType=DOWNLOAD"
    Invoke-WebRequest -Uri $dataseturl -OutFile c:\dataset.csv
    Invoke-Sqlcmd -Query "CREATE DATABASE testdb;"
    Invoke-Sqlcmd -Query "CREATE TABLE testdb.dbo.MarylandZipCodes ( zipcode int NOT NULL PRIMARY KEY,  city varchar(255), county varchar(255))"
    Invoke-Sqlcmd -Query "BULK INSERT testdb.dbo.MarylandZipCodes FROM 'c:\dataset.csv' WITH (DATAFILETYPE='char',FIELDTERMINATOR=',' ,ROWTERMINATOR = '0x0a',  FIRSTROW=2);"
    EOF
    

    Questo script di avvio crea un database locale denominato testdb con una tabella denominata MarylandZipCodes. Successivamente, lo script scarica il registro dei codici postali pubblico del Maryland e importa il registro nella tabella.

  2. Crea un'istanza di SQL Server 2017 Enterprise per Windows Server 2016:

    gcloud compute instances create sql-server --machine-type n1-highmem-4 \
        --boot-disk-size 50GB \
      --image-project windows-sql-cloud --image-family sql-ent-2017-win-2016 \
      --zone us-central1-f  \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --metadata-from-file windows-startup-script-ps1=startup.ps1
    

    Per questo tutorial, creerai l'istanza nella zona us-central1-f con una dimensione del disco di avvio di 50 GB. Per ulteriori informazioni sulle zone, consulta Località cloud. Il flag --metadata-from-file imposta lo script PowerShell in modo da essere lo script di avvio per l'istanza.

Creazione dell'istanza Cloud SQL e del bucket Cloud Storage

  1. In Cloud Shell, crea l'istanza Cloud SQL per SQL Server 2017 Enterprise in cui in seguito eseguirai la migrazione del database:

    gcloud beta sql instances create target  \
        --database-version=SQLSERVER_2017_ENTERPRISE \
        --cpu=2 \
        --memory=5GB \
        --root-password=sqlserver12@ \
        --zone=us-central1-f
    

    La creazione dell'istanza può richiedere alcuni minuti. Il nome utente root predefinito è sqlserver e la password predefinita è sqlserver12@. Per questo tutorial, creerai l'istanza nella zona us-central1-f. Per ulteriori informazioni sulle zone, consulta Località cloud.

  2. Crea un bucket Cloud Storage per archiviare il file di backup prima che i dati vengano importati in Cloud SQL:

    gsutil mb -l US "gs://${DEVSHELL_PROJECT_ID}-sql-backups"
    

Backup del database di esempio

In questa sezione, ti connetterai alla macchina virtuale (VM) SQL Server, creerai un backup del database e caricherai il database di backup in Cloud Storage.

  1. In Cloud Shell, reimposta la password per l'istanza VM SQL Server:

    gcloud compute reset-windows-password sql-server --zone=us-central1-f
    

    Prendi nota della nuova password dell'utente.

  2. Installa un client RDP (Remote Desktop Protocol). Per ulteriori informazioni, consulta Client Microsoft Remote Desktop.

  3. Nella console Google Cloud, vai alla pagina Istanze VM.

    VAI ALLA PAGINA ISTANZE VM

  4. 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 la tua istanza VM SQL Server.

    Utilizza questo file per connetterti all'istanza mediante un client RDP. Per maggiori informazioni, consulta Client Microsoft Remote Desktop.

  5. Nel browser, riduci a icona tutte le finestre, quindi avvia lo strumento a riga di comando di PowerShell.

  6. Crea una cartella di backup:

    mkdir c:\backup
    
  7. Nel browser, crea un backup del database nella cartella di backup:

    osql -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak'"
    
  8. Nella shell dell'istanza, copia il file di backup nel bucket Cloud Storage:

    $PROJECT_ID=(gcloud config get-value core/project)
    
    gsutil cp -n c:\backup\testdb.bak gs://$PROJECT_ID-sql-backups
    

Importazione del file di backup in Cloud SQL

  1. In Cloud Shell, recupera l'account di servizio associato all'istanza Cloud SQL e salvalo in una variabile:

    SVC_EMAIL_ADDRESS=$(gcloud sql instances describe target \
        --format='value(serviceAccountEmailAddress)')
    echo $SVC_EMAIL_ADDRESS
    

    Google Cloud crea un account di servizio quando hai creato l'istanza Cloud SQL. Puoi utilizzare l'account di servizio per concedere all'istanza Cloud SQL l'autorizzazione ad accedere alle risorse necessarie.

  2. Aggiungi l'account di servizio all'elenco di controllo dell'accesso (ACL) del bucket Cloud Storage con autorizzazioni di autore:

    gsutil acl ch -u ${SVC_EMAIL_ADDRESS}:W gs://${DEVSHELL_PROJECT_ID}-sql-backups
    
  3. Aggiungi l'account di servizio al file di importazione con le autorizzazioni di lettura:

    gsutil acl ch -u $SVC_EMAIL_ADDRESS:R gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak
    
  4. Importa il file di backup nel database Cloud SQL:

    gcloud beta sql import bak target \
        gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak --database testdb
    

Convalida dell'importazione dei dati

In questa sezione, puoi verificare che i dati di esempio siano stati importati correttamente.

  1. In Cloud Shell, installa il toolkit SQL Server:

    sudo apt-get install -y mssql-tools
    

    Se accetti i termini di licenza, inserisci yes quando ti viene richiesto.

  2. Per accedere in modo sicuro alla tua istanza Cloud SQL, scarica il proxy Cloud SQL:

    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  3. Avvia il proxy Cloud SQL:

    CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)')
    ./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  4. Leggi il numero di righe nella tabella Cloud SQL:

    /opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q "select count(*)
    from testdb.dbo.MarylandZipCodes"
    

    Quando ti viene richiesto, inserisci la password sqlserver12@. Nell'output, assicurati che il risultato sia 619.

Esegui la pulizia

Il modo più semplice per eliminare la fatturazione è eliminare il progetto Google Cloud che hai creato per il tutorial.

Elimina il progetto

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi