Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Managed Instance
Ez a téma bemutatja, hogyan szinkronizálható egy pull előfizetést az SQL Server-ben az SQL Server Management Studio, replikációs ügynökök vagy Replikációs Menedzsment Objektumok (RMO) használatával.
Az SQL Server Management Studio használata
Az előfizetéseket a terjesztési ügynök (pillanatkép és tranzakciós replikáció) vagy az egyesítési ügynök (az egyesítési replikációhoz) szinkronizálja. Az ügynökök folyamatosan, igény szerint vagy ütemezés alapján futtathatók. A szinkronizálási ütemezések megadásáról további információt a Szinkronizálási ütemezések megadása című témakörben talál.
Szinkronizálj előfizetést igény szerint az SQL Server Management Studio Local Subscriptions mappájából.
Lekéréses előfizetés igény szerinti szinkronizálása a Management Studio alkalmazásban
Csatlakozzon az előfizetőhöz a Management Studióban, majd bontsa ki a kiszolgálócsomópontot.
Bontsa ki a Replikáció mappát, majd bontsa ki a Helyi előfizetések mappát.
Kattintson a jobb gombbal a szinkronizálni kívánt előfizetésre, majd kattintson a Szinkronizálás állapotának megtekintése parancsra.
A Szinkronizálási állapot megtekintése – <Előfizető>:<SubscriptionDatabase> párbeszédpanelen kattintson a Start gombra. Ha a szinkronizálás befejeződött, a szinkronizálás befejeződött üzenet jelenik meg.
Kattintson a Bezárás gombra.
Replikációs ügynökök
A pull előfizetések programozott és igény szerint szinkronizálhatók a parancssorból a megfelelő replikációs ügynök futtatható fájl meghívásával. A meghívott replikációs ügynök végrehajtható fájlja annak a kiadványtípusnak a függvénye, amelyhez a lekéréses előfizetés tartozik. További információért lásd: Replikációs ügynökök.
Note
A replikációs ügynökök a helyi szerverhez csatlakoznak annak a felhasználónak a Windows hitelesítési adataival, aki az ügynököt a parancssorból indította. Ezeket a Windows hitelesítő adatokat akkor is használják, amikor távoli szerverekhez csatlakoznak Windows integrált hitelesítéssel.
A disztribúciós ügynök elindításához a parancssorból vagy egy batch fájlból
A parancssorból vagy egy kötegfájlban indítsa el a Replication Distribution Agent programot a distrib.exe futtatásával, a következő parancssori argumentumok megadásával:
-Kiadó
-PublisherDB
-Elosztó
-DistributorSecurityMode = 1
-Előfizető
-SubscriberDB
-ElőfizetőBiztonsági Mód = 1
-Előfizetéstípus = 1
Ha SQL Server-hitelesítést használ, a következő argumentumokat is meg kell adnia:
-DistributorLogin
-DistributorPassword
-DistributorSecurityMode = 0
-PublisherLogin
-PublisherPassword
-PublisherSecurityMode = 0
-SubscriberLogin
-SubscriberPassword
-ElőfizetőBiztonsági Mód = 0
Az egyesítő ügynök elindításához a parancssorból vagy egy batch fájlból
A parancssorból vagy egy kötegelt fájlból indítsa el a Replication Merge Agent programot a replmerg.exe futtatásával, a következő parancssori argumentumok megadásával:
-Kiadó
-PublisherDB
-PublisherSecurityMode = 1
-Közzététel
-Elosztó
-DistributorSecurityMode = 1
-Előfizető
-ElőfizetőBiztonsági Mód = 1
-SubscriberDB
-Előfizetéstípus = 1
Ha SQL Server-hitelesítést használ, a következő argumentumokat is meg kell adnia:
-DistributorLogin
-DistributorPassword
-DistributorSecurityMode = 0
-PublisherLogin
-PublisherPassword
-PublisherSecurityMode = 0
-SubscriberLogin
-SubscriberPassword
-ElőfizetőBiztonsági Mód = 0
Példák (replikációs ügynökök)
A következő példa elindítja a Distribution Agent-t, hogy szinkronizálja a pull előfizetést. Minden kapcsolat Windows hitelesítéssel történik.
-- 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;
A következő példa elindítja a Merge Agent-t, hogy szinkronizálja a pull előfizetést. Minden kapcsolat Windows hitelesítéssel történik.
-- 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 ;
Replikációkezelési objektumok (RMO) használata
A pull előfizetéseket programozott módon szinkronizálhatod Replikációs Menedzsment Objektumok (RMO) használatával, valamint a replikációs ügynök funkciókhoz menedzselt kódhozzáféréssel. A pull előfizetés szinkronizálásához használt osztályok attól függnek, hogy melyik kiadványhoz tartozik az előfizetés.
Note
Ha olyan szinkronizálást szeretne elindítani, amely autonóm módon fut az alkalmazás befolyásolása nélkül, indítsa el az ügynököt aszinkron módon. Azonban, ha a szinkronizáció eredményét szeretnéd követni, és visszahívásokat kapni az ügynöktől a szinkronizáció során (például előrehaladási sáv megjelenítésére), akkor szinkronban kell indítanod az ügynököt. A Microsoft SQL Server 2005 Express kiadás előfizetőinek szinkron módon kell elindítania az ügynököt.
Lekéréses előfizetés szinkronizálása pillanatkép- vagy tranzakciós közzététellel
Hozzon létre kapcsolatot az előfizetővel az ServerConnection osztály használatával.
Hozza létre az osztály egy példányát TransPullSubscription , és állítsa be a következő tulajdonságokat:
A(z) DatabaseName előfizetési adatbázisának neve.
Annak a kiadványnak a neve, amelyhez az előfizetés tartozik PublicationName.
A PublicationDBNamekiadványadatbázisának neve.
A(z) PublisherName kiadójának neve.
Az 1. lépésben létrehozott kapcsolat a következőhöz ConnectionContext: .
Hívja meg a metódust LoadProperties a fennmaradó előfizetési tulajdonságok lekéréséhez. Ha ez a módszer hamis értéket ad vissza, ellenőrizze, hogy létezik-e az előfizetés.
Indítsa el a Distribution Agent-t az előfizetőnél az alábbi módok egyikén:
Hívja meg a 2. lépésben lévő SynchronizeWithJob példányára a TransPullSubscription metódust. Ez a módszer aszinkron módon indítja el a terjesztési ügynököt, és a vezérlő azonnal visszatér az alkalmazáshoz, miközben az ügynökfeladat fut. Ezt a módszert nem lehet SQL Server 2005 Express kiadás előfizetői esetén hívni, vagy ha az előfizetést false értékkelCreateSyncAgentByDefault hozták létre (az alapértelmezett).
Szerezz egy példányt az TransSynchronizationAgent osztályból a SynchronizationAgent tulajdonságból, és hívd meg a Synchronize metódust. Ez a módszer szinkron módon indítja el az ügynököt, és a vezérlés a futó ügynökfeladatnál marad. A szinkron végrehajtás során kezelheti a Status eseményt, amíg az ügynök fut.
Note
Ha a pull előfizetés létrehozásakor megadtad a falseCreateSyncAgentByDefault értéket (az alapértelmezett érték), akkor meg kell határoznod Distributor, DistributorSecurityMode, , és opcionálisan DistributorLogin , és DistributorPassword mert az ügynök feladathoz kapcsolódó metadata nem elérhető MSsubscription_properties-ben.
Lekéréses előfizetés szinkronizálása egyesítéses közzététellel
Hozzon létre kapcsolatot az előfizetővel az ServerConnection osztály használatával.
Hozza létre az osztály egy példányát MergePullSubscription , és állítsa be a következő tulajdonságokat:
A(z) DatabaseName előfizetési adatbázisának neve.
Annak a kiadványnak a neve, amelyhez az előfizetés tartozik PublicationName.
A(z) PublicationDBName számára közzétett adatbázis neve.
A(z) PublisherName kiadójának neve.
Az 1. lépésben létrehozott kapcsolat a következőhöz ConnectionContext: .
Hívja meg a metódust LoadProperties a fennmaradó előfizetési tulajdonságok lekéréséhez. Ha ez a módszer hamis értéket ad vissza, ellenőrizze, hogy létezik-e az előfizetés.
Indítsa el a Merge Agent-t az előfizetőnél az alábbi módok egyikén:
Hívja meg a 2. lépésben lévő SynchronizeWithJob példányára a MergePullSubscription metódust. Ez a metódus aszinkron módon indítja el az egyesítési ügynököt, és a vezérlő azonnal visszatér az alkalmazáshoz, miközben az ügynökfeladat fut. Ezt a módszert nem lehet SQL Server 2005 Express kiadás előfizetői esetén hívni, vagy ha az előfizetést false értékkelCreateSyncAgentByDefault hozták létre (az alapértelmezett).
Szerezze be az MergeSynchronizationAgent osztály egy példányát a SynchronizationAgent tulajdonságból, és hívja meg a metódust Synchronize . Ez a metódus szinkron módon indítja el az egyesítési ügynököt, és a vezérlés a futó ügynökfeladattal együtt marad. A szinkron végrehajtás során kezelheti a Status eseményt, amíg az ügynök fut.
Note
Ha a pull előfizetés létrehozásakor megadtad a falseCreateSyncAgentByDefault értéket (az alapértelmezett érték), akkor meg kell határoznod Distributor, DistributorSecurityMode, PublisherSecurityMode, HostName, SubscriptionType, ExchangeType, és opcionálisan DistributorLogin, DistributorPassword, PublisherLogin, , és PublisherPassword mivel az ügynök feladathoz kapcsolódó metaadatok nem elérhetők MSsubscription_properties-ben.
Példák (RMO)
Ez a példa egy lekéréses előfizetést szinkronizál egy tranzakciós közzétételhez, amelynek során az ügynök az ügynökfeladat használatával aszinkron módon indul el.
// 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
Ez a példa szinkronizálja a pull előfizetést egy tranzakciós kiadványsal, ahol az ügynök szinkronban indul.
// 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
Ez a példa egy pull előfizetést szinkronizál egy egyesítéses közzététellel, miközben az ügynök aszinkron módon, az ügynökfeladat használatával indul el.
// 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
Ez a példa egy lekéréses előfizetést szinkronizál egy egyesítéses közzétételhez, amelynél az ügynök szinkron módon indul el.
// 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
Ez a példa szinkronizálja a pull előfizetést egy merge kiadványhoz webes szinkronizációval. Az előfizetést az ügynök munka és a kapcsolódó előfizetési metaadatok nélkül hozták létre, így az ügynököt szinkronban kell indítani, és további előfizetési információkat kell megadni.
// 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