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:
- Configurar IP privado (que inclui um link para configurar o acesso a serviços privados)
- acesso a serviços privados
- Configurar o acesso privado aos serviços
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:

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:

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:
Inicie o SQL Server Configuration Manager.

Encontre o nó Aliases e selecione-o.

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:

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

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.

Estabeleça ligação através do novo alias e inicie o monitor de replicação:

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

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?
- Saiba mais sobre a replicação no Cloud SQL.