Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:Instância Gerenciada de SQL do Azure
A replicação transacional permite replicar dados de um banco de dados para outro hospedado no SQL Server ou na Instância Gerenciada de SQL do Azure. A Instância Gerenciada de SQL pode ser um editor, distribuidor ou assinante na topologia de replicação. Confira configurações de replicação transacional para obter as configurações disponíveis.
Neste tutorial, você aprenderá como:
- Configure uma instância gerenciada de SQL como um editor de replicação.
- Configure uma instância gerenciada de SQL como um distribuidor de replicação.
- Configurar o SQL Server como um assinante.
Este tutorial destina-se a um público experiente e pressupõe que o usuário esteja familiarizado com a implantação e a conexão com instâncias gerenciadas de SQL e VMs do SQL Server no Azure.
Observação
Este artigo descreve o uso de replicação transacional na Instância Gerenciada de SQL do Azure. Não está relacionado a grupos de failover, um recurso da Instância Gerenciada de SQL do Azure que permite criar réplicas legíveis completas de instâncias individuais. Há considerações adicionais ao configurar replicação transacional com grupos de failover.
Pré-requisitos
Para concluir o tutorial, verifique se você tem os seguintes pré-requisitos:
- Uma assinatura do Azure.
- Experiência com a implantação de duas instâncias gerenciadas de SQL na mesma rede virtual.
- Um assinante do SQL Server, local ou em uma VM do Azure. Este tutorial usa uma VM do Azure.
- SQL Server Management Studio (SSMS) 18.0 ou posterior.
- A versão mais recente do Azure PowerShell.
- As portas 445 e 1433 permitem o tráfego SQL no firewall do Azure e no Firewall do Windows.
Nomes e configurações de rede necessários
Este tutorial usa os seguintes nomes de recursos e configurações:
| Resource | Nome | Anotações |
|---|---|---|
| Instância gerenciada de SQL do Publisher | sql-mi-publisher |
Acrescentar caracteres aleatórios para exclusividade |
| Rede virtual do Publicador | vnet-sql-mi-publisher |
Hospeda a instância do editor |
| Instância gerenciada de SQL do Distribuidor | sql-mi-distributor |
Deve estar na mesma VNet que o publicador |
| VM do SQL Server (assinante) | sql-vm-subscriber |
Usar uma versão do SQL Server com suporte de acordo com a matriz de suporte |
| Rede virtual do assinante | sql-vm-subscriber-vnet |
Requer o emparelhamento de VNet com a VNet do editor |
| Zona DNS privada | repldns.com |
Nome arbitrário para roteamento DNS |
| Portas necessárias | 445 (SMB), 1433 (SQL) | Deve estar aberto no Firewall do Azure e no Firewall do Windows |
Criar o grupo de recursos
Use o snippet de código do PowerShell a seguir para criar um novo grupo de recursos.
Defina suas variáveis:
$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"
Crie o grupo de recursos:
New-AzResourceGroup -Name $ResourceGroupName -Location $Location
Verifique se o grupo de recursos foi criado:
Get-AzResourceGroup -Name $ResourceGroupName | Select-Object ResourceGroupName, Location
Criar duas instâncias gerenciadas de SQL
Crie duas instâncias gerenciadas de SQL nesse novo grupo de recursos usando o portal do Azure.
O nome da instância gerenciada de SQL do editor deve ser
sql-mi-publisher(juntamente com alguns caracteres para randomização) e o nome da rede virtual deve servnet-sql-mi-publisher.O nome da instância gerenciada de SQL do distribuidor deve ser
sql-mi-distributor(juntamente com alguns caracteres para randomização) e deve estar na mesma rede virtual que a instância gerenciada de SQL do editor.
Para obter mais informações sobre como criar uma instância gerenciada de SQL, consulte Início Rápido: Criar Instância Gerenciada de SQL do Azure.
Observação
Para simplificar, este tutorial coloca a instância gerenciada de SQL do distribuidor na mesma rede virtual que o publicador. No entanto, você pode criar o distribuidor em uma rede virtual separada com o emparelhamento VNet apropriado.
Criar uma VM do SQL Server
Crie uma máquina virtual do SQL Server no portal do Azure. A máquina virtual do SQL Server deve ter as seguintes características:
- Nome:
sql-vm-subscriber - Imagem: versão do SQL Server que dá suporte à replicação transacional com a Instância Gerenciada de SQL do Azure, de acordo com a matriz de suporte
- Grupo de recursos: o mesmo que a instância gerenciada de SQL
- Rede virtual:
sql-vm-subscriber-vnet
Para obter mais informações sobre como implantar uma VM do SQL Server no Azure, consulte Início Rápido: Criar o SQL Server em uma máquina virtual do Windows no portal do Azure.
Configurar o Emparelhamento VNET
Configure o emparelhamento VNet para habilitar a comunicação entre a rede virtual das duas instâncias gerenciadas de SQL e a rede virtual do SQL Server.
Defina suas variáveis:
$SubscriptionId = '<SubscriptionID>'
$resourceGroup = 'SQLMI-Repl'
$pubvNet = 'sql-mi-publisher-vnet'
$subvNet = 'sql-vm-subscriber-vnet'
$pubsubName = 'Pub-to-Sub-Peer'
$subpubName = 'Sub-to-Pub-Peer'
Obtenha as redes virtuais:
$virtualNetwork1 = Get-AzVirtualNetwork -ResourceGroupName $resourceGroup -Name $pubvNet
$virtualNetwork2 = Get-AzVirtualNetwork -ResourceGroupName $resourceGroup -Name $subvNet
Configurar o peering (emparelhamento) VNet do publisher para o subscriber.
Add-AzVirtualNetworkPeering `
-Name $pubsubName `
-VirtualNetwork $virtualNetwork1 `
-RemoteVirtualNetworkId $virtualNetwork2.Id
Configurar o emparelhamento VNet de assinante para publicador:
Add-AzVirtualNetworkPeering `
-Name $subpubName `
-VirtualNetwork $virtualNetwork2 `
-RemoteVirtualNetworkId $virtualNetwork1.Id
Verifique o status do emparelhamento na VNet do editor (deve retornar Connected):
Get-AzVirtualNetworkPeering -ResourceGroupName $resourceGroup -VirtualNetworkName $pubvNet | Select-Object PeeringState
Verificar o status do emparelhamento na VNet do assinante (deve retornar Connected):
Get-AzVirtualNetworkPeering -ResourceGroupName $resourceGroup -VirtualNetworkName $subvNet | Select-Object PeeringState
Depois que o emparelhamento VNet for estabelecido, teste a conectividade iniciando o SSMS (SQL Server Management Studio) no host do SQL Server e conectando-se a ambas as instâncias gerenciadas do SQL. Para obter mais informações sobre como se conectar a uma instância gerenciada de SQL usando o SSMS, consulte Usar o SSMS para se conectar à Instância Gerenciada de SQL.
Criar uma zona DNS privada
Uma zona DNS privada permite o roteamento DNS entre as instâncias gerenciadas do SQL e o SQL Server.
Criar uma zona privada
Faça logon no Portal do Azure.
Selecione Criar um recurso para criar um recurso do Azure.
Pesquise
private dns zoneno Azure Marketplace.Escolha o recurso de zona DNS privado publicado pela Microsoft e, em seguida, selecione Criar para criar a zona DNS.
Escolha a assinatura e o grupo de recursos na lista suspensa.
Forneça um nome arbitrário para a zona DNS, como
repldns.com.Selecione Examinar + criar. Examine os parâmetros da zona DNS privada e selecione Criar para criar seu recurso.
Criar um registro A
Acesse a nova Zona DNS privado e selecione Visão geral.
Selecione + Conjunto de registros para criar um registro A.
Forneça o nome da VM do SQL Server, bem como o endereço IP interno privado.
Selecione OK para criar o registro A.
Vincular a rede virtual
Acesse a nova Zona DNS privado e selecione Links de rede virtual.
Selecione + Adicionar.
Forneça um nome para o link, como
Pub-link.Selecione sua assinatura na lista suspensa e selecione a rede virtual para a instância gerenciada de SQL do editor.
Marque a caixa ao lado de Habilitar o registro automático.
Selecione OK para vincular a rede virtual.
Repita essas etapas para adicionar um link para a rede virtual do assinante, com um nome como
Sub-link.
Criar uma conta de armazenamento do Azure
Crie uma conta de armazenamento do Azure para o diretório de trabalho e, em seguida, crie um compartilhamento de arquivo na conta de armazenamento.
Valores de configuração de armazenamento
Você precisa dos seguintes valores ao configurar a distribuição:
-
Formato de caminho do diretório de trabalho:
\\<storage-account-name>.file.core.windows.net\<file-share-name> -
Formato da cadeia de conexão de armazenamento:
DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=<key>;EndpointSuffix=core.windows.net
Importante
Use apenas barras invertidas (\) no caminho do diretório de trabalho. Barras de encaminhamento (/) causam erros de conexão.
Valores de exemplo usados neste tutorial:
| Parâmetro | Valor de exemplo |
|---|---|
| Diretório de trabalho | \\replstorage.file.core.windows.net\replshare |
| Cadeia de conexão | DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net |
Para obter mais informações, confira Gerenciar chaves de acesso da conta de armazenamento.
Criar um banco de dados
Crie um novo banco de dados na instância gerenciada de SQL do editor. Para fazer isso, siga estas etapas:
- Inicialize o SQL Server Management Studio no SQL Server.
- Conecte-se à instância gerenciada de SQL do editor (
sql-mi-publisher). - Abra uma janela Nova Consulta e execute as seguintes consultas T-SQL.
Excluir o banco de dados se ele existir e criar um novo:
USE [master];
GO
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'ReplTutorial')
BEGIN
DROP DATABASE ReplTutorial;
END
GO
CREATE DATABASE [ReplTutorial];
GO
Crie a tabela de teste de replicação:
USE [ReplTutorial];
GO
CREATE TABLE ReplTest (
ID INT NOT NULL PRIMARY KEY,
c1 VARCHAR(100) NOT NULL,
dt1 DATETIME NOT NULL DEFAULT getdate()
);
GO
Inserir dados de exemplo:
USE [ReplTutorial];
GO
INSERT INTO ReplTest (ID, c1) VALUES (6, 'pub');
INSERT INTO ReplTest (ID, c1) VALUES (2, 'pub');
INSERT INTO ReplTest (ID, c1) VALUES (3, 'pub');
INSERT INTO ReplTest (ID, c1) VALUES (4, 'pub');
INSERT INTO ReplTest (ID, c1) VALUES (5, 'pub');
GO
Verifique se os dados foram inseridos:
SELECT * FROM ReplTest;
GO
Saída esperada: 5 linhas com IDs 2, 3, 4, 5 e 6.
Configurar distribuição
Depois que a conectividade for estabelecida e você tiver um banco de dados de exemplo, você poderá configurar a distribuição na instância gerenciada de SQL do distribuidor (sql-mi-distributor).
Parâmetros de configuração de distribuição
Colete os seguintes valores antes de configurar a distribuição:
| Parâmetro | Description | Example |
|---|---|---|
| Nome DNS do distribuidor | FQDN da instância do distribuidor | sql-mi-distributor.b6bf57.database.windows.net |
| Nome DNS do Publicador | FQDN da instância do editor | sql-mi-publisher.b6bf57.database.windows.net |
@working_directory |
Caminho de compartilhamento do Azure Files (usar somente barras) | \\replstorage.file.core.windows.net\replshare |
@storage_connection_string |
Cadeia de conexão da conta de armazenamento | DefaultEndpointsProtocol=https;AccountName=replstorage;... |
@security_mode |
Modo de autenticação (0 = autenticação SQL) | 0 |
@login / @password |
Credenciais de logon do SQL | azureuser |
Configurar a instância do distribuidor
- Inicialize o SQL Server Management Studio no SQL Server.
- Conecte-se à instância gerenciada de SQL do distribuidor (
sql-mi-distributor). - Abra uma janela Nova Consulta e execute os comandos a seguir.
Adicione o distribuidor:
EXECUTE sp_adddistributor
@distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
@password = '<distributor_admin_password>';
Crie o banco de dados de distribuição:
EXECUTE sp_adddistributiondb @database = N'distribution';
Verifique se o banco de dados de distribuição foi criado:
SELECT name FROM sys.databases WHERE name = 'distribution';
Adicione o publicador ao distribuidor:
EXECUTE sp_adddistpublisher
@publisher = 'sql-mi-publisher.b6bf57.database.windows.net',
@distribution_db = N'distribution',
@security_mode = 0,
@login = N'azureuser',
@password = N'<publisher_password>',
@working_directory = N'\\replstorage.file.core.windows.net\replshare',
@storage_connection_string = N'DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net';
Observação
Use apenas barras invertidas (\) para o parâmetro @working_directory. Barras de encaminhamento (/) causam erros de conexão.
Registrar o distribuidor no publicador
- Conecte-se à instância gerenciada de SQL do editor (
sql-mi-publisher). - Abra uma janela Nova Consulta e execute o seguinte comando para registrar o distribuidor:
USE master;
GO
EXECUTE sys.sp_adddistributor
@distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
@password = '<distributor_admin_password>';
Verifique se o distribuidor está registrado:
SELECT * FROM sys.servers WHERE is_distributor = 1;
Criar a publicação
Depois que a distribuição tiver sido configurada, você poderá criar a publicação. Para fazer isso, siga estas etapas:
Inicialize o SQL Server Management Studio no SQL Server.
Conecte-se à instância gerenciada de SQL do editor (
sql-mi-publisher).No Pesquisador de Objetos, expanda o nó Replicação e clique com o botão direito do mouse na pasta Publicação Local. Selecione Nova Publicação... .
Selecione Avançar para ir para a página inicial.
Na página Banco de Dados de Publicação, selecione o banco de dados
ReplTutorialcriado anteriormente. Selecione Avançar.Na página Tipo de publicação, selecione Publicação transacional. Selecione Avançar.
Na página Artigos, marque a caixa ao lado de Tabelas. Selecione Avançar.
Na página Filtrar Linhas da Tabela, selecione Avançar sem adicionar nenhum filtro.
Na página Agente de Instantâneo, marque a caixa ao lado de Criar instantâneo imediatamente e manter o instantâneo disponível para inicializar assinaturas. Selecione Avançar.
Na página Segurança do Agente , selecione Configurações de Segurança.... Forneça as credenciais de logon do SQL Server a serem usadas para o Snapshot Agent e conecte-se ao publicador. Selecione OK para fechar a página Segurança do Agente de Instantâneo. Selecione Avançar.
Na página Ações do Assistente, escolha Criar a publicação e (opcionalmente) escolha Gerar um arquivo de script com etapas para criar a publicação, caso deseje salvar esse script para uso posterior.
Na página Concluir o Assistente , nomeie sua publicação
ReplTeste selecione Avançar para criar sua publicação.Depois que a publicação for criada, atualize o nó Replicação no Pesquisador de Objetos e expanda Publicações Locais para ver a nova publicação.
Criar a assinatura
Depois que a publicação for criada, você poderá criar a assinatura. Para fazer isso, siga estas etapas:
- Inicialize o SQL Server Management Studio no SQL Server.
- Conecte-se à instância gerenciada de SQL do editor (
sql-mi-publisher). - Abra uma janela Nova Consulta e execute os seguintes comandos de Transact-SQL. Use o nome DNS configurado na zona DNS privada como parte do nome do assinante.
Parâmetros de assinatura
| Parâmetro | Value | Description |
|---|---|---|
@subscriber |
sql-vm-subscriber.repldns.com |
Nome DNS do assinante (da zona DNS privada) |
@destination_db |
ReplSub |
Banco de dados do assinante |
@subscription_type |
Push |
Distribuidor envia alterações por push ao assinante |
@sync_type |
automatic |
Sincronização inicial automática |
Adicione a assinatura:
USE [ReplTutorial];
GO
EXEC sp_addsubscription
@publication = N'ReplTest',
@subscriber = N'sql-vm-subscriber.repldns.com',
@destination_db = N'ReplSub',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0;
Adicione o agente de assinatura push:
EXEC sp_addpushsubscription_agent
@publication = N'ReplTest',
@subscriber = N'sql-vm-subscriber.repldns.com',
@subscriber_db = N'ReplSub',
@job_login = N'azureuser',
@job_password = '<Complex Password>',
@subscriber_security_mode = 0,
@subscriber_login = N'azureuser',
@subscriber_password = '<Complex Password>',
@dts_package_location = N'Distributor';
GO
Verifique se a assinatura foi criada:
SELECT * FROM distribution.dbo.MSsubscriptions;
Testar a replicação
Depois que a replicação for configurada, teste-a inserindo novos itens no publicador e observando as alterações se propagarem para o assinante.
Exibir dados iniciais no assinante
Conecte-se ao assinante do SQL Server e execute a seguinte consulta:
USE ReplSub;
GO
SELECT * FROM dbo.ReplTest;
Saída esperada: 5 linhas com IDs 2, 3, 4, 5 e 6 (os dados iniciais do publicador).
Inserir novos dados no publicador
Conecte-se à instância gerenciada de SQL do editor (sql-mi-publisher) e insira uma nova linha:
USE ReplTutorial;
GO
INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub');
Verifique a inserção no editor:
SELECT * FROM ReplTest WHERE ID = 15;
Verificar a replicação para o assinante
Após alguns instantes, conecte-se ao assinante e verifique a nova linha replicada:
USE ReplSub;
GO
SELECT * FROM dbo.ReplTest WHERE ID = 15;
Saída esperada: 1 linha com ID 15 e valor de c1 'pub'.
Limpar os recursos
- Procure o grupo de recursos no portal do Azure.
- Selecione as instâncias gerenciadas de SQL e, em seguida, selecione Excluir. Digite
yesa caixa de texto para confirmar se deseja excluir o recurso e selecione Excluir. Esse processo pode levar algum tempo para ser concluído em segundo plano e, até que seja concluído, você não poderá excluir o cluster virtual ou quaisquer outros recursos dependentes. Monitore a exclusão na guia Atividade para confirmar se a instância gerenciada do SQL foi excluída. - Depois que a instância gerenciada de SQL for excluída, exclua o cluster virtual selecionando-o em seu grupo de recursos e, em seguida, escolhendo Excluir. Digite
yesa caixa de texto para confirmar se deseja excluir o recurso e selecione Excluir. - Exclua todos os recursos restantes. Digite
yesa caixa de texto para confirmar se deseja excluir o recurso e selecione Excluir. - Exclua o grupo de recursos selecionando Excluir grupo de recursos, digitando o nome do grupo
myResourceGroupde recursos e selecionando Excluir.
Erros conhecidos
Não há suporte para logons do Windows
Exception Message: Windows logins are not supported in this version of SQL Server.
O agente foi configurado com um logon do Windows e precisa usar um logon do SQL Server. Use a página Segurança do Agente das Propriedades da publicação para alterar as credenciais de logon para um logon do SQL Server.
Falha ao se conectar ao Armazenamento do Azure
Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 53.
2019-11-19 02:21:05.07 Obtained Azure Storage Connection String for replstorage
2019-11-19 02:21:05.07 Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare'
2019-11-19 02:21:31.21 Failed to connect to Azure Storage '' with OS error: 53.
Isso provavelmente ocorre porque a porta 445 está fechada no firewall do Azure, no Firewall do Windows ou em ambos.
Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 55.
Usar uma barra avançada em vez de barra invertida no caminho do arquivo para o compartilhamento de arquivos também pode causar esse erro.
- Isso é aceitável:
\\replstorage.file.core.windows.net\replshare - Isso pode causar um erro do sistema operacional 55:
\\replstorage.file.core.windows.net/replshare
Não foi possível se conectar ao Assinante
The process could not connect to Subscriber 'SQL-VM-SUBSCRIBER
Could not open a connection to SQL Server [53].
A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections.
Soluções possíveis:
- Verifique se a porta 1433 está aberta.
- Verifique se o TCP/IP está habilitado no assinante.
- Confirme se o nome DNS foi usado ao criar o assinante.
- Verifique se as redes virtuais estão corretamente vinculadas na zona DNS privado.
- Verifique se o registro A está configurado corretamente.
- Verifique se o Emparelhamento VNET está configurado corretamente.
Não há publicações que você pode assinar
Ao adicionar uma nova assinatura usando o assistente Nova Assinatura , na página Publicação , você pode descobrir que não há bancos de dados e publicações listados como opções disponíveis e poderá ver a seguinte mensagem de erro:
There are no publications to which you can subscribe, either because this server has no publications or because you do not have sufficient privileges to access the publications.
Embora seja possível que essa mensagem de erro seja precisa e realmente não haja publicações disponíveis no editor ao qual você se conectou ou não tenha permissões suficientes, uma versão mais antiga do SQL Server Management Studio também pode causar esse erro. Tente atualizar para o SQL Server Management Studio 18.0 ou posterior para descartar isso como uma causa raiz.
Conteúdo relacionado
- O que é Instância Gerenciada de SQL do Azure?
- Introdução à auditoria da Instância Gerenciada de SQL do Azure
- Always Encrypted
- Configurar a Proteção Avançada contra Ameaças na Instância Gerenciada de SQL do Azure
- Mascaramento de dados dinâmicos
- Segurança em nível de linha
- TDE (transparent data encryption)