Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Instância Gerenciada de SQL do Azure
Este tópico descreve como criar uma assinatura pull no SQL Server usando o SQL Server Management Studio, o Transact-SQL ou o Replication Management Objects (RMO).
É possível configurar uma assinatura pull para a replicação P2P via script, mas isso não está disponível no assistente.
Como usar o SQL Server Management Studio.
Crie uma assinatura de pull no Publicador ou no Assinante usando o Assistente para Nova Assinatura. Siga as páginas do assistente para:
Especificar o Publicador e a publicação.
Selecione onde os agentes de replicação executarão. Para uma assinatura pull, selecione Executar cada agente em seu Assinante (assinaturas pull) na página Local do Agente de Distribuição ou na página Local do Agente de Mesclagem, dependendo do tipo de publicação.
Especifique Assinantes e bancos de dados de assinatura.
Especifique os logons e senhas usadas para conexões feitas por agentes de replicação:
Para assinaturas de publicações de instantâneo e transacionais, especifique as credenciais na página Segurança do Agente de Distribuição.
Para assinaturas para publicações de mesclagem, especifique as credenciais na página Segurança do Agente de Mesclagem .
Para obter informações sobre as permissões exigidas por cada agente, consulte Replication Agent Security Model.
Especifique um agendamento de sincronização e quando o Assinante deve ser inicializado.
Especifique opções adicionais para as publicações de mesclagem: tipo da assinatura; valores para filtragem com parâmetros e as informações para sincronização através de HTTPS se a publicação estiver habilitada para sincronização da Web.
Especifique opções adicionais para publicações transacionais que permitem assinaturas atualizáveis: se os Assinantes devem confirmar as alterações no Publicador imediatamente ou gravá-las em uma fila; credenciais usadas para se conectar do Assinante ao Publicador.
Opcionalmente, faça o script da assinatura.
Para criar uma assinatura pull do Publicador
Conecte-se ao Publicador usando o Microsoft SQL Server Management Studio e, em seguida, expanda o nó do servidor.
Expanda a pasta Replicação e, em seguida, a pasta Publicações Locais .
Clique com o botão direito do mouse na publicação na qual você deseja criar uma ou mais assinaturas e clique em Novas Assinaturas.
Complete as páginas do Assistente de Nova Assinatura.
Para criar uma assinatura pull a partir do Assinante
Conecte-se ao Assinante no SQL Server Management Studio e, em seguida, expanda o nó do servidor.
Expanda a pasta Replicação .
Clique com o botão direito do mouse na pasta Assinaturas Locais e depois clique em Novas Assinaturas.
Na página Publicação do Assistente para Nova Assinatura, selecione <Localizar Publicador do SQL Server> ou <Localizar Publicador Oracle> na lista suspensa Publicador.
Conecte-se ao Publicador na caixa de diálogo Conectar ao Servidor .
Selecione uma publicação na página Publicação .
Complete as páginas do Assistente de Nova Assinatura.
Usando o Transact-SQL
As assinaturas pull podem ser criadas de forma programada, usando os procedimentos de replicação armazenados. Os procedimentos armazenados usados dependem do tipo de publicação ao qual a assinatura pertence.
Para criar uma assinatura pull para uma publicação de instantâneo ou transacional
No Publicador, verifique se a publicação dá suporte a assinaturas pull executando sp_helppublication (Transact-SQL).
Se o valor de allow_pull no conjunto de resultados for 1, a publicação terá suporte para as assinaturas pull.
Se o valor de allow_pull for 0, execute sp_changepublication (Transact-SQL), especificando allow_pull para @property e true para @value.
No Assinante, execute sp_addpullsubscription (Transact-SQL). Especifique @publisher e @publication. Para obter mais informações sobre assinaturas de atualização, consulte Criar uma assinatura atualizável em uma publicação transacional
No Assinante, execute sp_addpullsubscription_agent (Transact-SQL). Especifique o seguinte:
Os parâmetros @publisher, @publisher_db, e @publication .
As credenciais do Microsoft Windows usadas pelo Agente de Distribuição em execução no Assinante para @job_login e @job_password.
Observação
As conexões realizadas com Autenticação Integrada do Windows sempre usam as credenciais do Windows especificadas por @job_login e @password. O Agente de Distribuição sempre faz a conexão local ao Assinante usando a Autenticação Integrada do Windows. Por padrão, o agente conecta-se ao Distribuidor usando a Autenticação Integrada do Windows.
(Opcional) Um valor 0 para @distributor_security_mode e as informações de logon do SQL Server para @distributor_login e @distributor_password, se for necessário usar a Autenticação do SQL Server ao conectar-se com o Distribuidor.
Agendamento da tarefa do Agente de Distribuição para esta assinatura. Para obter mais informações, consulte Specify Synchronization Schedules.
No Publicador, execute sp_addsubscription (Transact-SQL) para registrar a assinatura pull. Especifique @publication, @subscribere @destination_db. Especifique um valor de pull para @subscription_type.
Para criar uma assinatura pull para uma publicação de mesclagem
No servidor Publicador, verifique se a publicação oferece suporte a assinaturas pull executando sp_helpmergepublication (Transact-SQL).
Se o valor de allow_pull no conjunto de resultados for 1, a publicação terá suporte para as assinaturas pull.
Se o valor de allow_pull for 0, execute sp_changemergepublication (Transact-SQL), especificando allow_pull para @property e true para @value.
No Assinante, execute sp_addmergepullsubscription (Transact-SQL). Especifique @publisher, @publisher_db, @publicatione os parâmetros a seguir:
@subscriber_type – especifique local para uma assinatura de cliente e global para uma assinatura de servidor.
@subscription_priority – especifique uma prioridade para a assinatura (0.00 a 99.99). Isso só é necessário para uma assinatura de servidor.
Para obter mais informações, consulte Detecção e resolução avançadas de conflitos de replicação de mesclagem.
No Assinante, execute sp_addmergepullsubscription_agent (Transact-SQL). Especifique os seguintes parâmetros:
@publisher, @publisher_dbe @publication.
As credenciais do Windows sob as quais o Agente de Mesclagem no Assinante é executado para @job_login e @job_password.
Observação
As conexões realizadas com Autenticação Integrada do Windows sempre usam as credenciais do Windows especificadas por @job_login e @password. O Agente de Mesclagem sempre estabelece a conexão local com o Assinante usando a Autenticação Integrada do Windows. Por padrão, o agente se conecta ao Distribuidor e ao Publicador usando a Autenticação Integrada do Windows.
(Opcional) Um valor 0 para @distributor_security_mode e as informações de logon do SQL Server para @distributor_login e @distributor_password, se for necessário usar a Autenticação do SQL Server ao conectar-se com o Distribuidor.
(Opcional) Um valor de 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password, se você precisar usar a autenticação do SQL Server ao se conectar ao Publicador.
Um agendamento para a tarefa do Agente de Mesclagem desta assinatura. Para obter mais informações, consulte Criar uma assinatura atualizável em uma publicação transacional
No Publicador, execute sp_addmergesubscription (Transact-SQL). Especifique @publication, @subscriber, @subscriber_db, e o valor pull para @subscription_type. Isso registra a assinatura pull.
Exemplos (Transact-SQL)
O exemplo a seguir cria uma assinatura de pull para uma publicação transacional. O primeiro lote é executado no Assinante, e o segundo lote é executado no Publicador. Os valores para o logon e senha são fornecidos no runtime usando as variáveis sqlcmd scripting.
-- 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".
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';
-- At the subscription database, create a pull subscription
-- to a transactional publication.
USE [AdventureWorksReplica]
EXEC sp_addpullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB;
-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@distributor = @publisher,
@job_login = $(Login),
@job_password = $(Password);
GO
-- 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".
-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'pull',
@status = N'subscribed';
GO
O exemplo a seguir cria uma assinatura de pull para uma publicação de mesclagem. O primeiro lote é executado no Assinante, e o segundo lote é executado no Publicador. Os valores de logon e senha são fornecidos em runtime através das 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".
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';
SET @hostname = N'adventure-works\david8';
-- At the subscription database, create a pull subscription
-- to a merge publication.
USE [AdventureWorksReplica]
EXEC sp_addmergepullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB;
-- Add an agent job to synchronize the pull subscription.
EXEC sp_addmergepullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@distributor = @publisher,
@job_login = $(Login),
@job_password = $(Password),
@hostname = @hostname;
GO
-- Execute this batch at the Publisher.
DECLARE @myMergePub AS sysname;
DECLARE @mySub AS sysname;
DECLARE @mySubDB AS sysname;
SET @myMergePub = N'AdvWorksSalesOrdersMerge';
SET @mySub = N'MYSUBSERVER';
SET @mySubDB = N'AdventureWorksReplica';
-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addmergesubscription @publication = @myMergePub,
@subscriber = @mySub, @subscriber_db = @mySubDB,
@subscription_type = N'pull';
GO
Usando os Objetos de Gerenciamento de Replicação (RMO)
As classes RMO usadas para criar uma assinatura pull dependem do tipo de publicação ao qual a assinatura pertence.
Para criar uma assinatura pull para uma publicação de instantâneo ou transacional
Crie conexões para o Assinante e Publicador, usando a classe ServerConnection .
Crie uma instância da classe TransPublication usando a conexão com o Publicador da etapa 1. Especifique Name, DatabaseName e ConnectionContext.
Chame o método LoadProperties . Se esse método retornar false, as propriedades especificadas na etapa 2 estarão incorretas ou a publicação não existe no servidor.
Realize uma lógica AND de bit a bit (& no Visual C# e And no Visual Basic) entre a propriedade Attributes e AllowPull. Se o resultado for None, defina Attributes como o resultado de um OU lógico bit a bit (| no Visual C# e Or no Visual Basic) entre Attributes e AllowPull. Em seguida, chame CommitPropertyChanges para habilitar assinaturas pull.
Se não houver banco de dados de assinatura, crie-o usando a classe Database . Para obter mais informações, consulte Creating, Altering, and Removing Databases (Criando, alterando e removendo bancos de dados).
Criar uma instância da classe TransPullSubscription.
Defina as seguintes propriedades de assinatura:
O ServerConnection ao assinante criado na etapa 1 para ConnectionContext.
Nome do banco de dados de assinatura para DatabaseName.
Nome do Publicador para PublisherName.
Nome do banco de dados de publicação para PublicationDBName.
Nome da publicação para PublicationName.
Use os campos Login e Password de SynchronizationAgentProcessSecurity para fornecer as credenciais da conta do Microsoft Windows sob a qual o Agente de Distribuição é executado no Assinante. Essa conta é usada para fazer conexões locais com o Assinante e para fazer conexões remotas que usam a Autenticação do Windows.
Observação
Não é necessário definir SynchronizationAgentProcessSecurity quando a assinatura for criada por um membro da função de servidor fixa sysadmin ; no entanto, é recomendado. Nesse caso, o agente representará a conta do SQL Server Agent. Para obter mais informações, consulte Replication Agent Security Model.
(Opcional) Um valor de true para CreateSyncAgentByDefault para criar um trabalho de agente que seja usado para sincronizar a assinatura. Se você especificar false (o padrão), a assinatura pode ser sincronizada apenas de forma programada e é preciso especificar propriedades adicionais para TransSynchronizationAgent ao acessar esse objeto da propriedade SynchronizationAgent . Para obter mais informações, consulte Synchronize a Pull Subscription.
Observação
O SQL Server Agent não está disponível em todas as edições do SQL Server. Se você especificar o valor true para assinantes Express, o trabalho do agente não será criado. Porém, importantes metadados relacionados a assinatura são armazenados no Assinante. Para uma lista de recursos suportados pelas edições do SQL Server, veja Edições e recursos suportados do SQL Server 2025.
(Opcional) Defina os campos SqlStandardLogin e SqlStandardPassword ou SecureSqlStandardPassword de DistributorSecurity ao usar a Autenticação do SQL Server para conexão com o Distribuidor.
Chame o método Create .
Usando a instância da classe TransPublication da etapa 2, chame o método MakePullSubscriptionWellKnown para registrar a assinatura pull no Publisher. Se esse registro já existir, haverá uma exceção.
Para criar uma assinatura pull para uma publicação de mesclagem
Crie conexões para o Assinante e o Publicador usando a classe ServerConnection .
Crie uma instância da classe MergePublication usando a conexão com o Publicador da etapa 1. Especifique Name, DatabaseName, e ConnectionContext.
Chame o método LoadProperties . Se esse método retornar false, as propriedades especificadas na etapa 2 estarão incorretas ou a publicação não existe no servidor.
Realize uma lógica AND de bit a bit (& no Visual C# e And no Visual Basic) entre a propriedade Attributes e AllowPull. Se o resultado for None, defina Attributes como o resultado de um OU lógico bit a bit (| no Visual C# e Or no Visual Basic) entre Attributes e AllowPull. Em seguida, chame CommitPropertyChanges para habilitar assinaturas pull.
Se não houver banco de dados de assinatura, crie-o usando a classe Database . Para obter mais informações, consulte Creating, Altering, and Removing Databases (Criando, alterando e removendo bancos de dados).
Criar uma instância da classe MergePullSubscription.
Defina as seguintes propriedades de assinatura:
O ServerConnection para o assinante criado na etapa 1 para ConnectionContext.
Nome do banco de dados de assinatura para DatabaseName.
Nome do Publicador para PublisherName.
Nome do banco de dados de publicação para PublicationDBName.
Nome da publicação para PublicationName.
Use os campos Login e Password de SynchronizationAgentProcessSecurity para fornecer as credenciais da conta do Microsoft Windows na qual o Agente de Mesclagem é executado no Assinante. Essa conta é usada para fazer conexões locais com o Assinante e para fazer conexões remotas que usam a Autenticação do Windows.
Observação
Não é necessário definir SynchronizationAgentProcessSecurity quando a assinatura for criada por um membro da função de servidor fixa sysadmin ; no entanto, é recomendado. Nesse caso, o agente representará a conta do SQL Server Agent. Para obter mais informações, consulte Replication Agent Security Model.
(Opcional) Um valor de true para CreateSyncAgentByDefault para criar um trabalho de agente que seja usado para sincronizar a assinatura. Se você especificar false (o padrão), a assinatura pode ser sincronizada apenas de forma programada e é preciso especificar propriedades adicionais para MergeSynchronizationAgent ao acessar esse objeto da propriedade SynchronizationAgent . Para obter mais informações, consulte Synchronize a Pull Subscription.
(Opcional) Defina os campos SqlStandardLogin e SqlStandardPassword ou SecureSqlStandardPassword de DistributorSecurity ao usar a Autenticação do SQL Server para conexão com o Distribuidor.
(Opcional) Defina os campos SqlStandardLogin e SqlStandardPassword ou SecureSqlStandardPassword de PublisherSecurity ao usar a Autenticação do SQL Server para conexão com o Publicador.
Chame o método Create .
Usando a instância da classe MergePublication da etapa 2, chame o método MakePullSubscriptionWellKnown para registrar a assinatura pull no Publisher. Se esse registro já existir, haverá uma exceção.
Exemplo (RMO)
Esse exemplo cria uma assinatura pull para uma publicação transacional. As credenciais da conta do Microsoft Windows usadas para criar o trabalho do Agente de Distribuição são passadas em runtime.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
TransPublication publication;
TransPullSubscription subscription;
try
{
// Connect to the Publisher and Subscriber.
subscriberConn.Connect();
publisherConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new TransPublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new TransPullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = true;
// By default, subscriptions to transactional publications are synchronized
// continuously, but in this case we only want to synchronize on demand.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (TransSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName)
{
registered = true;
}
}
if (!registered)
{
// Register the subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
TransSubscriberType.ReadOnly);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransPullSubscription
Try
' Connect to the Publisher and Subscriber.
subscriberConn.Connect()
publisherConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New TransPublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.IsExistingObject Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New TransPullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.Description = "Pull subscription to " + publicationDbName _
+ " on " + subscriberName + "."
' Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = True
' By default, subscriptions to transactional publications are synchronized
' continuously, but in this case we only want to synchronize on demand.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As TransSubscription In publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName And _
existing.SubscriptionDBName = subscriptionDbName Then
registered = True
End If
Next existing
If Not registered Then
' Register the subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
TransSubscriberType.ReadOnly)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Esse exemplo cria uma assinatura pull para uma publicação de mesclagem. As credenciais da conta do Windows usadas para criar o trabalho do Agente de Mesclagem são fornecidas em tempo de execução.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
string hostname = @"adventure-works\garrett1";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
subscription.HostName = hostname;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = true;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
Dim hostname As String = "adventure-works\garrett1"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = True
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Esse exemplo cria uma assinatura pull para uma publicação de mesclagem, sem criar um trabalho de agente associado e metadados de assinatura em MSsubscription_properties. As credenciais da conta do Windows usadas para criar a tarefa do Agente de Mesclagem são fornecidas em tempo de execução.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Specify that an agent job not be created for this subscription. The
// subscription can only be synchronized by running the Merge Agent directly.
// Subscription metadata stored in MSsubscription_properties will not
// be available and must be specified at run time.
subscription.CreateSyncAgentByDefault = false;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
' Specify that an agent job not be created for this subscription. The
' subscription can only be synchronized by running the Merge Agent directly.
' Subscription metadata stored in MSsubscription_properties will not
' be available and must be specified at run time.
subscription.CreateSyncAgentByDefault = False
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Este exemplo cria uma assinatura de extração para uma publicação de mesclagem que pode ser sincronizada pela internet usando a sincronização pela Web. As credenciais da conta do Windows usadas para criar o trabalho do Agente de Mesclagem são fornecidas em tempo de execução. Para obter mais informações, consulte Configurar sincronização da Web.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
string hostname = @"adventure-works\garrett1";
string webSyncUrl = "https://" + publisherInstance + "/WebSync/replisapi.dll";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions and Web synchronization.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
if ((publication.Attributes & PublicationAttributes.AllowWebSynchronization) == 0)
{
publication.Attributes |= PublicationAttributes.AllowWebSynchronization;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
subscription.HostName = hostname;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Enable Web synchronization.
subscription.UseWebSynchronization = true;
subscription.InternetUrl = webSyncUrl;
// Specify the same Windows credentials to use when connecting to the
// Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication;
subscription.InternetLogin = winLogin;
subscription.InternetPassword = winPassword;
// Ensure that we create a job for this subscription.
subscription.CreateSyncAgentByDefault = true;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
Dim hostname As String = "adventure-works\garrett1"
Dim webSyncUrl As String = "https://" + publisherInstance + "/WebSync/replisapi.dll"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions and Web synchronization.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
If (publication.Attributes And PublicationAttributes.AllowWebSynchronization) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowWebSynchronization
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
subscription.CreateSyncAgentByDefault = True
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Enable Web synchronization.
subscription.UseWebSynchronization = True
subscription.InternetUrl = webSyncUrl
' Specify the same Windows credentials to use when connecting to the
' Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication
subscription.InternetLogin = winLogin
subscription.InternetPassword = winPassword
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try