Configure réplicas externas

Esta página descreve como configurar uma instância do Cloud SQL para publicação num subscritor externo ao Cloud SQL ou que se encontra no Cloud SQL. A replicação externa no Cloud SQL para SQL Server usa a replicação transacional, na qual o Cloud SQL atua como um publicador para um subscritor.

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 desta funcionalidade são semelhantes às documentadas pela Microsoft.

Alguns dos objetos suportados são os seguintes:

  • Tabelas
  • Procedimentos armazenados
  • Visualizações
  • Visualizações de índice
  • Funções definidas pelo utilizador

Embora existam exemplos do processo de publicação nesta página, consulte o artigo Publicar dados e objetos de base de dados na documentação da Microsoft para ver detalhes. Considere usar o SQL Server Management Studio (SSMS) no seu processo de publicação, uma vez que as opções disponíveis podem ser mais evidentes no SSMS.

Consulte também o artigo Acerca da replicação no Cloud SQL.

Implementar a replicação transacional

Uma instância do Cloud SQL pode atuar como publicador e distribuidor para um subscritor externo através da replicação transacional.

Para configurar a replicação transacional, pode:

  • Use procedimentos armazenados fornecidos pelo Cloud SQL. Estes são precedidos por: gcloudsql_transrepl_
  • Refine a replicação através de procedimentos armazenados fornecidos pela Microsoft

Limitações e pré-requisitos

Ao planear a replicação transacional, reveja esta secção.

Limitações

  • As instâncias que usam elevada disponibilidade (HA) não têm um endereço IP de saída consistente. Essas instâncias não podem ser publicadores se usarem a conetividade de IP público. Assim, se uma instância usar a HA, tem de usar a conetividade de IP privado.
  • Para definir um artigo, consulte o artigo Definir um artigo na documentação da Microsoft, incluindo as limitações e as restrições.
  • Os procedimentos armazenados fornecidos pelo Cloud SQL suportam apenas a subscrição push.
  • Não é possível configurar a replicação externa numa instância configurada com replication.

Pré-requisitos

Tem de configurar a conetividade de rede bidirecional entre uma instância do Cloud SQL e a instância de subscrição. O subscritor pode ser externo, por exemplo, um subscritor no local, ou pode ser interno ao Cloud SQL.

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

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

Para usar o IP privado do Cloud SQL com uma instância no local, tem de configurar o acesso privado a serviços. Isto requer uma interligação entre a VPC do Cloud SQL e a VPC do cliente através de um intervalo de IP personalizado que tem de ser anunciado.

Quando se liga a partir de um local, a firewall no local tem de permitir ligações de entrada e saída. Especificamente, a firewall no local tem de permitir essas ligações na porta 1433 ao intervalo de sub-redes de acesso privado a serviços que é usado para o serviço específico (neste caso, para o Cloud SQL). Google Cloud Considere permitir um intervalo de sub-redes em vez de um IP específico para cada instância criada.

Para informações relacionadas, consulte o seguinte:

Autorizações e funções

As secções seguintes abordam as autorizações e as funções.

Autorizações incluídas no pacote

Os procedimentos armazenados fornecidos pelo Cloud SQL incluem as autorizações necessárias para a replicação transacional. Estes são procedimentos armazenados de wrapper que, por vezes, chamam um ou mais procedimentos armazenados da Microsoft. Consulte a documentação da Microsoft para ver informações sobre os procedimentos armazenados da Microsoft.

Função necessária

As contas utilizadas (inclusive para o agente leitor de registos) precisam de uma função db_owner, como no caso do utilizador sqlserver. Para obter as informações necessárias, reveja o modelo de segurança do agente de replicação.

Usar procedimentos armazenados para publicação, distribuição e subscrição

Esta secção contém passos sugeridos para configurar a replicação transacional.

O utilizador sqlserver tem procedimentos armazenados para configurar a sua instância do Cloud SQL para atuar como publicador. Para informações de referência, consulte os procedimentos armazenados do Cloud SQL.

