Como migrar dados entre o SQL Server 2008 e o Cloud SQL for SQL Server usando arquivos de backup

Neste tutorial, você vai migrar dados do SQL Server 2017 Enterprise em execução no Compute Engine para o Cloud SQL para SQL Server 2017 Enterprise. No tutorial, mostramos como exportar os dados do SQL Server 2017, importá-los para o Cloud SQL para SQL Server 2017 e validar se eles foram importados com êxito.

Se você quiser migrar dados do SQL Server 2008, consulte Como migrar dados entre o SQL Server 2008 e o Cloud SQL para SQL Server usando arquivos de backup.

Este tutorial é útil se você é administrador de sistema, desenvolvedor, engenheiro, administrador de banco de dados ou engenheiro de DevOps que quer migrar dados do SQL Server 2017 para o Cloud SQL para SQL Server.

O tutorial presume que você esteja familiarizado com o seguinte:

Objetivos

  • Crie uma instância de máquina virtual (VM, na sigla em inglês) do SQL Server no Compute Engine para hospedar o banco de dados de amostra.
  • Criar uma instância do Cloud SQL for SQL Server.
  • Criar um bucket do Cloud Storage
  • Faça backup do banco de dados de amostra.
  • Importar o banco de dados para o Cloud SQL for SQL Server.
  • Validar os dados importados.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative as APIs Cloud Storage, Cloud SQL Admin, and Compute Engine.

    Ative as APIs

  5. No Console do Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte inferior do Console do Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente com o SDK do Cloud pré-instalado com a ferramenta de linha de comando gcloud e os valores já definidos para seu projeto atual. A inicialização da sessão pode levar alguns segundos.

Como criar um script para um banco de dados de amostra

Nesta seção, você criará um script para preencher um banco de dados de amostra pré-carregado. Em seguida, você cria uma instância do SQL Server 2017 no Compute Engine que usa esse banco de dados.

  1. No Cloud Shell, crie um script do PowerShell para implantar 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
    

    Esse script de inicialização cria um banco de dados local chamado testdb com uma tabela chamada MarylandZipCodes. Em seguida, o script faz o download do registro público de CEP de Maryland e importa o registro 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, crie a instância na zona us-central1-f com um tamanho de disco de inicialização de 50 GB. Para mais informações sobre zonas, consulte Locais na nuvem. A sinalização --metadata-from-file define o script do PowerShell como o script de inicialização da instância.

Como criar a instância do Cloud SQL e o bucket do Cloud Storage

  1. No Cloud Shell, crie a instância do Cloud SQL para SQL Server 2017 Enterprise para a qual o banco de dados será migrado posteriormente:

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

    Pode levar alguns minutos para criar a instância. O nome de usuário raiz padrão é sqlserver com uma senha padrão de sqlserver12@. Para este tutorial, você cria a instância na zona us-central1-f. Para mais informações sobre zonas, consulte Locais na nuvem.

  2. Crie um bucket do Cloud Storage para armazenar o arquivo de backup antes que os dados sejam importados para o Cloud SQL:

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

Como fazer backup do banco de dados de amostra

Nesta seção, você se conecta à máquina virtual (VM) do SQL Server, cria um backup do banco de dados e faz o upload dele para o Cloud Storage.

  1. No Cloud Shell, redefina a senha para a instância de VM do SQL Server:

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

    Anote a nova senha do usuário.

  2. No navegador, instale a extensão Chrome RDP para Google Cloud.

  3. No Console do Cloud, acesse a página Instâncias de VM.

    ACESSAR A PÁGINA "INSTÂNCIAS DE VM"

  4. Para abrir a extensão Chrome RDP, clique no botão RDP para a instância de VM sql-server à qual você quer se conectar.

  5. Nos campos de nome de usuário e senha, digite o nome de usuário e a senha que você anotou anteriormente para a instância de VM do SQL Server.

  6. Deixe o campo Domínio em branco e clique em OK para se conectar à VM do SQL Server.

    Quando for solicitado, aceite o certificado.

  7. Se você aceita os termos, clique em Continuar.

  8. No navegador, minimize todas as janelas e inicie a ferramenta de linha de comando do PowerShell.

  9. Crie uma pasta de backup:

    mkdir c:\backup
    
  10. No navegador, crie um backup do banco de dados na pasta de backup:

    osql -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak'"
    
  11. No shell da instância, copie o arquivo de backup para o bucket do Cloud Storage:

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

Como importar o arquivo de backup para o Cloud SQL

  1. No Cloud Shell, recupere a conta de serviço associada à instância do Cloud SQL e salve-a em uma variável:

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

    O Google Cloud cria uma conta de serviço quando você cria a instância do Cloud SQL. Use a conta de serviço para conceder à instância do Cloud SQL permissão para acessar os recursos necessários.

  2. Adicione a conta de serviço à lista de controle de acesso (ACL) do bucket do Cloud Storage com permissões de gravador:

    gsutil acl ch -u ${SVC_EMAIL_ADDRESS}:W gs://${DEVSHELL_PROJECT_ID}-sql-backups
    
  3. Adicione a conta de serviço ao arquivo de importação com permissões de leitor:

    gsutil acl ch -u $SVC_EMAIL_ADDRESS:R gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak
    
  4. Importe o arquivo de backup para o banco de dados do Cloud SQL:

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

Como validar a importação de dados

Nesta seção, você verifica se os dados foram importados com êxito.

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

    sudo apt-get install -y mssql-tools
    

    Se você aceitar os termos da licença, insira yes quando for solicitado.

  2. Para acessar a instância do Cloud SQL com segurança, faça o download do 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 for necessário, digite a senha sqlserver12@. Na saída, verifique se o resultado é 619.

Limpar

A maneira mais fácil de eliminar o faturamento é excluir o projeto do Cloud criado para o tutorial.

Excluir o projeto

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir