Como clonar um banco de dados do SQL Server da Microsoft no Compute Engine


Neste tutorial, mostramos duas maneiras de clonar um banco de dados Microsoft SQL Server (em inglês) em execução no Compute Engine. Um desses métodos usa snapshots do disco permanente. O outro usa backup e restauração nativos do SQL Server, transferindo o backup com o Cloud Storage. O Cloud Storage é o serviço de armazenamento de objetos do Google Cloud. Ele oferece um armazenamento de arquivos simples, durável, mais seguro e altamente disponível.

A clonagem é o processo de cópia de um banco de dados on-line para outro servidor. Ela não depende do banco de dados atual e é mantida como um snapshot pontual. Um banco de dados clonado pode ser usado para várias finalidades, sem sobrecarregar o servidor de produção ou comprometer a integridade dos dados de produção. Algumas dessas finalidades são:

  • realização de consultas analíticas;
  • teste de carga ou de integração dos apps;
  • extração de dados para preencher o armazenamento de dados;
  • realização de experimentos nos dados.

Cada método de clonagem descrito neste tutorial tem vantagens e desvantagens. O método ideal depende da situação. A tabela a seguir destaca alguns dos principais problemas.

Problema Método 1: snapshots do disco Método 2: backup e restauração com o Cloud Storage
Requer mais espaço em disco nas instâncias do SQL Server Não requer mais espaço em disco Requer mais espaço em disco para armazenar o arquivo de backup ao criar e restaurar
Carga extra em instâncias de origem do SQL Server durante a clonagem Sem carga extra Carga extra na CPU e na E/S ao criar e fazer upload de arquivos de backup
Duração da clonagem Relativamente rápida para bancos de dados grandes Relativamente lenta para bancos de dados grandes
É possível clonar de instâncias do SQL Server externas ao Google Cloud Não Sim
Complexidade Uma sequência complexa de comandos para anexar discos clonados Um conjunto relativamente simples de comandos para clonagem
É possível aproveitar sistemas de backup atuais Sim, se o sistema de backup usa snapshots de disco do Google Cloud Sim, se o sistema de backup grava arquivos de backup nativos do SQL Server no Cloud Storage
Granularidade da clonagem É possível clonar apenas discos inteiros É possível clonar apenas o banco de dados especificado
Consistência de dados Consistente no momento do snapshot Consistente no momento do backup

Para seguir este tutorial, é necessário conhecer a administração de sistema do Microsoft Windows, o PowerShell e a administração do Microsoft SQL Server ao usar o Microsoft SQL Server Management Studio.

Objetivos

  • Aprenda a executar uma instância do SQL Server no Google Cloud.
  • Aprenda a criar um banco de dados de demonstração em um disco secundário.
  • Saber como clonar um banco de dados SQL Server usando snapshots de disco do Compute Engine.
  • Saber como clonar um banco de dados SQL Server usando o Cloud Storage para transferir um backup.

Custos

Neste documento, você usará 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 estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

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.

    Go to project selector

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

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

    Go to project selector

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Ative a API Compute Engine.
  7. Ativar a API

Verifique se você atende a esses outros pré-requisitos:

Como configurar o ambiente

Para concluir este tutorial, é preciso configurar o ambiente de computação com:

  • uma instância do SQL Server no Compute Engine (denominada sql-server-prod) para representar o servidor de banco de dados de produção;
  • Um outro disco (chamado sql-server-prod-data) anexado ao servidor de produção para armazenar o banco de dados de produção.
  • uma cópia do banco de dados de amostra Wide World Importers para SQL Server (em inglês) para simular o banco de dados de produção a ser clonado;
  • uma instância do SQL Server no Compute Engine denominada sql-server-test para representar seu servidor de banco de dados de teste. Seu banco de dados é clonado nesse servidor.

No diagrama a seguir, ilustramos essa arquitetura.

Diagrama que mostra a configuração para clonar um banco de dados SQL Server neste tutorial.

Criar instância da VM de produção

Para simular um ambiente de produção, configure uma instância de VM do Compute Engine executando o SQL Server no Windows Server.

A instância de VM deste tutorial usa dois discos: um de 50 GB para o SO e as contas de usuário e um de 100 GB para armazenamento de banco de dados.

No Compute Engine, o uso de discos separados não oferece benefícios de desempenho. O desempenho do disco é determinado pela capacidade total de armazenamento de todos os discos anexados a uma instância e pelo número total de vCPUs na instância de VM. Portanto, o banco de dados e o arquivo de registros podem residir no mesmo disco.

