Configurar réplicas externas

Nesta página, descrevemos como configurar uma instância do Cloud SQL para publicar em um assinante externo ao Cloud SQL ou que esteja no Cloud SQL. A replicação externa no Cloud SQL para SQL Server usa replicação transacional, em que o Cloud SQL atua como um editor para um assinante.

A replicação transacional suporta a publicação de vários tipos de objetos, conforme documentado pela Microsoft. Além disso, no Cloud SQL, as limitações desse recurso são semelhantes às documentadas pela Microsoft.

Alguns dos objetos compatíveis são os seguintes:

  • Tabelas
  • Procedimentos armazenados
  • Visualizações
  • Visualizações de índice
  • Funções definidas pelo usuário

Veja exemplos do processo de publicação nesta página, consulte Publicar objetos de dados e bancos de dados na documentação da Microsoft para detalhes. Considere usar o SQL Server Management Studio (SSMS) no processo de publicação, já que as opções disponíveis podem ser mais aparentes no SSMS.

Consulte também Sobre a replicação no Cloud SQL.

Implementar a replicação transacional

Uma instância do Cloud SQL pode atuar como um editor e distribuidor para um assinante externo por meio da replicação transacional.

Para configurar a replicação transacional, faça o seguinte:

  • Use os procedimentos armazenados fornecidos pelo Cloud SQL. Eles são prefixados por: gcloudsql_transrepl_
  • Refinar a replicação usando procedimentos armazenados fornecidos pela Microsoft

Limitações e pré-requisitos

Consulte esta seção para planejar a replicação transacional.

Limitações

As instâncias que usam alta disponibilidade (HA, na sigla em inglês) não têm um endereço IP de saída consistente. Essas instâncias não podem ser editores se utilizarem conectividade de IP público. Portanto, se uma instância usar alta disponibilidade, ela precisará usar a conectividade do IP privado.

Para definir um artigo, consulte Definir um artigo na documentação da Microsoft, incluindo as limitações e as restrições.

Os procedimentos armazenados fornecidos pelo Cloud SQL são compatíveis apenas com assinatura de push.

Pré-requisitos

A conectividade de rede bidirecional precisa ser configurada entre uma instância do Cloud SQL e a instância do assinante. O assinante pode ser externo, como em um assinante no local, ou interno, do Cloud SQL.

Para instâncias do Cloud SQL que usam IPs públicos, o Cloud SQL usa um endereço IP diferente nos caminhos de saída e de entrada. A réplica precisa permitir o endereço IP de saída da instância principal, que pode ser recuperado usando o comando gcloud:

gcloud sql instances describe [PRIMARY_NAME] --format="default(ipAddresses)"

Para usar o IP privado do Cloud SQL com uma instância local, é necessário configurar o acesso a serviços particulares. Isso exige o peering entre a VPC do Cloud SQL e a VPC do cliente em um intervalo de IP personalizado que precisa ser anunciado.

Ao se conectar no local, o firewall no local precisa permitir conexões de entrada e saída. Especificamente, o firewall no local precisa permitir essas conexões na porta 1433 para o intervalo de sub-rede de acesso a serviços particulares usado para o serviço específico do Google Cloud (neste caso, para o Cloud SQL). Considere permitir um intervalo de sub-rede em vez de um IP específico para cada instância criada.

Para informações relacionadas, consulte:

Permissões e papéis

Permissões de pacote

Os procedimentos armazenados fornecidos pelo Cloud SQL incluem as permissões necessárias para a replicação transacional. São procedimentos armazenados em wrapper que às vezes chamam um ou mais procedimentos armazenados pela Microsoft. Consulte a documentação da Microsoft para ver informações sobre os procedimentos armazenados da Microsoft.

Papel necessário

As contas utilizadas (incluindo para o agente do leitor de registros) precisam de um papel db_owner, como no caso do usuário sqlserver. Para mais informações necessárias, consulte o Modelo de segurança do agente de replicação.

Uso de procedimentos armazenados para publicação, distribuição e assinatura

Nesta seção, você verá as etapas sugeridas para configurar a replicação transacional.

O usuário sqlserver armazenou procedimentos para configurar sua instância do Cloud SQL para atuar como editor. Para informações de referência, consulte Procedimentos armazenados do Cloud SQL.

Como se preparar para a replicação transacional com um banco de dados de teste

Antes de configurar a replicação transacional para um banco de dados de produção, configure sua instância como um editor de objetos de banco de dados de teste. Nesta página, o banco de dados de teste é chamado de banco de dados pub_demo.

Conecte-se à instância do Cloud SQL usando o usuário sqlserver e crie um banco de dados para fins de teste. Por exemplo:

Create Database pub_demo;
GO
USE pub_demo;
CREATE TABLE Employee(employeeId INT primary key);
INSERT INTO Employee([employeeId]) VALUES (1);
INSERT INTO Employee([employeeId]) VALUES (2);

-- Add procedure
CREATE OR ALTER PROCEDURE dbo.p_GetDate
AS
SELECT getdate()

-- Add view
CREATE OR ALTER VIEW dbo.v_GetDbs
AS
SELECT name from sys.databases

-- Function
CREATE OR ALTER FUNCTION dbo.fn_ListDbFiles(@id int)
RETURNS TABLE
AS
RETURN
(
select * from sys.master_files where database_id = @id
)

Configurar o banco de dados de distribuição

Para o banco de dados de distribuição, use o msdb.dbo.gcloudsql_transrepl_setup_distribution, que é um procedimento armazenado por wrapper para esses procedimentos da Microsoft:

Por exemplo:

EXEC msdb.dbo.gcloudsql_transrepl_setup_distribution @login='sqlserver', @password='<password>'

Ativar um banco de dados para publicação

Para ativar ou desativar a opção de publicação de um banco de dados, use msdb.dbo.gcloudsql_transrepl_replicationdboption. Esse procedimento armazenado se aplica à opção de publicação do editor que usa sp_replicationdboption.

Por exemplo:

EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption @db='pub_demo', @value='true'

Adicionar um agente do leitor de registros

É possível configurar um agente do leitor de registros para um banco de dados que usa sp_addlogreader_agent.

Por exemplo:

EXEC msdb.dbo.gcloudsql_transrepl_addlogreader_agent @db='pub_demo', @login='sqlserver', @password='<password>'

Criar a publicação para o banco de dados

É possível usar msdb.dbo.gcloudsql_transrepl_addpublication para criar uma publicação transacional para o banco de dados especificado. Esse procedimento armazenado une sp_addpublish.

Por exemplo:

EXEC msdb.dbo.gcloudsql_transrepl_addpublication @db='pub_demo', @publication='pub1'

Criar um agente de snapshot para a publicação especificada

Para criar um agente de snapshot para o banco de dados do editor, use msdb.dbo.gcloudsql_transrepl_addpublication_snapshot, que une sp_addpublishing_snapshot.

Por exemplo:

EXEC msdb.dbo.gcloudsql_transrepl_addpublication_snapshot @db='pub_demo',  @publication='pub1', @login='sqlserver', @password='<password>'

Criar um artigo e adicioná-lo à publicação

É possível criar um artigo no banco de dados do editor e adicioná-lo à publicação. Como usuário sqlserver, utilize sp_addarticle.

Você também pode adicionar artigos usando SSMS. Para mais informações, consulte Adicionar artigos a uma publicação e descartá-la de uma publicação.

Por exemplo:

USE pub_demo;
GO

EXEC sp_addarticle @publication = 'pub1',
                   @article = 'csql_dbo.employee',
                   @source_owner = 'dbo',
                   @source_object = 'Employee',
                   @description = N'cloudsql_article_table',
                   @schema_option = 0x000000000903409D,
                   @identityrangemanagementoption = N'manual',
                   @destination_table = 'Employee',
                   @destination_owner = 'dbo';

-- add function
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'fn_ListDbFiles',
                   @source_owner = N'dbo',
                   @source_object = N'fn_ListDbFiles',
                   @type = N'func schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'fn_ListDbFiles',
                   @destination_owner = N'dbo',
                   @status = 16

-- add procedure
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'p_GetDate',
                   @source_owner = N'dbo',
                   @source_object = N'p_GetDate',
                   @type = N'proc schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'p_GetDate',
                   @destination_owner = N'dbo',
                   @status = 16

-- add view
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'v_GetDbs',
                   @source_owner = N'dbo',
                   @source_object = N'v_GetDbs',
                   @type = N'view schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'v_GetDbs',
                   @destination_owner = N'dbo',
                   @status = 16

Adicionar a assinatura à publicação

No banco de dados, é possível adicionar a assinatura à publicação. Como usuário sqlserver, defina o status do assinante usando sp_addsubscription.

Por exemplo:

Use pub_demo;
GO
EXEC sp_addsubscription @publication ='pub1',
                        @subscriber = N'10.10.100.1,1433',
                        @destination_db = pub_demo,
                        @subscription_type = N'Push',
                        @sync_type = N'automatic',
                        @article = N'all',
                        @update_mode = N'read only',
                        @subscriber_type = 0

Conectar-se ao assinante e criar um banco de dados de assinaturas

É possível se conectar ao assinante e criar um banco de dados de assinatura para que os dados replicados sejam preenchidos.

Por exemplo:

 Create Database pub_demo

Adicionar um novo job do agente programado para sincronizar a assinatura de push

É possível adicionar um novo job do agente programado para sincronizar a assinatura de push com a publicação. Por exemplo, no banco de dados do editor, execute um comando semelhante ao abaixo. Esse comando usa msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent, um procedimento armazenado de wrapper para sp_addpushsubscription_agent:

EXEC msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent
@db='pub_demo',
@publication = 'pub1',
@subscriber_db= 'pub_demo',
@subscriber_login='sqlserver',
@subscriber_password='<password>',
@subscriber='11.11.111.1,1433'

Iniciar um job de agente de snapshot da publicação

É possível iniciar um job do agente de snapshot da publicação da seguinte maneira:

USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'

Conceder acesso a uma conta para usar o monitor de replicação

Use msdb.dbo.gcloudsql_transrepl_addmonitoraccess para:

  • Fornecer acesso ao monitor de replicação no SSMS
  • Consultar tabelas no banco de dados de distribuição

Assim, esse procedimento armazenado permite usar a instrução SELECT nas tabelas relacionadas à replicação do banco de dados de distribuição, como a tabela MSrepl_errors:

EXEC msdb.dbo.gcloudsql_transrepl_addmonitoraccess
@login = 'sqlserver'

Alterar uma propriedade do banco de dados de distribuição

Você pode mudar o heartbeat_interval. Use o procedimento msdb.dbo.gcloudsql_transrepl_changedistributor_property, que encapsula sp_changedistributor_property.

Para mais informações, consulte a documentação de sp_changedistributor_property. Consulte também a documentação para ver mais informações sobre o valor de heartbeat_interval.

Por exemplo:

EXEC msdb.dbo.gcloudsql_transrepl_changedistributor_property
@property = N'heartbeat_interval',
@value = 90

Usar o monitor de replicação

Clique com o botão direito do mouse no nó de replicação no SSMS e escolha Launch Replication Monitor.

Se você clicar na guia "Agents", verá uma visualização semelhante a esta:

Pastas na guia &quot;Agentes&quot;

Usar procedimentos armazenados para remover replicação

Nesta seção, mostramos as etapas sugeridas para remover a replicação transacional.

Remover a assinatura

Para descartar a assinatura, use o procedimento armazenado sp_dropsubscription.

Veja um exemplo dos comandos para descartar a assinatura:

USE  pub_demo;
GO
EXEC sp_dropsubscription
          @publication = 'csql_pub_pub_demo',
          @article     = N'all',
          @subscriber  = N'11.11.111.1,1433'

Remover o inscrito

Para descartar o assinante, use o procedimento armazenado msdb.dbo.gcloudsql_transrepl_dropsubscriber:

EXEC msdb.dbo.gcloudsql_transrepl_dropsubscriber
 @subscriber  = N'11.11.111.1,1433'

Remover a publicação

Para descartar a publicação, use o procedimento armazenado msdb.dbo.gcloudsql_transrepl_droppublication:

EXEC msdb.dbo.gcloudsql_transrepl_droppublication
  @db = 'pub_demo', @publication='pub1'

Desativar o banco de dados de publicação

Para desativar o banco de dados de publicação, use o procedimento armazenado msdb.dbo.gcloudsql_transrepl_replicationdboption:

EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption
@db='pub_demo',
@value=N'false'

