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