Preparar-se para a replicação transacional com uma base de dados de teste

Antes de configurar a replicação transacional para uma base de dados de produção, pode configurar a sua instância como um publicador de objetos de base de dados de teste. Nesta página, a base de dados de teste chama-se base de dados pub_demo.

Ligue-se à sua instância do Cloud SQL através do utilizador sqlserver e crie uma base 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
)

Configure a base de dados de distribuição

Para a base de dados de distribuição, pode usar msdb.dbo.gcloudsql_transrepl_setup_distribution, que é um procedimento armazenado de wrapper para estes procedimentos armazenados da Microsoft:

Por exemplo:

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

Ative uma base de dados para publicação

Para ativar ou desativar a opção de publicação de uma base de dados, pode usar msdb.dbo.gcloudsql_transrepl_replicationdboption. Este procedimento armazenado aplica-se à opção de publicação do publicador que usa sp_replicationdboption.

Por exemplo:

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

Adicione um agente leitor de registos

Pode configurar um agente leitor de registos para uma base de dados que use sp_addlogreader_agent.

Por exemplo:

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

Crie a publicação para a base de dados

Pode usar msdb.dbo.gcloudsql_transrepl_addpublication para criar uma publicação transacional para a base de dados que especificar. Este procedimento armazenado encapsula sp_addpublication.

Por exemplo:

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

Crie um agente de instantâneo para a publicação especificada

Para criar um agente de instantâneo para a base de dados do publicador, pode usar msdb.dbo.gcloudsql_transrepl_addpublication_snapshot, que envolve sp_addpublication_snapshot.

Por exemplo:

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

Crie um artigo e adicione-o à publicação

Pode criar um artigo a partir da base de dados do publicador e adicioná-lo à publicação. Como utilizador sqlserver, use sp_addarticle.

Também pode adicionar artigos através do SSMS. Para mais informações, consulte o artigo Adicione artigos a uma publicação e remova artigos 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

Adicione a subscrição à publicação

Na base de dados, pode adicionar a subscrição à publicação. Como utilizador sqlserver, defina o estado do subscritor com 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

Estabeleça ligação ao subscritor e crie uma base de dados de subscrições

Pode estabelecer ligação ao subscritor e criar uma base de dados de subscrições para preencher com dados replicados.

Por exemplo:

 Create Database pub_demo

Adicione uma nova tarefa de agente agendada para sincronizar a subscrição push

Pode adicionar uma nova tarefa do agente agendada para sincronizar a subscrição push com a publicação. Por exemplo, na base de dados do publicador, execute um comando semelhante ao indicado abaixo. Este 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'

Inicie um trabalho de agente de instantâneo de publicação

Pode iniciar uma tarefa de agente de instantâneo de publicação da seguinte forma:

USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'

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

Use o msdb.dbo.gcloudsql_transrepl_addmonitoraccess para:

  • Conceda acesso ao Monitor de replicação no SSMS
  • Consultar tabelas na base de dados de distribuição

Assim, este procedimento armazenado permite-lhe usar a declaração SELECT nas tabelas relacionadas com a replicação da base de dados de distribuição, como a tabela MSrepl_errors:

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

Altere uma propriedade da base de dados de distribuição

Pode alterar a heartbeat_interval. Use o procedimento msdb.dbo.gcloudsql_transrepl_changedistributor_property, que envolve sp_changedistributor_property.

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

Por exemplo:

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

Use o monitor de replicação

Clique com o botão direito do rato no nó de replicação no SSMS e escolha Iniciar monitorização da replicação.

Se clicar no separador Agentes, deve ver uma vista semelhante à seguinte:

Pastas no separador Agentes

Usar procedimentos armazenados para remover a replicação

Esta secção contém passos sugeridos para remover a replicação transacional.

Cancele a subscrição

