Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Managed Instance
Toto téma popisuje, jak synchronizovat pull předplatné v SQL Server pomocí SQL Server Management Studio, replikačních agentů nebo objektů pro správu replikace (RMO).
Použití aplikace SQL Server Management Studio
Předplatná se synchronizují pomocí distribučního agenta (pro snímkovou a transakční replikaci) nebo slučovacího agenta (pro slučovací replikaci). Agenti můžou běžet nepřetržitě, běžet na vyžádání nebo běžet podle plánu. Další informace o určení plánů synchronizace naleznete v tématu Určení plánů synchronizace.
Synchronizujte předplatné na vyžádání ze složky Local Subscriptions ve SQL Server Management Studio.
Synchronizace odběru typu pull na vyžádání v aplikaci Management Studio
Připojte se k odběrateli v prostředí Management Studio a pak rozbalte uzel serveru.
Rozbalte složku Replikace a potom rozbalte složku Místní předplatná .
Klikněte pravým tlačítkem myši na předplatné, které chcete synchronizovat, a potom klepněte na příkaz Zobrazit stav synchronizace.
V zobrazení stav synchronizace - <Odběratel>:<SubscriptionDatabase> dialogové okno, klepněte na tlačítko Start. Po dokončení synchronizace se zobrazí zpráva Synchronizace byla dokončena .
Klepněte na tlačítko Zavřít.
Agenti replikace
Odběry typu pull lze synchronizovat programově i na vyžádání spuštěním příslušného spustitelného souboru replikačního agenta z příkazového řádku. Spustitelný soubor agenta replikace, který bude spuštěn, závisí na typu publikace, ke které náleží předplatné typu pull. Pro více informací viz Replikační agenti.
Note
Replikační agenti se připojují k lokálnímu serveru pomocí přihlašovacích údajů Windows Authentic uživatele, který agenta spustil z příkazového řádku. Tyto přihlašovací údaje Windows se také používají při připojení k vzdáleným serverům pomocí Windows Integrated Authentication.
Pro spuštění distribučního agenta z příkazového řádku nebo z dávkového souboru
Z příkazového řádku nebo z dávkového souboru spusťte Agenta distribuce replikace spuštěním distrib.exe se zadáním následujících argumentů příkazového řádku:
-Vydavatel
-PublisherDB
-Distributor
-DistributorSecurityMode = 1
-Předplatitel
-SubscriberDB
-SubscriberSecurityMode = 1
-SubscriptionType = 1
Pokud používáte ověřování SQL Serveru, musíte také zadat následující argumenty:
-DistributorLogin
-DistributorPassword
-DistributorSecurityMode = 0
-PublisherLogin
-PublisherPassword
-PublisherSecurityMode = 0
-SubscriberLogin
-SubscriberPassword
-SubscriberSecurityMode = 0
Pro spuštění merge agentu z příkazového řádku nebo z dávkového souboru
Z příkazového řádku nebo v dávkovém souboru spusťte agenta replikace Merge spuštěním příkazu replmerg.exe s uvedením následujících argumentů příkazového řádku:
-Vydavatel
-PublisherDB
-PublisherSecurityMode = 1
-Publikace
-Distributor
-DistributorSecurityMode = 1
-Předplatitel
-SubscriberSecurityMode = 1
-SubscriberDB
-SubscriptionType = 1
Pokud používáte ověřování SQL Serveru, musíte také zadat následující argumenty:
-DistributorLogin
-DistributorPassword
-DistributorSecurityMode = 0
-PublisherLogin
-PublisherPassword
-PublisherSecurityMode = 0
-SubscriberLogin
-SubscriberPassword
-SubscriberSecurityMode = 0
Příklady (agenti replikace)
Následující příklad spouští Distribution Agent k synchronizaci pull předplatného. Všechna připojení jsou prováděna pomocí Windows Authentication.
-- 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;
Následující příklad spouští Merge Agent k synchronizaci pull předplatného. Všechna připojení jsou prováděna pomocí Windows Authentication.
-- 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 ;
Použití objektů správy replikace (RMO)
Odběry typu pull můžete synchronizovat programově pomocí objektů Replication Management Objects (RMO) a přístupu ke funkcím replikačního agenta prostřednictvím spravovaného kódu. Třídy, které používáte k synchronizaci odběrového předplatného typu pull, závisí na typu publikace, ke které toto předplatné patří.
Note
Pokud chcete spustit synchronizaci, která běží samostatně, aniž by to ovlivnilo vaši aplikaci, spusťte agenta asynchronně. Pokud však chcete sledovat výsledek synchronizace a přijímat zpětná volání od agenta během synchronizačního procesu (například zobrazit ukazatel průběhu), měli byste spustit agenta synchronně. Pro předplatitele edice Microsoft SQL Server 2005 Express je nutné spustit agent synchronně.
Pro synchronizaci pull předplatného se snapshotem nebo transakční publikací
Vytvořte připojení k odběrateli pomocí ServerConnection třídy.
Vytvořte instanci TransPullSubscription třídy a nastavte následující vlastnosti:
Název databáze pro odběr pro DatabaseName.
Název publikace, do které předplatné patří PublicationName.
Název databáze publikací pro PublicationDBName.
Název vydavatele pro PublisherName.
Připojení vytvořené v kroku 1 pro ConnectionContext.
Voláním LoadProperties metody získejte zbývající vlastnosti předplatného. Pokud tato metoda vrátí hodnotu false, ověřte, že předplatné existuje.
Spusťte distribučního agenta na odběrateli jedním z následujících způsobů:
Zavolejte metodu SynchronizeWithJob na instanci TransPullSubscription z kroku 2. Tato metoda spustí agenta distribuce asynchronně a řízení se okamžitě vrátí do vaší aplikace, zatímco je spuštěna úloha agenta. Tuto metodu nelze použít pro odběratele SQL Server 2005 Express Edition ani v případě, že bylo předplatné vytvořeno s hodnotou false pro CreateSyncAgentByDefault (výchozí hodnota).
Získejte instanci třídy TransSynchronizationAgent z SynchronizationAgent vlastnosti a zavolejte metodu Synchronize . Tato metoda spustí agenta synchronně a řízení zůstane se spuštěnou úlohou agenta. Během synchronního spouštění můžete zpracovat Status událost během spuštění agenta.
Note
Pokud jste při vytváření pull předplatného zadali hodnotu false pro CreateSyncAgentByDefault (výchozí), musíte také zadat Distributor, DistributorSecurityMode, a volitelně DistributorLogin také DistributorPassword proto, že metadata týkající se agentních úloh pro předplatné nejsou v MSsubscription_properties dostupná.
Synchronizace odběru typu pull se slučovací publikací
Vytvořte připojení k odběrateli pomocí ServerConnection třídy.
Vytvořte instanci MergePullSubscription třídy a nastavte následující vlastnosti:
Název databáze předplatného pro DatabaseName.
Název publikace, do které předplatné patří PublicationName.
Název publikované databáze pro PublicationDBName.
Název vydavatele pro PublisherName.
Připojení vytvořené v kroku 1 pro ConnectionContext.
Voláním LoadProperties metody získejte zbývající vlastnosti předplatného. Pokud tato metoda vrátí hodnotu false, ověřte, že předplatné existuje.
Spusťte Merge Agent u odběratele jedním z následujících způsobů:
Zavolejte metodu SynchronizeWithJob na instanci MergePullSubscription z kroku 2. Tato metoda spustí slučovacího agenta asynchronně, a řídicí funkce se okamžitě vrátí vaší aplikaci, zatímco běží úloha agenta. Tuto metodu nelze volat pro odběratele edice SQL Server 2005 Express Edition ani v případě, že bylo předplatné vytvořeno s hodnotou false pro CreateSyncAgentByDefault (výchozí hodnota).
Získejte instanci třídy MergeSynchronizationAgent pomocí vlastnosti SynchronizationAgent a zavolejte metodu Synchronize. Tato metoda spustí agenta sloučení synchronně a ovládací prvek zůstane se spuštěnou úlohou agenta. Během synchronního spouštění můžete zpracovat Status událost během spuštění agenta.
Note
Pokud jste při vytváření pull odběru zadali hodnotu false pro CreateSyncAgentByDefault (výchozí), musíte také zadat Distributor, DistributorSecurityMode, PublisherSecurityMode, HostName, SubscriptionType, , ExchangeType, a volitelně DistributorLogin, DistributorPassword, PublisherLogina PublisherPassword protože metadata související s úkoly agenta pro předplatné nejsou v MSsubscription_properties dostupná.
Příklady (RMO)
Tento příklad synchronizuje pull předplatné s transakční publikací, kde je agent spuštěn asynchronně pomocí agentní úlohy.
// 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
Tento příklad synchronizuje odběr typu pull s transakční publikací, přičemž agent se spouští synchronně.
// 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
Tento příklad synchronizuje pull předplatné s publikací pro sloučení, kde je agent spuštěn asynchronně pomocí agentní úlohy.
// 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
Tento příklad synchronizuje pull předplatné s publikací sloučení, kde je agent spuštěn synchronně.
// 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
Tento příklad synchronizuje předplatné typu pull se slučovací publikací pomocí webové synchronizace. Předplatné bylo vytvořeno bez role agenta a souvisejících metadat předplatného, takže agent musí být spuštěn synchronně a jsou poskytnuty další informace o předplatném.
// 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