Migrar dados entre o SQL Server 2017 e o Cloud SQL para SQL Server através de ficheiros de cópia de segurança


Neste tutorial, migra dados do SQL Server 2017 Enterprise em execução no Compute Engine para o Cloud SQL para SQL Server 2017 Enterprise. O tutorial mostra como exportar os dados do SQL Server 2017, importar os dados para o Cloud SQL para SQL Server 2017 e validar se os dados foram importados com êxito.

Se quiser migrar dados do SQL Server 2008, consulte o artigo Migrar dados entre o SQL Server 2008 e o Cloud SQL para SQL Server através de ficheiros de cópia de segurança.

Este tutorial é útil se for um administrador de sistemas, um programador, um engenheiro, um administrador de bases de dados ou um engenheiro de DevOps que quer migrar dados do SQL Server 2017 para o Cloud SQL para SQL Server.

O tutorial pressupõe que conhece o seguinte:

Objetivos

  • Crie uma instância de máquina virtual (VM) do SQL Server no Compute Engine para alojar a base de dados de amostra.
  • Crie uma instância do Cloud SQL para SQL Server.
  • Crie um contentor do Cloud Storage.
  • Faça uma cópia de segurança da base de dados de amostra.
  • Importe a base de dados para o Cloud SQL para SQL Server.
  • Valide os dados importados.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Antes de começar

  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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    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.

Criar um guião para uma base de dados de amostra

Nesta secção, cria um script para preencher uma base de dados de exemplo pré-carregada. Em seguida, cria uma instância do SQL Server 2017 no Compute Engine que usa esta base de dados.

  1. No Cloud Shell, crie um script do PowerShell para implementar como um script de inicialização:

    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
    

    Este script de arranque cria uma base de dados local denominada testdb com uma tabela denominada MarylandZipCodes. Em seguida, o script transfere o registo público de códigos postais de Maryland e importa o registo para a tabela.

  2. Crie uma instância do SQL Server 2017 Enterprise para o 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
    

    Para este tutorial, cria a instância na zona us-central1-f com um tamanho do disco de arranque de 50 GB. Para mais informações acerca das zonas, consulte o artigo Localizações na nuvem. A flag --metadata-from-file define o script do PowerShell como o script de arranque da instância.

Criar a instância do Cloud SQL e o contentor do Cloud Storage

  1. No Cloud Shell, crie a instância do Cloud SQL para SQL Server 2017 Enterprise para a qual vai migrar a base de dados mais tarde:

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

    A criação da instância pode demorar alguns minutos. O nome de utilizador root predefinido é sqlserver com uma palavra-passe predefinida de sqlserver12@. Para este tutorial, crie a instância na zona us-central1-f. Para mais informações sobre as zonas, consulte Localizações na nuvem.

  2. Crie um contentor do Cloud Storage para armazenar o ficheiro de cópia de segurança antes de os dados serem importados para o Cloud SQL:

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

Fazer uma cópia de segurança da base de dados de exemplo

Nesta secção, estabelece ligação à máquina virtual (VM) do SQL Server, cria uma cópia de segurança da base de dados e carrega a base de dados de cópia de segurança para o Cloud Storage.

  1. No Cloud Shell, reponha a palavra-passe da instância de VM do SQL Server:

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

    Tome nota da nova palavra-passe do utilizador.

  2. Instale um cliente do protocolo de ambiente de trabalho remoto (RDP). Para mais informações, consulte os clientes do Microsoft Remote Desktop.

  3. Na Google Cloud consola, aceda à página Instâncias de VM.

    ACEDA À PÁGINA DE INSTÂNCIAS DE VM

  4. Na secção Compute Engine da Google Cloud consola, clique no menu pendente RDP e selecione a opção Transferir o ficheiro RDP para transferir o ficheiro RDP para a instância de VM do SQL Server.

    Use este ficheiro para estabelecer ligação à instância através de um cliente RDP. Para mais informações, consulte o artigo Clientes do Ambiente de Trabalho Remoto da Microsoft.

  5. No navegador, minimize todas as janelas e, em seguida, inicie a ferramenta de linha de comandos do PowerShell.

  6. Crie uma pasta de cópia de segurança:

    mkdir c:\backup
    
  7. No navegador, crie uma cópia de segurança da base de dados na pasta de cópias de segurança:

    osql -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak'"
    
  8. Na shell na instância, copie o ficheiro de cópia de segurança para o contentor do Cloud Storage:

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

Importar o ficheiro de cópia de segurança para o Cloud SQL

  1. No Cloud Shell, obtenha a conta de serviço associada à instância do Cloud SQL e guarde-a numa variável:

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

    Google Cloud Cria uma conta de serviço quando criou a instância do Cloud SQL. Usa a conta de serviço para conceder à instância do Cloud SQL autorização para aceder aos recursos de que precisa.

  2. Conceda à conta de serviço autorização para escrever no contentor do 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. Conceda à conta de serviço autorização para ler ficheiros no contentor do 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. Importe o ficheiro de cópia de segurança para a base de dados do Cloud SQL:

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

Validar a importação de dados

Nesta secção, verifica se os dados de exemplo foram importados com êxito.

  1. No Cloud Shell, instale o conjunto de ferramentas do SQL Server:

    sudo apt-get install -y mssql-tools
    

    Se aceitar os termos da licença, introduza yes quando lhe for pedido.

  2. Para aceder em segurança à sua instância do Cloud SQL, transfira o proxy do Cloud SQL:

    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  3. Inicie o proxy do Cloud SQL:

    CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)')
    ./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  4. Leia o número de linhas na tabela do Cloud SQL:

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

    Quando lhe for pedido, introduza a palavra-passe sqlserver12@. Na saída, certifique-se de que o resultado é 619.

Limpar

A forma mais fácil de eliminar a faturação é eliminar o Google Cloud projeto que criou para o tutorial.

Elimine o projeto

  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.

O que se segue?