Para anular a subscrição, use o procedimento armazenado sp_dropsubscription.

Segue-se um exemplo dos comandos para cancelar a subscrição:

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

Remova o subscritor

Para eliminar o subscritor, use o procedimento armazenado:msdb.dbo.gcloudsql_transrepl_dropsubscriber

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

Remova a publicação

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

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

Desative a base de dados de publicações

Para desativar a base 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'

Remova a base de dados de distribuição

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

EXEC msdb.dbo.gcloudsql_transrepl_remove_distribution

Sugestões e passos para resolver problemas

As secções seguintes abordam tópicos comuns de resolução de problemas.

Executar procedimentos armazenados a partir da base de dados correta

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, pode receber o seguinte erro ao executar o comando sp_dropsubscription:

This database is not enabled for publication.

Se ocorrerem estes erros, tenha em atenção que tem de executar esses procedimentos armazenados a partir da base de dados à qual se aplicam. Pode usar o seguinte para confirmar que são executados a partir da base de dados correta:

USE <database_name>;
GO
<Run stored proc>

Replicação

Os erros de replicação são fornecidos nos registos de erros de SQL e noutros locais. Pode consultar diretamente algumas tabelas na base de dados de distribuição para ver erros de replicação. Por exemplo:

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

A Microsoft tem mais exemplos sobre como procurar erros através do Replication Monitor. Por exemplo, o utilizador sqlserver pode não ter acesso a um comando.

Tarefas do agente de replicação

Depois de configurar a replicação, as novas tarefas do agente SQL não ficam visíveis no SSMS para o utilizador sqlserver. No entanto, pode vê-los através do seguinte:

USE msdb
select * from dbo.sysjobs

Editoras em falta no monitor de replicação

Pode usar o monitor de replicação para ver o estado da replicação e resolver problemas de replicação.

Por exemplo, quando configura a replicação e a instância do Cloud SQL do publicador usa um endereço IP, o SSMS pode não conseguir encontrar o publicador. Isto deve-se ao facto de não conhecer o mapeamento entre o nome do anfitrião e o endereço IP.

O monitor de replicação contém um separador Publicações vazio:

Não existem linhas no separador Publicações

Como solução alternativa, pode criar alias no SQL Server Configuration Manager entre o nome do anfitrião do SQL Server do publicador e o endereço IP usado para estabelecer ligação a partir do SSMS:

  1. Inicie o SQL Server Configuration Manager.

    Gestor de configuração do SQL Server

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

    O nó Aliases está selecionado

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

    Caixa pendente abaixo de Nome do alias

  4. Obtenha o nome do anfitrião real da sua instância de publicador através desta consulta:

    Consulte o nome de anfitrião real da sua instância de publicador

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

    Nome do alias: indique o nome do servidor da consulta no passo 4.

    Nº da porta: indique a porta 1433.

    Protocolo: mantenha o valor predefinido de TCP/IP.

    Servidor: indique o endereço IP da instância do publicador.

    Valores para o nome do alias, o servidor, etc.

  6. Estabeleça ligação através do novo alias e inicie o Replication Monitor:

    Caixa de diálogo Ligar ao servidor

As informações de publicação devem ser semelhantes às seguintes:

O monitor de replicação apresenta agora uma linha no separador Publicações

Para mais informações sobre a resolução de problemas de replicação, consulte o artigo Resolução de problemas: encontre erros com a replicação transacional do SQL Server.

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

Quando usa uma instância do Cloud SQL como publicador, é necessário um instantâneo inicial dos artigos a gerar para iniciar a replicação. Esta captura de ecrã é armazenada localmente. Os requisitos de armazenamento podem aumentar consoante o número de artigos, o respetivo tamanho e o tipo de dados. O procedimento armazenado sp_spaceused fornece apenas uma estimativa aproximada do espaço em disco necessário para um artigo.

O instantâneo inclui ficheiros que armazenam esquemas e dados.

O que se segue?