Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Azure SQL Managed Instance
Este tópico descreve como sincronizar uma subscrição pull no SQL Server utilizando o SQL Server Management Studio, agentes de replicação ou Objectos de Gestão de Replicação (RMO).
Usando o SQL Server Management Studio
As subscrições são sincronizadas pelo Agente de Distribuição (para replicação instantânea e transacional) ou pelo Agente de Fusão (para replicação de fusão). Os agentes podem funcionar de forma contínua, a pedido ou a funcionar com um horário. Para mais informações sobre a especificação de agendas de sincronização, consulte Especificar Agendas de Sincronização.
Sincronize uma subscrição a pedido a partir da pasta Local Subscriptions no SQL Server Management Studio.
Para sincronizar uma subscrição pull on demand no Management Studio
Ligue-se ao Subscritor no Management Studio e expanda depois o nó do servidor.
Expanda a pasta Replicação e depois expanda a pasta Subscrições Locais .
Clique com o botão direito na subscrição que quer sincronizar e depois clique em Ver Estado de Sincronização.
Na caixa de diálogo View Synchronization State - <Subscriber>:<SubscriptionDatabase> , clique em Iniciar. Quando a sincronização termina, é exibida a mensagem Sincronização concluída .
Clique em Fechar.
Agentes de replicação
As subscrições pull podem ser sincronizadas programaticamente e sob demanda, invocando o ficheiro executável do agente de replicação apropriado a partir do prompt de comandos. O ficheiro executável do agente de replicação que é invocado dependerá do tipo de publicação a que pertence a subscrição de pull. Para mais informações, consulte Agentes de Replicação.
Note
Os agentes de replicação ligam-se ao servidor local usando as credenciais de autenticação Windows do utilizador que iniciou o agente a partir do prompt de comandos. Estas credenciais do Windows também são usadas ao ligar-se a servidores remotos através da Autenticação Integrada Windows.
Para iniciar o agente de distribuição a partir do prompt de comandos ou de um ficheiro batch
A partir do prompt de comandos ou num ficheiro batch, inicie o Distribution Agent de Replicação executandodistrib.exe, especificando os seguintes argumentos da linha de comandos:
-Publicadora
-PublisherDB
-Distribuidor
-DistributeSecurityMode = 1
-Assinante
-SubscriberDB
-Modo = de Segurança para Assinantes1
-SubscriptionType = 1
Se estiver a usar Autenticação SQL Server, deve também especificar os seguintes argumentos:
-DistributorLogin
-DistributorPassword
-DistributeSecurityMode = 0
-PublisherLogin
-EditorPassword
-Modo = de Segurança do Editor0
-Login do Assinante
-Palavra-passe do assinante
-Modo = de Segurança para Assinantes0
Para iniciar o agente de fusão a partir do prompt de comandos ou de um ficheiro batch
A partir do prompt de comandos ou num ficheiro batch, inicie o Merge Agent de Replicação executandoreplmerg.exe, especificando os seguintes argumentos de linha de comandos:
-Publicadora
-PublisherDB
-Modo = de Segurança do Editor1
-Publicação
-Distribuidor
-DistributeSecurityMode = 1
-Assinante
-Modo = de Segurança para Assinantes1
-SubscriberDB
-SubscriptionType = 1
Se estiver a usar Autenticação SQL Server, deve também especificar os seguintes argumentos:
-DistributorLogin
-DistributorPassword
-DistributeSecurityMode = 0
-PublisherLogin
-EditorPassword
-Modo = de Segurança do Editor0
-Login do Assinante
-Palavra-passe do assinante
-Modo = de Segurança para Assinantes0
Exemplos (Agentes de Replicação)
O exemplo seguinte inicia o Distribution Agent para sincronizar uma subscrição de pull. Todas as ligações são feitas através da Autenticação Windows.
-- Declare the variables.
SET Publisher=%instancename%
SET Subscriber=%instancename%
SET PublicationDB=AdventureWorks
SET SubscriptionDB=AdventureWorksReplica
SET Publication=AdvWorksProductsTran
-- Start the Distribution Agent.
-- The following command must be supplied without line breaks.
"C:\Program Files\Microsoft SQL Server\100\COM\DISTRIB.EXE" -Subscriber %Subscriber%
-SubscriberDB %SubscriptionDB% -SubscriberSecurityMode 1 -Publication %Publication%
-Publisher %Publisher% -PublisherDB %PublicationDB% -Distributor %Publisher%
-DistributorSecurityMode 1 -Continuous -SubscriptionType 1;
O exemplo seguinte inicia o Merge Agent para sincronizar uma subscrição de pull. Todas as ligações são feitas através da Autenticação Windows.
-- Declare the variables.
SET Publisher=%instancename%
SET Subscriber=%instancename%
SET PublicationDB=AdventureWorks
SET SubscriptionDB=AdventureWorksReplica
SET Publication=AdvWorksSalesOrdersMerge
--Start the Merge Agent with concurrent upload and download processes.
-- The following command must be supplied without line breaks.
"C:\Program Files\Microsoft SQL Server\100\COM\REPLMERG.EXE" -Publication %Publication%
-Publisher %Publisher% -Subscriber %Subscriber% -Distributor %Publisher%
-PublisherDB %PublicationDB% -SubscriberDB %SubscriptionDB% -PublisherSecurityMode 1
-OutputVerboseLevel 2 -SubscriberSecurityMode 1 -SubscriptionType 1 -DistributorSecurityMode 1
-Validate 3 -ParallelUploadDownload 1 ;
Utilização de Objetos de Gestão de Replicação (RMO)
Pode sincronizar subscrições de pull programáticamente usando Objetos de Gestão de Replicação (RMO) e acesso gerido por código às funcionalidades de agentes de replicação. As classes que utiliza para sincronizar uma subscrição pull dependem do tipo de publicação a que a subscrição pertence.
Note
Se quiseres iniciar uma sincronização que corra de forma autónoma sem afetar a tua aplicação, inicia o agente de forma assíncrona. No entanto, se quiser monitorizar o resultado da sincronização e receber callbacks do agente durante o processo de sincronização (por exemplo, para mostrar uma barra de progresso), deve iniciar o agente de forma síncrona. Para os assinantes do Microsoft SQL Server 2005 Express Edition, deve iniciar o agente de forma síncrona.
Para sincronizar uma subscrição pull com um snapshot ou publicação transacional
Crie uma ligação ao Assinante usando a ServerConnection classe.
Crie uma instância da TransPullSubscription classe e defina as seguintes propriedades:
O nome da base de dados por subscrição para DatabaseName.
O nome da publicação à qual é atribuída a subscrição para PublicationName.
O nome do banco de dados de publicações para PublicationDBName.
O nome do Publisher para PublisherName.
A ligação criada no passo 1 para ConnectionContext.
Chame o método LoadProperties para obter as propriedades restantes da subscrição. Se este método apresentar falso, verifique se a subscrição existe.
Inicie o Distribution Agent no Assinante de uma das seguintes formas:
Chame o método SynchronizeWithJob na instância de TransPullSubscription do passo 2. Este método inicia o Agente de Distribuição de forma assíncrona e o controlo retorna imediatamente à sua aplicação enquanto o trabalho do agente está a correr. Não pode chamar este método para subscritores do SQL Server 2005 edição Express ou se a subscrição foi criada com o valor de false for CreateSyncAgentByDefault (o padrão).
Obtenha uma instância da TransSynchronizationAgent classe da SynchronizationAgent propriedade e chame o Synchronize método. Este método inicia o agente de forma síncrona, e o controlo permanece com a tarefa do agente em execução. Durante a execução síncrona, pode gerir o evento Status enquanto o agente está em execução.
Note
Se especificou um valor de false para CreateSyncAgentByDefault (o predefinido) quando criou a subscrição pull, também precisa de especificar Distributor, DistributorSecurityMode, e opcionalmente DistributorLogin e DistributorPassword porque os metadados relacionados com o trabalho do agente para a subscrição não estão disponíveis no MSsubscription_properties.
Para sincronizar uma subscrição pull com uma publicação de fusão
Crie uma ligação ao Assinante usando a ServerConnection classe.
Crie uma instância da MergePullSubscription classe e defina as seguintes propriedades:
O nome da base de dados por subscrição para DatabaseName.
O nome da publicação à qual é atribuída a subscrição para PublicationName.
O nome da base de dados publicada para PublicationDBName.
O nome do Publisher para PublisherName.
A ligação criada no passo 1 para ConnectionContext.
Chame o método LoadProperties para obter as propriedades restantes da subscrição. Se este método apresentar falso, verifique se a subscrição existe.
Inicie o Merge Agent no Assinante de uma das seguintes formas:
Chame o método SynchronizeWithJob na instância de MergePullSubscription do passo 2. Este método inicia o Merge Agent de forma assíncrona e o controlo retorna imediatamente à sua aplicação enquanto o trabalho do agente está a correr. Não pode chamar este método para subscritores do SQL Server 2005 edição Express ou se a subscrição foi criada com o valor de false for CreateSyncAgentByDefault (o padrão).
Obtenha uma instância da MergeSynchronizationAgent classe a partir da SynchronizationAgent propriedade e chame o Synchronize método. Este método inicia o Merge Agent de forma síncrona, e o controlo mantém-se com a tarefa do agente em execução. Durante a execução síncrona, pode gerir o evento Status enquanto o agente está em execução.
Note
Se especificou um valor de false para CreateSyncAgentByDefault (o predefinido) quando criou a subscrição pull, também precisa de especificar Distributor, DistributorSecurityMode, PublisherSecurityMode, HostName, ExchangeTypeSubscriptionType, e opcionalmente DistributorLogin, , DistributorPasswordPublisherLogin, , e PublisherPassword porque os metadados relacionados com o trabalho do agente para a subscrição não estão disponíveis em MSsubscription_properties.
Exemplos (RMO)
Este exemplo sincroniza uma subscrição pull com uma publicação transacional, onde o agente é iniciado de forma assíncrona usando o job do agente.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksProductTran";
String publicationDbName = "AdventureWorks";
String subscriptionDbName = "AdventureWorksReplica";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
TransPullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define subscription properties.
subscription = new TransPullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription and the job exists, start the agent job.
if (subscription.LoadProperties() && subscription.AgentJobId != null)
{
subscription.SynchronizeWithJob();
}
else
{
// Do something here if the subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exists on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Do appropriate error handling here.
throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks"
Dim subscriptionDbName As String = "AdventureWorksReplica"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As TransPullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define subscription properties.
subscription = New TransPullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription and the job exists, start the agent job.
If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then
subscription.SynchronizeWithJob()
Else
' Do something here if the subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exists on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Do appropriate error handling here.
Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
conn.Disconnect()
End Try
Este exemplo sincroniza uma subscrição pull com uma publicação transacional, onde o agente é iniciado de forma síncrona.
// Define the server, publication, and database names.
string subscriberName = subscriberInstance;
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
TransPullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define the pull subscription.
subscription = new TransPullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription exists, then start the synchronization.
if (subscription.LoadProperties())
{
// Check that we have enough metadata to start the agent.
if (subscription.PublisherSecurity != null)
{
// Synchronously start the Distribution Agent for the subscription.
subscription.SynchronizationAgent.Synchronize();
}
else
{
throw new ApplicationException("There is insufficient metadata to " +
"synchronize the subscription. Recreate the subscription with " +
"the agent job or supply the required agent properties at run time.");
}
}
else
{
// Do something here if the pull subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exist on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Implement appropriate error handling here.
throw new ApplicationException("The subscription could not be " +
"synchronized. Verify that the subscription has " +
"been defined correctly.", ex);
}
finally
{
conn.Disconnect();
}
' Define the server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As TransPullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define the pull subscription.
subscription = New TransPullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription exists, then start the synchronization.
If subscription.LoadProperties() Then
' Check that we have enough metadata to start the agent.
If Not subscription.PublisherSecurity Is Nothing Then
' Write agent output to a log file.
subscription.SynchronizationAgent.Output = "distagent.log"
subscription.SynchronizationAgent.OutputVerboseLevel = 2
' Synchronously start the Distribution Agent for the subscription.
subscription.SynchronizationAgent.Synchronize()
Else
Throw New ApplicationException("There is insufficient metadata to " + _
"synchronize the subscription. Recreate the subscription with " + _
"the agent job or supply the required agent properties at run time.")
End If
Else
' Do something here if the pull subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exist on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Implement appropriate error handling here.
Throw New ApplicationException("The subscription could not be " + _
"synchronized. Verify that the subscription has " + _
"been defined correctly.", ex)
Finally
conn.Disconnect()
End Try
Este exemplo sincroniza uma subscrição pull com uma publicação de fusão, onde o agente é iniciado de forma assíncrona usando o job do agente.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksSalesOrdersMerge";
String publicationDbName = "AdventureWorks";
String subscriptionDbName = "AdventureWorksReplica";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define subscription properties.
subscription = new MergePullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription and the job exists, start the agent job.
if (subscription.LoadProperties() && subscription.AgentJobId != null)
{
subscription.SynchronizeWithJob();
}
else
{
// Do something here if the subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exists on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Do appropriate error handling here.
throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks"
Dim subscriptionDbName As String = "AdventureWorksReplica"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define subscription properties.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription and the job exists, start the agent job.
If subscription.LoadProperties() And Not subscription.AgentJobId Is Nothing Then
subscription.SynchronizeWithJob()
Else
' Do something here if the subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exists on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Do appropriate error handling here.
Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
conn.Disconnect()
End Try
Este exemplo sincroniza uma subscrição pull com uma publicação de fusão, onde o agente é iniciado de forma síncrona.
// Define the server, publication, and database names.
string subscriberName = subscriberInstance;
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription exists, then start the synchronization.
if (subscription.LoadProperties())
{
// Check that we have enough metadata to start the agent.
if (subscription.PublisherSecurity != null || subscription.DistributorSecurity != null)
{
// Synchronously start the Merge Agent for the subscription.
subscription.SynchronizationAgent.Synchronize();
}
else
{
throw new ApplicationException("There is insufficient metadata to " +
"synchronize the subscription. Recreate the subscription with " +
"the agent job or supply the required agent properties at run time.");
}
}
else
{
// Do something here if the pull subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exist on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Implement appropriate error handling here.
throw new ApplicationException("The subscription could not be " +
"synchronized. Verify that the subscription has " +
"been defined correctly.", ex);
}
finally
{
conn.Disconnect();
}
' Define the server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription exists, then start the synchronization.
If subscription.LoadProperties() Then
' Check that we have enough metadata to start the agent.
If Not subscription.PublisherSecurity Is Nothing Or subscription.DistributorSecurity Is Nothing Then
' Output agent messages to the console.
subscription.SynchronizationAgent.OutputVerboseLevel = 1
subscription.SynchronizationAgent.Output = ""
' Synchronously start the Merge Agent for the subscription.
subscription.SynchronizationAgent.Synchronize()
Else
Throw New ApplicationException("There is insufficient metadata to " + _
"synchronize the subscription. Recreate the subscription with " + _
"the agent job or supply the required agent properties at run time.")
End If
Else
' Do something here if the pull subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exist on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Implement appropriate error handling here.
Throw New ApplicationException("The subscription could not be " + _
"synchronized. Verify that the subscription has " + _
"been defined correctly.", ex)
Finally
conn.Disconnect()
End Try
Este exemplo sincroniza uma subscrição pull com uma publicação de fusão usando a sincronização Web. A subscrição foi criada sem o job do agente e os metadados relacionados da subscrição, pelo que o agente deve ser iniciado de forma síncrona e são fornecidas informações adicionais sobre subscrição.
// Define the server, publication, and database names.
string subscriberName = subscriberInstance;
string publisherName = publisherInstance;
string distributorName = distributorInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
string hostname = @"adventure-works\garrett1";
string webSyncUrl = "https://" + publisherInstance + "/SalesOrders/replisapi.dll";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
MergePullSubscription subscription;
MergeSynchronizationAgent agent;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription exists, then start the synchronization.
if (subscription.LoadProperties())
{
// Get the agent for the subscription.
agent = subscription.SynchronizationAgent;
// Check that we have enough metadata to start the agent.
if (agent.PublisherSecurityMode == null)
{
// Set the required properties that could not be returned
// from the MSsubscription_properties table.
agent.PublisherSecurityMode = SecurityMode.Integrated;
agent.DistributorSecurityMode = SecurityMode.Integrated;
agent.Distributor = publisherName;
agent.HostName = hostname;
// Set optional Web synchronization properties.
agent.UseWebSynchronization = true;
agent.InternetUrl = webSyncUrl;
agent.InternetSecurityMode = SecurityMode.Standard;
agent.InternetLogin = winLogin;
agent.InternetPassword = winPassword;
}
// Enable agent output to the console.
agent.OutputVerboseLevel = 1;
agent.Output = "";
// Synchronously start the Merge Agent for the subscription.
agent.Synchronize();
}
else
{
// Do something here if the pull subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exist on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Implement appropriate error handling here.
throw new ApplicationException("The subscription could not be " +
"synchronized. Verify that the subscription has " +
"been defined correctly.", ex);
}
finally
{
conn.Disconnect();
}
' Define the server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
Dim hostname As String = "adventure-works\garrett1"
Dim webSyncUrl As String = "https://" + publisherInstance + "/SalesOrders/replisapi.dll"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As MergePullSubscription
Dim agent As MergeSynchronizationAgent
Try
' Connect to the Subscriber.
conn.Connect()
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription exists, then start the synchronization.
If subscription.LoadProperties() Then
' Get the agent for the subscription.
agent = subscription.SynchronizationAgent
' Check that we have enough metadata to start the agent.
If agent.PublisherSecurityMode = Nothing Then
' Set the required properties that could not be returned
' from the MSsubscription_properties table.
agent.PublisherSecurityMode = SecurityMode.Integrated
agent.Distributor = publisherInstance
agent.DistributorSecurityMode = SecurityMode.Integrated
agent.HostName = hostname
' Set optional Web synchronization properties.
agent.UseWebSynchronization = True
agent.InternetUrl = webSyncUrl
agent.InternetSecurityMode = SecurityMode.Standard
agent.InternetLogin = winLogin
agent.InternetPassword = winPassword
End If
' Enable agent logging to the console.
agent.OutputVerboseLevel = 1
agent.Output = ""
' Synchronously start the Merge Agent for the subscription.
agent.Synchronize()
Else
' Do something here if the pull subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exist on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Implement appropriate error handling here.
Throw New ApplicationException("The subscription could not be " + _
"synchronized. Verify that the subscription has " + _
"been defined correctly.", ex)
Finally
conn.Disconnect()
End Try