Console

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VM"

  2. Clique em Criar.

  3. No campo Nome, digite sql-server-prod.

  4. Em Região, selecione us-east1.

  5. Em Zona, selecione us-east1-b.

  6. Em Configuração da máquina, altere o Tipo de máquina para n1-standard-2 (2 vCPUs).

  7. Ao lado da descrição Disco de inicialização, clique em Alterar.

  8. No painel Disco de inicialização, clique na guia Imagens públicas.

  9. Na lista suspensa Sistema operacional, selecione SQL Server no Windows Server.

  10. Na lista suspensa Versão, selecione SQL Server 2022 Standard no Windows Server 2022 Datacenter.

  11. Verifique se os seguintes valores estão definidos:

    • O tipo de disco de inicialização está definido como disco permanente padrão.
    • O Tamanho (GB) está definido como 50.
  12. Clique em Selecionar.

  13. Em Identidade e acesso à API, defina os Escopos de acesso como Permitir acesso total a todas as APIs do Cloud.

  14. Expanda Gerenciamento, segurança, discos, rede, locatário único.

  15. Clique na guia Discos.

  16. Clique em Adicionar novo disco .

  17. No campo Nome, digite sql-server-prod-data.

  18. No campo Tamanho (GB), digite 100.

  19. Clique em Concluído.

  20. Clique em Criar.

Cloud Shell

  1. Abra o Cloud Shell.

    Abrir o Cloud Shell

  2. Inicialize as seguintes variáveis:

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Em que:

    • VPC_NAME: nome da VPC.
    • SUBNET_NAME: nome da sub-rede.
  3. Defina o ID do projeto padrão:

    gcloud config set project PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

  4. Defina sua região padrão:

    gcloud config set compute/region REGION
    

    Substitua REGION pelo ID da região em que você quer implantar.

  5. Defina a zona padrão:

    gcloud config set compute/zone ZONE
    

    Substitua ZONE pelo ID da zona em que você quer implantar.

  6. Crie uma instância do Compute Engine usando a imagem de aplicativo do SQL Server 2022 Standard no 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 
    

    Esse comando concede à instância acesso total às APIs do Google Cloud, cria um disco secundário de 100 GB e anexa o disco à instância. Ignore o aviso de desempenho de disco porque este tutorial não requer alto desempenho.

Conectar-se à instância de VM

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VM"

  2. Espere cerca de cinco minutos para que a instância de VM esteja pronta.

    Para monitorar o processo de inicialização da VM, visualize a saída da porta serial no Cloud Shell:

    gcloud compute instances tail-serial-port-output sql-server-prod
    

    Quando aparecer a mensagem a seguir, a inicialização estará concluída.

    Instance setup finished. sql-server-prod is ready to use.
    

    Pressione Control+C para parar de monitorar a porta serial.

  3. Clique no nome da instância sql-server-prod para abrir a página Detalhes da instância de VM.

  4. Em Acesso remoto, clique em Definir senha do Windows e em Definir para criar sua conta na máquina remota.

    Esta etapa gera uma senha para você. Anote ou copie essa senha em um arquivo temporário e seguro.

  5. Na seção Compute Engine do console do Google Cloud, clique no menu suspenso RDP e selecione a opção RDP para fazer o download do arquivo RDP da instância.

    Use esse arquivo para se conectar à instância usando um cliente RDP. Para mais informações, consulte Clientes de Área de Trabalho Remota da Microsoft.

  6. Quando solicitado, insira a senha recém-gerada e clique em OK.

  7. Para aceitar o certificado do servidor e fazer login na instância remota do Windows, clique em Continuar.

  8. Ao ser perguntado se você quer que seu computador seja detectado por outros computadores e dispositivos na rede, clique em Não.

Configurar o disco extra

O segundo disco anexado à instância de produção serve para armazenar o banco de dados de produção. Esse disco está em branco, então é preciso particioná-lo, formatá-lo e montá-lo.

  1. Em uma sessão RDP conectada à instância sql-server-prod, clique no botão Iniciar na barra de tarefas do Windows, digite diskpart e clique em diskpart para abrir o DiskPart.
  2. Quando solicitado a permitir que o app faça alterações, clique em Sim.
  3. Exiba uma lista de discos anexados à instância:

    list disk
    

    A saída é esta:

    Disk ###  Status         Size     Free     Dyn  Gpt
    --------  -------------  -------  -------  ---  ---
    Disk 0    Online           50 GB      0 B
    Disk 1    Online          100 GB   100 GB
    

    O disco 1 (100 GB) é seu disco de dados.

  4. Selecione o disco de dados:

    select disk 1
    
  5. Inicialize o disco:

    clean
    
  6. Crie uma tabela de partição GUID:

    convert gpt
    
  7. Crie a partição de dados usando o disco inteiro:

    create partition primary
    
  8. Liste os volumes disponíveis:

    list volume
    

    A saída é esta:

    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
    

    O volume 2 (99 GB) é o disco de dados.

  9. Selecione o volume:

    select volume 2
    
  10. Formate a partição com o sistema de arquivos NTFS e rotule-a como data:

    format quick fs=ntfs label=data
    
  11. Monte o disco como unidade D:

    assign letter=d
    
  12. Saia do DiskPart:

    exit
    

