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.

Seguem-se alguns dos objetos suportados:

  • 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 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 replicação.

Pré-requisitos

Tem de configurar a conetividade de rede bidirecional entre uma instância do Cloud SQL e a instância do subscritor. 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 de 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 o comando 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 envolve 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 de 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 de 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 uma tarefa 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 o 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 remover 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 são 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 monitor de replicação:

    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?