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:
- Compute Engine
- Cloud Storage
- Microsoft Windows and SQL server licenses
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
- Ative a API Compute Engine. Ativar a API
Verifique se você atende a esses outros pré-requisitos:
- Usa o navegador Google Chrome.
- Instale um cliente do Protocolo de Área de trabalho remota (RDP, na sigla em inglês) de sua escolha. Para mais informações, consulte Clientes de Área de Trabalho Remota da Microsoft. Se você já tiver um cliente RDP instalado, pule esta tarefa.
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.
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
No console do Google Cloud, acesse a página Instâncias de VMs.
Clique em Criar.
No campo Nome, digite
sql-server-prod
.Em Região, selecione us-east1.
Em Zona, selecione us-east1-b.
Em Configuração da máquina, altere o Tipo de máquina para n1-standard-2 (2 vCPUs).
Ao lado da descrição Disco de inicialização, clique em Alterar.
No painel Disco de inicialização, clique na guia Imagens públicas.
Na lista suspensa Sistema operacional, selecione SQL Server no Windows Server.
Na lista suspensa Versão, selecione SQL Server 2022 Standard no Windows Server 2022 Datacenter.
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.
Clique em Selecionar.
Em Identidade e acesso à API, defina os Escopos de acesso como Permitir acesso total a todas as APIs do Cloud.
Expanda Gerenciamento, segurança, discos, rede, locatário único.
Clique na guia Discos.
Clique em Adicionar novo disco add.
No campo Nome, digite
sql-server-prod-data
.No campo Tamanho (GB), digite
100
.Clique em Concluído.
Clique em Criar.
Cloud Shell
Abra o Cloud Shell.
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.
Defina o ID do projeto padrão:
gcloud config set project
PROJECT_ID
Substitua
PROJECT_ID
pelo ID do projeto do Google Cloud.Defina sua região padrão:
gcloud config set compute/region
REGION
Substitua
REGION
pelo ID da região em que você quer implantar.Defina a zona padrão:
gcloud config set compute/zone
ZONE
Substitua
ZONE
pelo ID da zona em que você quer implantar.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
No console do Google Cloud, acesse a página Instâncias de VMs.
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.
Clique no nome da instância
sql-server-prod
para abrir a página Detalhes da instância de VM.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.
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.
Quando solicitado, insira a senha recém-gerada e clique em OK.
Para aceitar o certificado do servidor e fazer login na instância remota do Windows, clique em Continuar.
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.
- Em uma sessão RDP conectada à instância
sql-server-prod
, clique no botão Iniciar na barra de tarefas do Windows, digitediskpart
e clique em diskpart para abrir o DiskPart. - Quando solicitado a permitir que o app faça alterações, clique em Sim.
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.
Selecione o disco de dados:
select disk 1
Inicialize o disco:
clean
Crie uma tabela de partição GUID:
convert gpt
Crie a partição de dados usando o disco inteiro:
create partition primary
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.
Selecione o volume:
select volume 2
Formate a partição com o sistema de arquivos NTFS e rotule-a como
data
:format quick fs=ntfs label=data
Monte o disco como unidade D:
assign letter=d
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:
- Crie uma estrutura de diretórios na unidade D (
data
) para armazenar o banco de dados. - Faça o download do arquivo de backup completo do banco de dados de amostra Wide World Importers para SQL Server (em inglês). Esse banco de dados simula o banco de dados de produção que você quer clonar.
Para criar o diretório e fazer o download do arquivo de backup, siga estas etapas:
Na sessão RDP, clique no botão Iniciar na barra de tarefas do Windows, digite
PowerShell
e selecione o app Windows PowerShell.No prompt do PowerShell, crie uma estrutura de diretórios para o armazenamento do banco de dados:
mkdir D:\sql-server-data\wideworldimporters
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
- 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). - 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. - No Pesquisador de Objetos, clique com o botão direito do mouse em Bancos de Dados e selecione Restaurar Banco de Dados.
- Em Origem, selecione Dispositivo e clique no botão [...] ao lado do nome do dispositivo.
- 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.
- No seletor de arquivos, acesse
D:\sql-server-data
, clique no arquivoWideWorldImporters-Full.bak
e em OK. 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.
Em Selecionar uma página, clique em Arquivos.
Marque a caixa de seleção Realocar todos os arquivos para a pasta.
Nos campos Pasta de arquivo de dados e Pasta de arquivo de registros, insira
D:\sql-server-data\wideworldimporters
.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
- 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). - 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. - Selecione Arquivo > Novo > Consulta com Conexão Atual para abrir uma nova janela de consulta.
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
.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 refresh 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.
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.
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.
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
Acesse a página Instâncias da VM.
Clique em Criar.
No campo Nome, digite
sql-server-test
.Em Região, selecione us-east1.
Em Zona, selecione us-east1-b.
Em Configuração da máquina, altere o Tipo de máquina para n1-standard-2 (2 vCPUs).
Ao lado da imagem Disco de inicialização, clique em Alterar.
No painel Disco de inicialização, clique na guia Imagens públicas.
Na lista suspensa Sistema operacional, selecione SQL Server no Windows Server.
Na lista suspensa Versão, selecione SQL Server 2022 Standard no Windows Server 2022 Datacenter.
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.
Clique em Selecionar.
Em Identidade e acesso à API, defina os Escopos de acesso como Permitir acesso total a todas as APIs do Cloud.
Clique em Criar.
Cloud Shell
Abra o Cloud Shell.
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
No console do Google Cloud, acesse a página Instâncias de VMs.
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.
Clique no nome da instância
sql-server-test
para exibir a página Detalhes da instância de VM.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.
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.
Quando solicitado, insira a senha recém-gerada e clique em OK.
Para aceitar o certificado do servidor e fazer login na instância remota do Windows, clique em Continuar.
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.
Criar o snapshot do disco
Console
No console do Google Cloud, acesse a página Instâncias de VMs.
Clique no nome da instância
sql-server-prod
.Na página Detalhes da instância de VM clique no disco
sql-server-prod-data
.Clique em Criar snapshot.
Nomeie o snapshot como
sql-server-prod-data-snapshot
.Em Local, selecione Regional.
Certifique-se de que a região está definida como
us-east1
(a mesma de suas instâncias de VM).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.
Clique em Criar.
Após alguns minutos, a criação de seu snapshot é concluída.
Cloud Shell
Abra o Cloud Shell.
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.
No console do Google Cloud, acesse a página Instâncias de VMs.
Clique no nome da instância
sql-server-test
.Na página Detalhes da instância de VM, clique em Editar.
Clique em Adicionar novo disco add.
Dê o nome
sql-server-test-data
ao novo disco.Em Tipo de origem, selecione Snapshot.
Para a instância
sql-server-prod-data-snapshot
criada, selecione Snapshot de origem.Certifique-se de que o Modo está definido como Ler/Gravar.
Clique em Concluído.
Cloud Shell
Abra o Cloud Shell.
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}"
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:
- Na janela do cliente RDP conectado à instância
sql-server-test
, clique no botão Iniciar na barra de tarefas do Windows, digitediskpart
e clique em diskpart para abrir o DiskPart. - Quando solicitado a permitir que o app faça alterações, clique em Sim.
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.
Selecione o disco de dados:
select disk 1
Deixe o disco on-line:
online disk
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.
Selecione o volume:
select volume 2
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.
Monte o volume como unidade D:
assign letter=d
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.
- Na janela do cliente RDP conectado à instância
sql-server-test
, clique no botão Iniciar na barra de tarefas do Windows e digitecmd
. - Abra o app Prompt de Comando como administrador.
Defina o proprietário dos arquivos na pasta
sql-server-data
como o usuário do serviçoMSSQLSERVER
:icacls d:\sql-server-data /setowner "nt service\mssqlserver" /t
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
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
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
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
- Na sessão de protocolo RDP conectada à instância
sql-server-test
, clique no botão Iniciar na barra de tarefas do Windows, digitessms
e selecione Microsoft SQL Server Management Studio (Executar como administrador). - Clique em Conectar para se conectar ao mecanismo de banco de dados
sql-server-test
usando a autenticação do Windows. - No "Pesquisador de Objetos", clique com o botão direito do mouse em Bancos de Dados e selecione Anexar.
- No assistente de Anexar Bancos de Dados, clique em Adicionar.
- Procure o diretório
D:\sql-server-data\wideworldimporters
, clique no arquivoWideWorldImporters.mdf
e em OK. Clique em OK para anexar o banco de dados.
Após alguns instantes, o banco de dados clonado será anexado. Clique em Atualizar refresh no "Pesquisador de Objetos" para ver se o banco de dados consta da árvore de bancos de dados.
Transact-SQL
- Em uma sessão de protocolo RDP conectada à instância
sql-server-test
, clique no botão Iniciar na barra de tarefas do Windows, digitessms
e selecione Microsoft SQL Server Management Studio (Executar como administrador). - Clique em Conectar para se conectar ao mecanismo de banco de dados
sql-server-prod
usando a autenticação do Windows. - Selecione Arquivo > Novo > Consulta com Conexão Atual para abrir uma nova janela de consulta.
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
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 refresh 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.
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.
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.
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
- 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 dadossql-server-test
. - No "Pesquisador de Objetos", expanda Bancos de Dados, clique com o botão direito do mouse no banco de dados
WorldWideImporters
e selecione Excluir. - No assistente Excluir Objeto, verifique se a caixa de seleção Fechar conexões atuais está marcada.
- Clique em OK.
Transact-SQL
- 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 dadossql-server-test
. 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 refresh 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.
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
No console do Google Cloud, acesse a página Navegador do Cloud Storage.
Clique em Criar bucket.
Dê um nome para o bucket, como
project-name
-bucket.Substitua o seguinte:
project-name
: o ID de seu projeto do Google Cloud.
Expanda Escolha uma classe de armazenamento padrão e, em seguida, selecione Regional.
Em Local, selecione us-east1.
Clique em Criar.
Cloud Shell
Abra o Cloud Shell.
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
- 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 dadossql-server-prod
. - 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. - 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.
- Para adicionar um arquivo de backup, clique em Adicionar.
No campo Destino, insira
D:\sql-server-data\WideWorldImporters-copy.bak
.Selecione a página Opções de Mídia e, em seguida, Substituir todos os conjuntos de backup atuais.
Selecione a página Opções de Backup e altere Definir compactação de backup para Compactar backup.
Para criar o backup, clique em OK.
Ele leva alguns minutos para ser criado.
Transact-SQL
- 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 dadossql-server-prod
. 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
- Na sessão RDP conectada à instância
sql-server-prod
, abra uma janela do Windows PowerShell. 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
Saia do PowerShell.
exit
Copiar o arquivo de backup do Cloud Storage para o sql-server-test
- Na sessão RDP conectada à instância
sql-server-test
, abra uma janela do Windows PowerShell. 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\
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
- 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 dadossql-server-test
. - No Pesquisador de Objetos, clique com o botão direito do mouse em Bancos de Dados e selecione Restaurar Banco de Dados.
- Em Origem, selecione o Dispositivo e clique no botão [...] ao lado do nome do dispositivo.
- Na caixa de diálogo Selecionar dispositivos de backup, selecione Arquivo na lista Tipo de mídia de backup e clique em Adicionar.
- No seletor de arquivos, acesse
D:\sql-server-data
, clique no arquivoWideWorldImporters-copy.bak
e em OK. 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
.Em Selecionar uma página, clique em Arquivos.
Selecione Realocar todos os arquivos para a pasta.
Nos campos Pasta de arquivo de dados e Pasta de arquivo de registros, insira
D:\sql-server-data\wideworldimporters
.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
- 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 dadossql-server-test
. - Selecione Arquivo > Novo > Consulta com Conexão Atual para abrir uma nova janela de consulta.
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
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 refresh 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.
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.
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.
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.
Abra o Cloud Shell.
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 senhasqlserver12@
.
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
.
Abra o Cloud Shell.
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)')"
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
Abra o Cloud Shell.
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
.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.
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 &
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 dadossqlserver-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.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
A seguir
- Conheça as práticas recomendadas para executar instâncias do SQL Server no Compute Engine.
- Confira arquiteturas de referência, diagramas e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.