Fazer o download do banco de dados de amostra

Para configurar seu ambiente para este exercício de clonagem, faça o seguinte:

Para criar o diretório e fazer o download do arquivo de backup, siga estas etapas:

  1. Na sessão RDP, clique no botão Iniciar na barra de tarefas do Windows, digite PowerShell e selecione o app Windows PowerShell.

  2. No prompt do PowerShell, crie uma estrutura de diretórios para o armazenamento do banco de dados:

    mkdir D:\sql-server-data\wideworldimporters
    
  3. Faça o download do arquivo de backup para a unidade 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
    

Restaurar o banco de dados de amostra

É preciso restaurar o banco de dados de amostra na unidade D (data), de maneira interativa, usando os assistentes do Microsoft SQL Server Management Studio (SSMS) ou executando um comando Transact-SQL.

Assistente do SSMS

  1. Na sessão de protocolo RDP, clique no botão Iniciar na barra de tarefas do Windows, digite ssms e selecione Microsoft SQL Server Management Studio (Executar como administrador).
  2. Depois que o app for iniciado, clique em Conectar para se conectar ao mecanismo de banco de dados sql-server-prod usando a autenticação do Windows.
  3. No Pesquisador de Objetos, clique com o botão direito do mouse em Bancos de Dados e selecione Restaurar Banco de Dados.
  4. Em Origem, selecione Dispositivo e clique no botão [...] ao lado do nome do dispositivo.
  5. Na caixa de diálogo Selecionar dispositivos de backup, verifique se Arquivo está selecionado em Tipo de mídia de backup e clique em Adicionar.
  6. No seletor de arquivos, acesse D:\sql-server-data, clique no arquivo WideWorldImporters-Full.bak e em OK.
  7. Clique em OK para fechar a caixa de diálogo Selecionar dispositivos de backup.

    A caixa de diálogo Restaurar Banco de Dados agora está preenchida com dados sobre o backup do banco de dados do Wide World Importers.

  8. Em Selecionar uma página, clique em Arquivos.

  9. Marque a caixa de seleção Realocar todos os arquivos para a pasta.

  10. Nos campos Pasta de arquivo de dados e Pasta de arquivo de registros, insira D:\sql-server-data\wideworldimporters.

    Captura de tela que mostra a caixa de diálogo "Restaurar Banco de Dados".

  11. Clique em OK para iniciar a operação de restauração.

Após alguns minutos, você será notificado de que o banco de dados foi restaurado.

Transact-SQL

  1. Na sessão de protocolo RDP, clique no botão Iniciar na barra de tarefas do Windows, digite ssms e selecione Microsoft SQL Server Management Studio (Executar como administrador).
  2. Depois que o app for iniciado, clique em Conectar para se conectar ao mecanismo de banco de dados sql-server-prod usando a autenticação do Windows.
  3. Selecione Arquivo > Novo > Consulta com Conexão Atual para abrir uma nova janela de consulta.
  4. Inicie uma restauração pelo arquivo de backup que você recebeu no download:

    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
    

    Esse comando restaura o banco de dados e o arquivo de registros no diretório D:\sql-server-data\wideworldimporters.

  5. Clique com o botão direito do mouse no código da consulta e, em seguida, em Executar.

    Aguarde alguns minutos para que a restauração do banco de dados seja concluída. Clique em Atualizar no "Pesquisador de Objetos" para ver se o banco de dados consta da árvore de bancos de dados. Após a conclusão da restauração do banco de dados, é possível fechar a janela de consulta sem salvar.

Para verificar se o banco de dados de amostra está funcionando, execute uma consulta.

  1. No Microsoft SQL Server Management Studio, selecione Arquivo > Novo > Consulta com Conexão Atual para abrir uma nova janela de consulta e copie o código a seguir:

    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;
    

    Essa consulta recupera informações resumidas das últimas cem faturas entregues.

  2. Clique com o botão direito do mouse na janela de consulta e, em seguida, em Executar.

    O painel Resultados exibe as informações resumidas.

    Captura de tela que mostra o painel "Resultados" de uma consulta para o banco de dados de amostra.

Criar a instância de VM de teste

Nesta seção, você criará uma instância do SQL Server denominada sql-server-test como destino do banco de dados clonado. A configuração dessa instância é idêntica à da instância de produção. No entanto, um segundo disco de dados não será criado. Em vez disso, o disco de dados será anexado mais adiante neste tutorial.

