Como criar uma assinatura push (Programação Transact-SQL de replicação)
As assinaturas push podem ser criadas de forma programada, usando procedimentos armazenados de replicação. Os procedimentos armazenados usados dependerão do tipo de publicação ao qual a assinatura pertence.
Observação sobre segurança |
---|
Quando possível, solicite aos usuários que insiram as credenciais de segurança em tempo de execução. Sendo necessário armazenar credenciais em um arquivo de script, proteja o arquivo para evitar acesso não autorizado. |
Para criar uma assinatura push em um instantâneo ou publicação transacional
No Publicador do banco de dados de publicação, verifique se a publicação oferece suporte às assinaturas push, executando sp_helppublication.
Se o valor de allow_push for 1, as assinaturas push terão suporte.
Se o valor de allow_push for 0, execute sp_changepublication, especificando allow_push para @property e true para @value.
No Publicador do banco de dados de publicação, execute sp_addsubscription. Especifique @publication, @subscriber e @destination_db. Especifique um valor push para @subscription_type. Para obter mais informações sobre como atualizar assinaturas, consulte Como criar uma assinatura atualizável em uma publicação transacional (Programação Transact-SQL de replicação).
No Publicador do banco de dados de publicação, execute sp_addpushsubscription_agent. Especifique o seguinte:
Os parâmetros @subscriber, @subscriber_db e @publication.
As credenciais do Windows Microsoft com as quais o Distribution Agent do Distribuidor é executado para @job_login e @job_password.
Observação As conexões feitas usando a Autenticação Integrada do Windows sempre usam as credenciais do Windows especificadas por @job_login e @password. O Distribution Agent sempre faz a conexão local com o Distribuidor usando a Autenticação Integrada do Windows. Por padrão, o agente se conecta ao Assinante usando a Autenticação Integrada do Windows.
(Opcional) Valor de 0 para @subscriber_security_mode e informações de logon do Microsoft SQL Server para @subscriber_login e @subscriber_password. Especifique esses parâmetros se for necessário usar a Autenticação do SQL Server para conexão com o Assinante.
Agenda para o trabalho do Distribution Agent para essa assinatura. Para obter mais informações, consulte Como especificar agendas de sincronização (Programação Transact-SQL de replicação).
Observação sobre segurança Ao criar uma assinatura push em um Publicador com um Distribuidor remoto, os valores especificados para todos os parâmetros, inclusive job_login e job_password são enviados para o Distribuidor como texto sem formatação. Criptografe a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, consulte Criptografando conexões com o SQL Server.
Para criar assinatura push para publicação de mesclagem
No Publicador do banco de dados de publicação, verifique se a publicação oferece suporte às assinaturas push, executando sp_helpmergepublication.
Se o valor de allow_push for 1, a publicação dará suporte às assinaturas push.
Se o valor de allow_push não for 1, execute sp_changemergepublication, especificando allow_push para @property e true para @value.
No Publicador, no banco de dados de publicação, execute sp_addmergesubscription, especificando os seguintes parâmetros:
@publication. Esse é o nome da publicação.
@subscriber_type. Para uma assinatura de cliente, especifique local e, para uma assinatura de servidor, especifique global.
@subscription_priority. Para uma assinatura de servidor, especifique uma prioridade para a assinatura de (0,00 a 99,99).
Para obter mais informações, consulte Detecção e resolução de conflito de replicação de mesclagem avançada.
No Publicador do banco de dados de publicação, execute sp_addmergepushsubscription_agent. Especifique o seguinte:
Os parâmetros @subscriber, @subscriber_db e @publication.
As credenciais do Windows sob as quais o Merge Agent no Distribuidor é executado para o @job_login e @job_password.
Observação As conexões feitas usando a Autenticação Integrada do Windows sempre usam as credenciais do Windows especificadas por @job_login e @password. O Merge Agent sempre faz a conexão local com o Distribuidor usando a Autenticação Integrada do Windows. Por padrão, o agente se conecta ao Assinante usando a Autenticação Integrada do Windows.
(Opcional) Valor de 0 para @subscriber_security_mode e informações de logon do SQL Server para @subscriber_login e @subscriber_password. Especifique esses parâmetros se for necessário usar a Autenticação do SQL Server para conexão com o Assinante.
(Opcional) Valor de 0 para @publisher_security_mode e informações de logon do SQL Server para @publisher_login e @publisher_password. Especifique esses valores se for necessário usar a Autenticação do SQL Server para conexão com o Publicador.
Agenda para o trabalho do Merge Agent para essa assinatura. Para obter mais informações, consulte Como especificar agendas de sincronização (Programação Transact-SQL de replicação).
Observação sobre segurança Ao criar uma assinatura push em um Publicador com um Distribuidor remoto, os valores especificados para todos os parâmetros, inclusive job_login e job_password são enviados para o Distribuidor como texto sem formatação. Criptografe a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, consulte Criptografando conexões com o SQL Server.
Exemplo
O exemplo a seguir cria uma nova assinatura push para uma publicação transacional. Os valores de logon e senha são fornecidos em tempo de execução, usando as variáveis de script sqlcmd.
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2008R2Replica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks2008R2]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'push';
--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
O exemplo a seguir cria uma nova assinatura push para uma publicação de mesclagem. Os valores de logon e senha são fornecidos em tempo de execução, usando as variáveis de script sqlcmd.
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2008R2Replica';
SET @hostname = N'adventure-works\david8'
-- Add a push subscription to a merge publication.
USE [AdventureWorks2008R2]
EXEC sp_addmergesubscription
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@subscription_type = N'push',
@hostname = @hostname;
--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO