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:
- Configure o IP particular, (que inclui um link para configurar o acesso a serviços particulares)
- acesso privado a serviços
- Como configurar o acesso privado a serviços
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:
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:
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:
Inicie o SQL Server Configuration Manager.
Encontre o nó Aliases e selecione-o.
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:
Recupere o nome do host real da instância do editor usando esta consulta:
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.
Conecte-se usando o novo alias e inicie o monitor de replicação:
As informações de publicação precisam ser semelhantes a estas:
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.