Console

  1. Acesse a página Instâncias da VM.

    Acessar a página "Instâncias de VM"

  2. Clique em Criar.

  3. No campo Nome, digite sql-server-test.

  4. Em Região, selecione us-east1.

  5. Em Zona, selecione us-east1-b.

  6. Em Configuração da máquina, altere o Tipo de máquina para n1-standard-2 (2 vCPUs).

  7. Ao lado da imagem Disco de inicialização, clique em Alterar.

  8. No painel Disco de inicialização, clique na guia Imagens públicas.

  9. Na lista suspensa Sistema operacional, selecione SQL Server no Windows Server.

  10. Na lista suspensa Versão, selecione SQL Server 2022 Standard no Windows Server 2022 Datacenter.

  11. Verifique se os seguintes valores estão definidos:

    • O tipo de disco de inicialização está definido como disco permanente padrão.
    • O Tamanho (GB) está definido como 50.
  12. Clique em Selecionar.

  13. Em Identidade e acesso à API, defina os Escopos de acesso como Permitir acesso total a todas as APIs do Cloud.

  14. Clique em Criar.

Cloud Shell

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie a instância de teste do SQL Server:

    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
    

    Ignore o aviso de desempenho do disco porque este tutorial não requer alto desempenho.

Conectar-se à instância de VM

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VM"

  2. Espere cerca de cinco minutos para que a instância de VM esteja pronta.

    Para monitorar o processo de inicialização da VM, visualize a saída da porta serial no Cloud Shell:

    gcloud compute instances tail-serial-port-output sql-server-prod
    

    Quando aparecer a mensagem a seguir, a inicialização estará concluída.

    Instance setup finished. sql-server-test is ready to use.
    

    Pressione Control+C para parar de monitorar a porta serial.

  3. Clique no nome da instância sql-server-test para exibir a página Detalhes da instância de VM.

  4. Em Acesso remoto, clique em Definir senha do Windows e em Definir para criar sua conta na máquina remota.

    Esta etapa gera uma senha para você. Anote ou copie essa senha em um arquivo temporário e seguro.

  5. Na seção Compute Engine do console do Google Cloud, clique no menu suspenso RDP e selecione a opção RDP para fazer o download do arquivo RDP da instância.

    Use esse arquivo para se conectar à instância usando um cliente RDP. Para mais informações, consulte Clientes de Área de Trabalho Remota da Microsoft.

  6. Quando solicitado, insira a senha recém-gerada e clique em OK.

  7. Para aceitar o certificado do servidor e fazer login na instância remota do Windows, clique em Continuar.

  8. Quando aparecer a mensagem perguntando se você quer que seu PC seja detectável, clique em Não.

Como clonar o banco de dados usando snapshots de disco do Compute Engine

Uma maneira de clonar o banco de dados do SQL Server em execução no Compute Engine é armazenar o banco de dados em um disco de dados separado e usar snapshots do disco permanente para criar um clone desse disco.

Com os snapshots do disco permanente, é possível conseguir uma cópia pontual dos dados no disco. O agendamento de snapshots do disco é uma maneira de fazer backups automáticos dos dados.

Nesta seção do tutorial, siga as etapas abaixo.

  • Tire um snapshot do disco de dados do servidor de produção.
  • Crie um novo disco a partir do snapshot.
  • Ative o novo disco em um servidor de teste.
  • Anexe o banco de dados deste disco ao SQL Server na instância de teste.

O diagrama a seguir mostra como um banco de dados é clonado usando snapshots de disco.

Diagrama que mostra a configuração para clonar um banco de dados do SQL Server usando snapshots de disco.

Criar o snapshot do disco

Console

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VM"

  2. Clique no nome da instância sql-server-prod.

  3. Na página Detalhes da instância de VM clique no disco sql-server-prod-data.

  4. Clique em Criar snapshot.

  5. Nomeie o snapshot como sql-server-prod-data-snapshot.

  6. Em Local, selecione Regional.

  7. Certifique-se de que a região está definida como us-east1 (a mesma de suas instâncias de VM).

  8. Selecione a opção Ativar VSS.

    Ela usa o Serviço de Cópias de Sombra de Volume no Microsoft Windows para criar um snapshot consistente.

  9. Clique em Criar.

    Após alguns minutos, a criação de seu snapshot é concluída.

Cloud Shell

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie um snapshot do seu disco de dados na mesma zona que a instância de VM:

    gcloud compute disks snapshot sql-server-prod-data \
         --snapshot-names=sql-server-prod-data-snapshot \
         --guest-flush \
         --zone="${ZONE}"
    

    A opção --guest-flush usa o Serviço de Cópias de Sombra de Volume no Microsoft Windows para criar um snapshot consistente. Após alguns minutos, a criação de seu snapshot é concluída.

Anexar o snapshot do disco à instância de teste

É preciso criar um novo disco de dados do snapshot criado e, em seguida, anexá-lo à instância sql-server-test.

Console

Nas etapas a seguir, você criará um novo disco permanente, usará o snapshot do disco de produção como conteúdo e, em seguida, anexará o disco à instância de teste.

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VM"

  2. Clique no nome da instância sql-server-test.

  3. Na página Detalhes da instância de VM, clique em Editar.

  4. Clique em Adicionar novo disco .

  5. Dê o nome sql-server-test-data ao novo disco.

  6. Em Tipo de origem, selecione Snapshot.

  7. Para a instância sql-server-prod-data-snapshot criada, selecione Snapshot de origem.

  8. Certifique-se de que o Modo está definido como Ler/Gravar.

  9. Clique em Concluído.

Cloud Shell

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie um novo disco permanente usando o snapshot do disco de produção como conteúdo:

    gcloud beta compute disks create sql-server-test-data \
         --size=100GB \
         --source-snapshot=sql-server-prod-data-snapshot \
         --zone="${ZONE}"
    
  3. Anexe o novo disco à instância sql-server-test com permissões de leitura/gravação.

    gcloud compute instances attach-disk sql-server-test \
        --disk=sql-server-test-data --mode=rw
    

Montar o novo disco de dados no Windows

O disco que você criou é anexado à instância de VM, mas fica off-line. O volume é definido como somente leitura. Para configurar o volume como leitura/gravação e montável, execute as etapas a seguir:

  1. Na janela do cliente RDP conectado à instância sql-server-test, clique no botão Iniciar na barra de tarefas do Windows, digite diskpart e clique em diskpart para abrir o DiskPart.
  2. Quando solicitado a permitir que o app faça alterações, clique em Sim.
  3. Exiba uma lista dos discos anexados à instância:

    list disk
    

    A saída é esta:

    
    Disk ###  Status         Size     Free     Dyn  Gpt
    --------  -------------  -------  -------  ---  ---
    Disk 0    Online           50 GB      0 B
    Disk 1    Offline         100 GB      0 B       *
     

    Seu disco de dados (disco 1, 100 GB) está off-line.

  4. Selecione o disco de dados:

    select disk 1
    
  5. Deixe o disco on-line:

    online disk
    
  6. Liste os volumes disponíveis:

    list volume
    

    A saída é esta:

    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
    

    Volume 2 (99 GB) é o volume de dados. Ele consta como Oculto sem atribuição de letra de unidade.

  7. Selecione o volume:

    select volume 2
    
  8. Limpe os atributos que foram definidos ao criar o volume pelo snapshot:

    attr volume clear readonly hidden nodefaultdriveletter shadowcopy
    

    Esse comando torna o volume montável.

  9. Monte o volume como unidade D:

    assign letter=d
    
  10. Saia do DiskPart:

    exit
    

Redefinir a propriedade e as permissões do arquivo

Como você tirou um snapshot da instância sql-server-prod para criar o disco de dados, os IDs de usuário referentes a propriedade e permissões de arquivo são diferentes dos pertencentes à instância sql-server-test. Para tornar os arquivos legíveis ao usuário local e ao usuário MSSQLSERVER, altere a propriedade dos arquivos para um usuário na instância sql-server-test e atualize as permissões.

  1. Na janela do cliente RDP conectado à instância sql-server-test, clique no botão Iniciar na barra de tarefas do Windows e digite cmd.
  2. Abra o app Prompt de Comando como administrador.
  3. Defina o proprietário dos arquivos na pasta sql-server-data como o usuário do serviço MSSQLSERVER:

    icacls d:\sql-server-data /setowner "nt service\mssqlserver" /t
    
  4. Redefina todas as permissões em todos os arquivos na pasta de nível superior sql-server-data:

    icacls d:\sql-server-data /reset /t
    
  5. Atualize as listas de controle de acesso (ACLs) da pasta 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
    
  6. Desative a herança da pasta raiz da unidade para que apenas as permissões anteriores sejam aplicadas:

    icacls d:\sql-server-data /inheritancelevel:r
    
  7. Saia do app Prompt de Comando:

    exit
    

Agora, a instância do SQL Server e o usuário local na instância sql-server-test podem acessar os arquivos do banco de dados.

Anexar o banco de dados clonado

Agora, anexe o banco de dados clonado na unidade D (data) à instância de teste do SQL Server. É possível fazer isso de maneira interativa, usando os assistentes do Microsoft SQL Server Management Studio, ou diretamente, executando um comando Transact-SQL.

Assistente do SSMS

  1. Na sessão de protocolo RDP conectada à instância sql-server-test, clique no botão Iniciar na barra de tarefas do Windows, digite ssms e selecione Microsoft SQL Server Management Studio (Executar como administrador).
  2. Clique em Conectar para se conectar ao mecanismo de banco de dados sql-server-test usando a autenticação do Windows.
  3. No "Pesquisador de Objetos", clique com o botão direito do mouse em Bancos de Dados e selecione Anexar.
  4. No assistente de Anexar Bancos de Dados, clique em Adicionar.
  5. Procure o diretório D:\sql-server-data\wideworldimporters, clique no arquivo WideWorldImporters.mdf e em OK.
  6. Clique em OK para anexar o banco de dados.

    Após alguns instantes, o banco de dados clonado será anexado. Clique em Atualizar no "Pesquisador de Objetos" para ver se o banco de dados consta da árvore de bancos de dados.

Transact-SQL

  1. Em uma sessão de protocolo RDP conectada à instância sql-server-test, clique no botão Iniciar na barra de tarefas do Windows, digite ssms e selecione Microsoft SQL Server Management Studio (Executar como administrador).
  2. Clique em Conectar para se conectar ao mecanismo de banco de dados sql-server-prod usando a autenticação do Windows.
  3. Selecione Arquivo > Novo > Consulta com Conexão Atual para abrir uma nova janela de consulta.
  4. Anexe os dados e arquivos de registros no diretório 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
    
  5. Clique com o botão direito do mouse no código da consulta e, em seguida, em Executar.

    Após alguns instantes, o banco de dados clonado será anexado. Clique em Atualizar no "Pesquisador de Objetos" para ver se o banco de dados consta da árvore de bancos de dados. Depois que o banco de dados for anexado, feche a janela de consulta sem salvar.

Para verificar se o banco de dados de amostra está funcionando, execute uma consulta.

  1. No SQL Server Management Studio, selecione Arquivo > Novo > Consulta com Conexão Atual para abrir uma nova janela de consulta e copie o código a seguir:

    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;
    

    Essa consulta recupera informações resumidas das últimas cem faturas entregues.

  2. Para executar a consulta, clique com o botão direito do mouse na janela de consulta e selecione Executar.

    O painel Resultados exibe as informações resumidas.

    Captura de tela que mostra o painel "Resultados" de uma consulta para o banco de dados de amostra.

Agora que você já sabe como clonar um banco de dados usando snapshots de disco permanente, tente clonar um banco de dados usando backup e restauração. Para concluir o tutorial desta segunda abordagem, exclua o banco de dados clonado da instância sql-server-test.

Excluir o banco de dados clonado

Para excluir o banco de dados clonado que você criou usando snapshots de disco, execute as etapas a seguir.

Assistente do SSMS

  1. Na sessão RDP conectada à instância sql-server-test, abra o Microsoft SQL Server Management Studio e se conecte ao mecanismo de banco de dados sql-server-test.
  2. No "Pesquisador de Objetos", expanda Bancos de Dados, clique com o botão direito do mouse no banco de dados WorldWideImporters e selecione Excluir.
  3. No assistente Excluir Objeto, verifique se a caixa de seleção Fechar conexões atuais está marcada.
  4. Clique em OK.

Transact-SQL

  1. Na sessão RDP conectada à instância sql-server-test, abra o Microsoft SQL Server Management Studio e se conecte ao mecanismo de banco de dados sql-server-test.
  2. Para fechar todas as conexões com o banco de dados WideWorldImporters e excluí-lo, copie o script a seguir em uma nova janela de consulta, clique com o botão direito do mouse no código e clique em Executar:

    USE [master]
    GO
    ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    DROP DATABASE [WideWorldImporters]
    GO
    

    Depois que o banco de dados for excluído, feche a janela de consulta sem salvar. Clique em Atualizar no "Pesquisador de Objetos" para confirmar a exclusão do banco de dados.

Como clonar usando backup e restauração

Um segundo método para clonar um banco de dados SQL Server em execução no Compute Engine é usar o recurso de backup e restauração nativo do SQL Server. Com essa abordagem, você transfere o backup usando o Cloud Storage.

Nesta seção do tutorial, você usará os recursos criados na seção Como clonar o banco de dados usando snapshots de disco do Compute Engine. Se você não concluiu essa seção, faça isso antes de continuar.

Nesta seção do tutorial, siga as etapas abaixo.

  • crie um bucket do Cloud Storage;
  • faça backup do banco de dados no servidor de produção;
  • copie o arquivo de backup do servidor de produção para o Cloud Storage;
  • copie o arquivo de backup do Cloud Storage para o servidor de teste;
  • restaure o backup na instância de teste.

No diagrama a seguir, veja como clonar um banco de dados usando o Cloud Storage para transferir um backup.

Diagrama que mostra a configuração para clonar um banco de dados SQL Server usando o Cloud Storage.

Como os sistemas externos ao Google Cloud podem receber acesso ao Cloud Storage, use essa abordagem para clonar bancos de dados de instâncias externas do SQL Server.

Criar um bucket do Cloud Storage

É preciso criar um bucket do Cloud Storage que armazene os arquivos de backup enquanto você os transfere da instância sql-server-prod para a instância sql-server-test.

Console

  1. No console do Google Cloud, acesse a página Navegador do Cloud Storage.

    Acessar a página "Navegador do Cloud Storage"

  2. Clique em Criar bucket.

  3. Dê um nome para o bucket, como project-name-bucket.

    Substitua o seguinte:

    • project-name: o ID de seu projeto do Google Cloud.
  4. Expanda Escolha uma classe de armazenamento padrão e, em seguida, selecione Regional.

  5. Em Local, selecione us-east1.

  6. Clique em Criar.

Cloud Shell

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie um bucket do Cloud Storage na mesma região das instâncias de VM:

    gcloud storage buckets create "gs://$(gcloud config get-value project)-bucket" --location="${REGION}"
    

Fazer um backup completo e pontual do banco de dados

Talvez você já tenha feito backups no seu ambiente de produção. Esses backups podem ser usados como base para clonar o banco de dados. Neste tutorial, você fará um backup somente para cópia para que ele não afete as programações de backup completo ou incremental atuais.

Assistente do SSMS

  1. Na sessão RDP conectada à instância sql-server-prod, abra o Microsoft SQL Server Management Studio e se conecte ao mecanismo de banco de dados sql-server-prod.
  2. No "Pesquisador de Objetos", expanda Bancos de Dados, clique com o botão direito do mouse no banco de dados WorldWideImporters, selecione Tarefas e, em seguida, Fazer Backup.
  3. No assistente Fazer Backup do Banco de Dados, verifique se os seguintes valores estão definidos:
    • O Tipo de backup está definido como Completo.
    • A opção Backup somente para cópia está selecionada.
    • Fazer backup para está definido como Disco.
  4. Para adicionar um arquivo de backup, clique em Adicionar.
  5. No campo Destino, insira D:\sql-server-data\WideWorldImporters-copy.bak.

    Captura de tela que mostra a caixa de diálogo "Fazer Backup do Banco de Dados".

  6. Selecione a página Opções de Mídia e, em seguida, Substituir todos os conjuntos de backup atuais.

  7. Selecione a página Opções de Backup e altere Definir compactação de backup para Compactar backup.

  8. Para criar o backup, clique em OK.

    Ele leva alguns minutos para ser criado.

Transact-SQL

  1. Na sessão RDP conectada à instância sql-server-prod, abra o Microsoft SQL Server Management Studio e se conecte ao mecanismo de banco de dados sql-server-prod.
  2. Para executar um backup compactado somente para cópia do banco de dados WideWorldImporters no arquivo d:\sql-server-data\WideWorldImporters-copy.bak, copie o script a seguir em uma nova janela de consulta, clique com o botão direito do mouse no código e clique em Executar.

    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
    

    Aguarde alguns minutos para que o servidor crie o backup. Após a conclusão do backup do banco de dados, feche a janela de consulta sem salvar.

Copiar o arquivo de backup para o Cloud Storage

  1. Na sessão RDP conectada à instância sql-server-prod, abra uma janela do Windows PowerShell.
  2. Copie o arquivo de backup no bucket do Cloud Storage criado anteriormente:

    gcloud storage cp d:\sql-server-data\WideWorldImporters-copy.bak "gs://$(gcloud config get-value project)-bucket/" --no-clobber
    
  3. Saia do PowerShell.

    exit
    

Copiar o arquivo de backup do Cloud Storage para o sql-server-test

  1. Na sessão RDP conectada à instância sql-server-test, abra uma janela do Windows PowerShell.
  2. Copie o arquivo de backup no bucket do Cloud Storage criado anteriormente:

    gcloud storage cp "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" d:\sql-server-data\
    
  3. Saia do PowerShell.

    exit
    

Sua instância de teste agora tem o backup de cópia completa do banco de dados no disco local correspondente.

Restaurar o backup

Agora é possível restaurar o backup de cópia completa na unidade D (data) da instância sql-server-test.

Assistente do SSMS

  1. Na sessão RDP conectada à instância sql-server-test, abra o Microsoft SQL Server Management Studio e se conecte ao mecanismo de banco de dados sql-server-test.
  2. No Pesquisador de Objetos, clique com o botão direito do mouse em Bancos de Dados e selecione Restaurar Banco de Dados.
  3. Em Origem, selecione o Dispositivo e clique no botão [...] ao lado do nome do dispositivo.
  4. Na caixa de diálogo Selecionar dispositivos de backup, selecione Arquivo na lista Tipo de mídia de backup e clique em Adicionar.
  5. No seletor de arquivos, acesse D:\sql-server-data, clique no arquivo WideWorldImporters-copy.bak e em OK.
  6. Clique em OK para fechar a caixa de diálogo Selecionar dispositivos de backup.

    A caixa de diálogo Restaurar Banco de Dados agora é preenchida com dados sobre o backup do banco de dados WideWorldImporters.

  7. Em Selecionar uma página, clique em Arquivos.

  8. Selecione Realocar todos os arquivos para a pasta.

  9. Nos campos Pasta de arquivo de dados e Pasta de arquivo de registros, insira D:\sql-server-data\wideworldimporters.

    Captura de tela que mostra a caixa de diálogo "Restaurar Banco de Dados".

  10. Para iniciar a operação de restauração, clique em OK.

    Quando o processo for concluído, você verá a mensagem Database 'WideWorldImporters' restored successfully.

