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


In questo tutorial esegui 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 convalidare che siano stati importati correttamente.

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

Questo tutorial è utile se sei un sysadmin, 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 abbia dimestichezza con quanto segue:

Obiettivi

  • Crea un'istanza di una macchina virtuale (VM) SQL Server in Compute Engine per ospitare il database di esempio.
  • Creare un'istanza 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 utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Storage, Cloud SQL Admin, and Compute Engine APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Storage, Cloud SQL Admin, and Compute Engine APIs.

    Enable the APIs

  8. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

Creazione di uno script per un database di esempio

In questa sezione, crei uno script per compilare un database di esempio precompilato. Poi crea un'istanza SQL Server 2017 su Compute Engine che utilizzi questo database.

  1. In Cloud Shell, crea uno script PowerShell da eseguire 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 chiamato MarylandZipCodes. Lo script scarica quindi il registro pubblico dei codici postali del Maryland e lo importa nella tabella.

  2. Crea un'istanza 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 e deve avere 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 come 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 a cui eseguirai in un secondo momento 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 con una password predefinita di sqlserver12@. Per questo tutorial, crea l'istanza nella zona us-central1-f. Per saperne di più sulle zone, consulta Località cloud.

  2. Crea un bucket Cloud Storage in cui archiviare il file di backup prima vengono importati in Cloud SQL:

    gcloud storage buckets create "gs://${DEVSHELL_PROJECT_ID}-sql-backups" --location=US
    

Backup del database di esempio

In questa sezione ti connetterai alla macchina virtuale (VM SQL Server) e creerai una del database e caricarlo 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 per l'utente.

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

  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 Scarica il file RDP per scaricare il file RDP per la tua istanza VM SQL Server.

    Utilizza questo file per connetterti all'istanza utilizzando un client RDP. Per saperne di più, consulta Client di Microsoft Remote Desktop.

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

  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 Bucket Cloud Storage:

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

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. Devi usare l'account di servizio per concedere l'autorizzazione dell'istanza Cloud SQL ad accedere alle risorse di cui ha bisogno.

  2. Concedi all'account di servizio l'autorizzazione di scrittura nel bucket Cloud Storage:

    gcloud storage buckets add-iam-policy-binding gs://${DEVSHELL_PROJECT_ID}-sql-backups \
        --member=serviceAccount:${SVC_EMAIL_ADDRESS} \
        --role=roles/storage.legacyBucketWriter
    
  3. Concedi all'account di servizio l'autorizzazione per leggere i file nel bucket Cloud Storage:

    gcloud storage buckets add-iam-policy-binding gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak \
        --member=serviceAccount:${SVC_EMAIL_ADDRESS} \
        --role=roles/storage.legacyObjectReader
    
  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 corso...

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

  1. In Cloud Shell, installa Toolkit di SQL Server:

    sudo apt-get install -y mssql-tools
    

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

  2. Per accedere in sicurezza all'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 richiesto, inserisci la password sqlserver12@. Nell'output, specifica assicurati che il risultato sia 619.

Esegui la pulizia

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

Elimina il progetto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi