Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
Dit onderwerp beschrijft hoe je een pull-abonnement synchroniseert in SQL Server met behulp van SQL Server Management Studio, replicatie-agents of Replication Management Objects (RMO).
SQL Server Management Studio gebruiken
Abonnementen worden gesynchroniseerd door de distributieagent (voor momentopname en transactionele replicatie) of de samenvoegagent (voor samenvoegreplicatie). Agents kunnen continu worden uitgevoerd, op aanvraag worden uitgevoerd of volgens een schema worden uitgevoerd. Zie Synchronisatieschema's opgeven voor meer informatie over het opgeven van synchronisatieschema's.
Synchroniseer een abonnement op aanvraag vanuit de map Local Subscriptions in SQL Server Management Studio.
Om een pull-abonnement op aanvraag te synchroniseren in Management Studio
Maak verbinding met de abonnee in Management Studio en vouw vervolgens het serverknooppunt uit.
Vouw de map Replicatie uit en vouw vervolgens de map Lokale abonnementen uit.
Klik met de rechtermuisknop op het abonnement dat u wilt synchroniseren en klik vervolgens op Synchronisatiestatus weergeven.
Klik in het dialoogvenster Synchronisatiestatus weergeven - <Subscriber>:<SubscriptionDatabase> op Start. Wanneer de synchronisatie is voltooid, wordt het bericht Synchronisatie voltooid weergegeven.
Klik op sluiten.
Replicatieagenten
Pull-abonnementen kunnen programmatisch en on-demand worden gesynchroniseerd door het juiste replicatie-agentbestand aan te roepen via de opdrachtprompt. Het uitvoerbare bestand van de replicatieagent dat wordt aangeroepen, hangt af van het type publicatie waartoe het pull-abonnement behoort. Voor meer informatie, zie Replicatieagenten.
Note
Replicatieagenten verbinden zich met de lokale server met behulp van de Windows-authenticatiegegevens van de gebruiker die de agent vanuit de opdrachtprompt heeft gestart. Deze Windows-inloggegevens worden ook gebruikt bij het verbinden met externe servers met Windows Integrated Authentication.
Om de distributieagent te starten vanuit de opdrachtprompt of vanuit een batchbestand
Start vanaf de opdrachtprompt of in een batchbestand de Replicatie-Distribution Agent door distrib.exeuit te voeren , waarbij de volgende commandoregelargumenten worden gespecificeerd:
-Uitgever
-PublisherDB
-Verdeler
-DistributorSecurityMode = 1
-Abonnee
-SubscriberDB
-SubscriberSecurityMode = 1
-SubscriptionType = 1
Als u SQL Server-verificatie gebruikt, moet u ook de volgende argumenten opgeven:
-DistributorLogin
-DistributorPassword
-DistributorSecurityMode = 0
-PublisherLogin
-PublisherPassword
-PublisherSecurityMode = 0
-SubscriberLogin
-SubscriberPassword
-SubscriberSecurityMode = 0
Om de merge agent te starten via de opdrachtprompt of vanuit een batchbestand
Start vanuit de opdrachtprompt of in een batchbestand de Replication Merge Agent door replmerg.exeuit te voeren , waarbij je de volgende commandoregelargumenten specificeert:
-Uitgever
-PublisherDB
-PublisherSecurityMode = 1
-Publicatie
-Verdeler
-DistributorSecurityMode = 1
-Abonnee
-SubscriberSecurityMode = 1
-SubscriberDB
-SubscriptionType = 1
Als u SQL Server-verificatie gebruikt, moet u ook de volgende argumenten opgeven:
-DistributorLogin
-DistributorPassword
-DistributorSecurityMode = 0
-PublisherLogin
-PublisherPassword
-PublisherSecurityMode = 0
-SubscriberLogin
-SubscriberPassword
-SubscriberSecurityMode = 0
Voorbeelden (replicatieagenten)
Het volgende voorbeeld start de Distribution Agent om een pull-abonnement te synchroniseren. Alle verbindingen worden gemaakt met Windows-authenticatie.
-- 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;
Het volgende voorbeeld start de Merge Agent om een pull-abonnement te synchroniseren. Alle verbindingen worden gemaakt met Windows-authenticatie.
-- 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 ;
Replicatiebeheerobjecten (RMO) gebruiken
Je kunt pull-abonnementen programmatisch synchroniseren door gebruik te maken van Replication Management Objects (RMO) en managed code-toegang tot replicatieagentfunctionaliteiten. De klassen die je gebruikt om een pull-abonnement te synchroniseren, hangen af van het type publicatie waartoe het abonnement behoort.
Note
Als u een synchronisatie wilt starten die autonoom wordt uitgevoerd zonder dat dit van invloed is op uw toepassing, start u de agent asynchroon. Als je echter het resultaat van de synchronisatie wilt monitoren en callbacks van de agent wilt ontvangen tijdens het synchronisatieproces (bijvoorbeeld om een voortgangsbalk weer te geven), moet je de agent synchroon starten. Voor abonnees van Microsoft SQL Server 2005 Express-editie moet u de agent synchroon starten.
Een pull-abonnement synchroniseren met een snapshot of een transactionele publicatie
Maak een verbinding met de abonnee met behulp van de ServerConnection klasse.
Maak een exemplaar van de TransPullSubscription klasse en stel de volgende eigenschappen in:
De naam van de abonnementsdatabase voor DatabaseName.
De naam van de publicatie waartoe PublicationNamehet abonnement behoort.
De naam van de publicatiedatabase voor PublicationDBName.
De naam van de Publisher voor PublisherName.
De verbinding die is gemaakt in stap 1 voor ConnectionContext.
Roep de LoadProperties methode aan om de resterende abonnementseigenschappen op te halen. Als deze methode onwaar retourneert, controleert u of het abonnement bestaat.
Start de distributie-agent op de abonnee op een van de volgende manieren:
Roep de SynchronizeWithJob-methode aan op de instantie van TransPullSubscription uit stap 2. Met deze methode wordt de distributieagent asynchroon gestart en wordt het besturingselement onmiddellijk naar uw toepassing geretourneerd terwijl de agenttaak wordt uitgevoerd. Je kunt deze methode niet aanroepen voor SQL Server 2005 Express-editie abonnees of als het abonnement is aangemaakt met een waarde false voor CreateSyncAgentByDefault (de standaard).
Haal een instantie van de TransSynchronizationAgent klasse uit de SynchronizationAgent eigenschap en roep de Synchronize methode aan. Met deze methode wordt de agent synchroon gestart en blijft de controle bij het uitvoeren van de agenttaak. Tijdens de synchrone uitvoering kunt u de Status gebeurtenis afhandelen terwijl de agent draait.
Note
Als je bij het maken van het pull-abonnement een waarde van false voor CreateSyncAgentByDefault (de standaardwaarde) hebt opgegeven, moet je ook Distributor en DistributorSecurityMode opgeven, en optioneel DistributorLogin en DistributorPassword, omdat de metadata met betrekking tot de agenttaak voor het abonnement niet beschikbaar zijn in MSsubscription_properties.
Om een pull-abonnement te synchroniseren met een mergepublicatie
Maak een verbinding met de abonnee met behulp van de ServerConnection klasse.
Maak een exemplaar van de MergePullSubscription klasse en stel de volgende eigenschappen in:
De naam van de abonnementsdatabase voor DatabaseName.
De naam van de publicatie waartoe PublicationNamehet abonnement behoort.
De naam van de gepubliceerde database voor PublicationDBName.
De naam van de Publisher voor PublisherName.
De verbinding die is gemaakt in stap 1 voor ConnectionContext.
Roep de LoadProperties methode aan om de resterende abonnementseigenschappen op te halen. Als deze methode onwaar retourneert, controleert u of het abonnement bestaat.
Start de Merge Agent bij de abonnee op een van de volgende manieren:
Roep de SynchronizeWithJob-methode aan op de instantie van MergePullSubscription uit stap 2. Met deze methode wordt de Merge Agent asynchroon gestart en krijgt uw toepassing onmiddellijk weer controle terwijl de agenttaak wordt uitgevoerd. Je kunt deze methode niet aanroepen voor SQL Server 2005 Express-editie abonnees of als het abonnement is aangemaakt met een waarde false voor CreateSyncAgentByDefault (de standaard).
Haal een exemplaar van de MergeSynchronizationAgent klasse op uit de SynchronizationAgent eigenschap en roep de methode aan Synchronize . Met deze methode wordt de samenvoegagent synchroon gestart en blijft het besturingselement bij de actieve agenttaak. Tijdens de synchrone uitvoering kunt u de Status gebeurtenis afhandelen terwijl de agent draait.
Note
Als je bij het maken van het pull-abonnement een waarde van false voor CreateSyncAgentByDefault (de standaardwaarde) hebt opgegeven, moet je ook Distributor, DistributorSecurityMode, PublisherSecurityMode, HostName, SubscriptionType, ExchangeType en optioneel DistributorLogin, DistributorPassword, PublisherLogin en PublisherPassword opgeven, omdat de metadata met betrekking tot de agenttaak voor het abonnement niet beschikbaar is in MSsubscription_properties.
Voorbeelden (RMO)
Dit voorbeeld synchroniseert een pull-abonnement met een transactionele publicatie, waarbij de agent asynchroon wordt gestart met behulp van de agent-job.
// 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
Dit voorbeeld synchroniseert een pull-abonnement met een transactionele publicatie, waarbij de agent synchroon wordt gestart.
// 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
Dit voorbeeld synchroniseert een pull-abonnement met een merge-publicatie, waarbij de agent asynchroon wordt gestart met behulp van de agent-job.
// 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
Dit voorbeeld synchroniseert een pull-abonnement met een merge-publicatie, waarbij de agent synchroon wordt gestart.
// 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
Dit voorbeeld synchroniseert een pull-abonnement met een mergepublicatie met behulp van websynchronisatie. Het abonnement is aangemaakt zonder de agent-job en bijbehorende abonnementsmetadata, dus de agent moet synchroon worden gestart en er wordt aanvullende abonnementsinformatie verstrekt.
// 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