Remover o banco de dados de distribuição

Para remover o banco de dados de distribuição, use o procedimento armazenado msdb.dbo.gcloudsql_transrepl_remove_distribution:

EXEC msdb.dbo.gcloudsql_transrepl_remove_distribution

Dicas e etapas para resolver problemas

Como executar procedimentos armazenados no banco de dados correto

Você pode receber o seguinte erro ao executar sp_addarticle, sp_addsubscription ou sp_startpublication_snapshot:

Only members of the sysadmin fixed server role or db_owner fixed database role can perform this operation.

Além disso, você pode receber o seguinte erro ao executar sp_dropsubscription:

This database is not enabled for publication.

Se esses erros ocorrerem, observe que você precisa executar esses procedimentos armazenados no banco de dados a que eles se aplicam. Use as informações a seguir para confirmar que elas são executadas no banco de dados correto:

USE <database_name>;
GO
<Run stored proc>

Replicação

Os erros de replicação são fornecidos nos registros de erro SQL e em outros locais. É possível consultar algumas tabelas diretamente no banco de dados de distribuição em busca de erros de replicação. Exemplo:

select * from [cloudsql_distribution]..msrepl_errors
select * from [cloudsql_distribution]..MSreplication_monitordata

A Microsoft tem mais exemplos aqui sobre como procurar erros usando o Replication Monitor. Por exemplo, o usuário sqlserver pode não ter acesso a um comando.

Jobs de agente de replicação

Após a configuração da replicação, os novos jobs do agente SQL não ficarão visíveis no SSMS para o usuário sqlserver. No entanto, você pode visualizá-las usando o seguinte:

USE msdb
select * from dbo.sysjobs

Editores ausentes no monitor de replicação

Use o monitoramento de replicação para ver o status da replicação e resolver problemas relacionados.

Por exemplo, quando você configura a replicação e a instância do Cloud SQL do editor usa um endereço IP, o SSMS pode não encontrar o editor. Isso ocorre porque ele não conhece o mapeamento entre o nome do host e o endereço IP.

O monitor de replicação contém uma guia "Publicação" vazia:

Não há linhas na guia &quot;Publicação&quot;

Como solução alternativa, é possível criar aliases no SQL Server Configuration Manager entre o nome do host do SQL Server do editor e o Endereço IP usado para se conectar do SSMS:

  1. Inicie o SQL Server Configuration Manager.

    SQL Server Configuration Manager

  2. Encontre o nó Aliases e selecione-o.

    O nó de aliases foi selecionado

  3. Clique com o botão direito do mouse na caixa abaixo de Nome do alias para criar um novo alias. O mesmo procedimento se aplica a um alias de 32 bits e de 64 bits:

    Caixa suspensa em &quot;Nome do alias&quot;

  4. Recupere o nome do host real da instância do editor usando esta consulta:

    Consultar o nome do host real da sua instância de editor

  5. Na janela do alias, insira estes campos antes de selecionar OK:

    Alias Name: forneça o nome do servidor da consulta na Etapa 4.

    Porta nº::forneça a porta 1433.

    Protocolo: deixe o valor como o padrão de TCP/IP.

    Servidor: forneça o endereço IP da instância do editor.

    Valores para o nome do alias, servidor etc.

  6. Conecte-se usando o novo alias e inicie o monitor de replicação:

    Caixa de diálogo &quot;Conectar ao servidor&quot;

As informações de publicação precisam ser semelhantes a estas:

O monitor de replicação agora exibe uma linha na guia &quot;Publicações&quot;

Para mais informações sobre como resolver problemas de replicação, consulte Solucionador de problemas: encontrar erros com a replicação transacional do SQL Server.

Estimar o tamanho dos artigos necessários para a replicação

Quando você usa uma instância do Cloud SQL como editor, é necessário um snapshot inicial dos artigos a serem gerados para iniciar a replicação. Esse snapshot é armazenada localmente. Dependendo do número de artigos, do tamanho e do tipo de dados, os requisitos de armazenamento podem aumentar. O procedimento armazenado sp_spaceused fornece apenas uma estimativa aproximada do espaço em disco necessário para um artigo.

O snapshot inclui arquivos que armazenam esquemas e dados.

A seguir