Transact-SQL

  1. Na sessão RDP conectada à instância sql-server-test, abra o Microsoft SQL Server Management Studio e se conecte ao mecanismo de banco de dados sql-server-test.
  2. Selecione Arquivo > Novo > Consulta com Conexão Atual para abrir uma nova janela de consulta.
  3. Copie o comando T-SQL a seguir para iniciar uma restauração do arquivo de backup copiado do Cloud Storage, restaurando o banco de dados e o arquivo de registro no diretório 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
    
  4. Clique com o botão direito do mouse no código e, em seguida, em Executar.

    Após alguns minutos, a restauração do banco de dados é concluída. Clique em Atualizar no "Pesquisador de Objetos" para ver se o banco de dados consta da árvore de bancos de dados. Após a conclusão da restauração do banco de dados, feche a janela de consulta sem salvar.

Para demonstrar que o banco de dados está funcionando, execute uma consulta.

  1. No Microsoft SQL Management Studio, selecione Arquivo > Novo > Consulta com Conexão Atual para abrir uma nova janela de consulta e copie o código a seguir:

    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;
    

    Essa consulta recupera informações resumidas das últimas cem faturas entregues.

  2. Clique com o botão direito do mouse na janela de consulta e, em seguida, em Executar.

    O painel Resultados exibe as informações resumidas.

    Captura de tela que mostra o painel "Resultados" de uma consulta para o banco de dados de amostra.

Como usar o Cloud SQL como destino de clonagem

Se o banco de dados de destino estiver hospedado no Cloud SQL e o banco de dados de origem estiver no Compute Engine, o único mecanismo compatível com a clonagem será exportar o banco de dados para o Cloud Storage e importá-lo para o Cloud SQL.

Para este tutorial, você reutiliza o backup criado durante a seção anterior.

Criar uma instância do Cloud SQL for SQL Server.

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie uma instância do Cloud SQL para SQL Server executando a mesma versão do banco de dados da instância sql-server-prod:

    gcloud sql instances create sqlserver-cloudsql  \
      --database-version=SQLSERVER_2022_STANDARD \
      --cpu=2 \
      --memory=5GB \
      --root-password=sqlserver12@ \
      --region=${REGION}
    

    Isso cria uma instância com o usuário raiz de sqlserver com uma senha sqlserver12@.

Atualizar permissões do objeto

As permissões corretas precisam ser definidas no bucket do Cloud Storage e no objeto de backup para que a conta de serviço do Cloud SQL possa lê-las. Essas permissões são definidas automaticamente quando você usa o console do Google Cloud para importar o objeto, ou é possível defini-las usando os comandos da gcloud.

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Defina uma variável de ambiente contendo o endereço da conta de serviço da instância do Cloud SQL:

    CLOUDSQL_SA="$(gcloud sql instances describe sqlserver-cloudsql --format='get(serviceAccountEmailAddress)')"
    
  3. Adicione a conta de serviço à política do IAM do bucket como leitor e gravador:

    gcloud storage buckets add-iam-policy-binding "gs://$(gcloud config get-value project)-bucket/" \
        --member=user:"${CLOUDSQL_SA}" --role=roles/storage.objectUser
    

Importar o banco de dados exportado

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Importe o arquivo exportado para sua instância do Cloud SQL:

    gcloud sql import bak sqlserver-cloudsql \
        "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" \
        --database WideWorldImporters
    

    Quando solicitado, digite y.

  3. Instale o pacote de ferramentas do SQL Server:

    sudo apt install -y mssql-tools
    

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

    Use essas ferramentas para se conectar ao Cloud SQL a partir do Cloud Shell para executar consultas na instância do Cloud SQL.

  4. Conecte o proxy do Cloud SQL à sua instância do SQL Server:

    CONNECTION_NAME=$(gcloud sql instances describe sqlserver-cloudsql --format='value(connectionName)')
    cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  5. Para verificar se o banco de dados clonado está funcionando, execute uma consulta:

    /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 solicitado, digite a senha do usuário sqlserver do servidor de banco de dados sqlserver-cloudsql (sqlserver12@).

    Essa consulta recupera informações resumidas das últimas cem faturas entregues.

    A saída é esta:

    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
    ...
    

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto do Google Cloud criado para este tutorial.

  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.

A seguir