Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Managed Instance
Detta ämne beskriver hur man skapar en pull-prenumeration i SQL Server genom att använda SQL Server Management Studio, Transact-SQL eller Replication Management Objects (RMO).
Att upprätta en pull-prenumeration för P2P-replikering är möjligt via skript, men är inte tillgängligt via guiden.
Använda SQL Server Management Studio
Skapa en pull-prenumeration hos Publisher eller Subscriber med hjälp av New Subscription Wizard. Följ stegen på sidorna i guiden för att:
Ange Utgivare och publikation.
Välj var replikeringsagenter ska köras. För en pull-prenumeration, välj Kör varje agent på dess Subscriber (pull subscriptions) på sidan Distribution Agent Location eller Merge Agent Location-sidan, beroende på vilken typ av publikation det är.
Ange prenumeranter och prenumerationsdatabaser.
Ange inloggningar och lösenord som används för anslutningar som görs av replikeringsagenter:
För prenumerationer på ögonblicksbilder och transaktionspublikationer, ange autentiseringsuppgifter på sidan Distributionsagentens säkerhet.
För prenumerationer för sammanslagning av publikationer anger du autentiseringsuppgifter på sidan Slå samman agentsäkerhet .
För information om vilka behörigheter varje agent kräver, se Replication Agent Security Model.
Ange ett synkroniseringsschema och när prenumeranten ska initieras.
Ange ytterligare alternativ för sammanslagna publikationer: prenumerationstyp; värden för parameteriserad filtrering; samt information för synkronisering via HTTPS om publikationen är aktiverad för webbsynkronisering.
Ange ytterligare alternativ för transaktionella publikationer som tillåter uppdatering av prenumerationer: om prenumeranter ska committa ändringar hos Publisher omedelbart eller skriva dem till en kö; uppgifter som används för att ansluta från Subscriber till Publisher.
Skriv ett skript för prenumerationen valfritt.
För att skapa en pull-prenumeration från Publisher
Anslut till utgivaren i Microsoft SQL Server Management Studio och expandera sedan servernoden.
Expandera mappen Replikering och expandera sedan mappen Lokala publikationer .
Högerklicka på publikationen där du vill skapa en eller flera prenumerationer, och klicka sedan på Nya prenumerationer.
Slutför sidorna i guiden Ny prenumeration.
För att skapa en pull-prenumeration från prenumeranten
Anslut till prenumeranten i SQL Server Management Studio och expandera sedan servernoden.
Expandera mappen Replikering .
Högerklicka på mappen Lokala prenumerationer och klicka sedan på Nya prenumerationer.
På sidan Publikation i guiden Ny prenumeration väljer du <Hitta SQL Server Publisher> eller <Hitta Oracle Publisher> i listrutan Publisher .
Anslut till utgivaren i dialogrutan Anslut till server .
Välj en publikation på sidan Publikation .
Slutför sidorna i guiden Ny prenumeration.
Använda Transact-SQL
Pull-prenumerationer kan skapas programmatiskt med hjälp av replikeringslagrade procedurer. De lagrade procedurer som används beror på vilken typ av publikation som prenumerationen tillhör.
För att skapa en pull-prenumeration på en snapshot eller transaktionell publikation
På Publisher, verifiera att publikationen stöder pull-prenumerationer genom att köra sp_helppublication (Transact-SQL).
Om värdet av allow_pull i resultatuppsättningen är 1, stöder publikationen pull-prenumerationer.
Om värdet av allow_pull är 0, utför sp_changepublication (Transact-SQL), och specificera allow_pull för @property och true för @value.
Vid prenumeranten, utför sp_addpullsubscription (Transact-SQL). Specificera @publisher och @publication. För information om att uppdatera prenumerationer, se Skapa en uppdateringsbar prenumeration på en transaktionell publikation.
Vid prenumeranten, utför sp_addpullsubscription_agent (Transact-SQL). Ange följande:
De @publisher, @publisher_db och @publication parametrarna.
De Microsoft Windows behörigheterna under vilka Distribution Agent hos abonnenten körs för @job_login och @job_password.
Note
Anslutningar som görs med Windows integrerad autentisering använder alltid de Windows inloggningsuppgifter som anges av @job_login och @job_password. Distributionsagenten upprättar alltid den lokala anslutningen till prenumeranten med hjälp av Windows-integrerad autentisering. Som standard ansluter agenten till distributören med Windows Integrated Authentication.
(Valfritt) Värdet 0 för @distributor_security_mode och SQL Server inloggningsinformation för @distributor_login och @distributor_password, om du behöver använda SQL Server autentisering när du ansluter till distributören.
Ett schema för distributionsagentjobbet för den här prenumerationen. Mer information finns i Ange synkroniseringsscheman.
Vid Publisher, kör sp_addsubscription (Transact-SQL) för att registrera pull-prenumerationen. Ange @publication, @subscriber och @destination_db. Ange värdet pull för @subscription_type.
För att skapa en pull-prenumeration på en sammanslagningspublikation
Vid Publisher, kontrollera att publikationen stöder pull-prenumerationer genom att köra sp_helpmergepublication (Transact-SQL).
Om värdet av allow_pull i resultatuppsättningen är 1, stöder publikationen pull-prenumerationer.
Om värdet av allow_pull är 0, utför sp_changemergepublication (Transact-SQL), och specificera allow_pull för @property och true för @value.
På prenumeranten, utför sp_addmergepullsubscription (Transact-SQL). Specificera @publisher, @publisher_db, @publication och följande parametrar:
@subscriber_type – ange lokalt för en klientprenumeration och global för en serverprenumeration.
@subscription_priority - Ange en prioritet för prenumerationen (0,00 till 99,99). Detta krävs endast för en serverprenumeration.
Mer information finns i Avancerad identifiering och lösning av konflikter vid sammanfogningsreplikering.
På prenumeranten, utför sp_addmergepullsubscription_agent (Transact-SQL). Ange följande parametrar:
@publisher, @publisher_db och @publication.
De Windows behörigheterna under vilka Merge Agent hos abonnenten körs för @job_login och @job_password.
Note
Anslutningar som görs med Windows integrerad autentisering använder alltid de Windows inloggningsuppgifter som anges av @job_login och @job_password. Merge Agent gör alltid den lokala anslutningen till prenumeranten med hjälp av Windows Integrated Authentication. Som standard kommer agenten att ansluta till Distributor och Publisher via Windows Integrated Authentication.
(Valfritt) Värdet 0 för @distributor_security_mode och SQL Server inloggningsinformation för @distributor_login och @distributor_password, om du behöver använda SQL Server autentisering när du ansluter till distributören.
(Valfritt) Värdet 0 för @publisher_security_mode och SQL Server inloggningsinformation för @publisher_login och @publisher_password, om du behöver använda SQL Server autentisering när du ansluter till Publisher.
Ett schema för sammanslagningsagentens arbete för den här prenumerationen. För mer information, se Skapa en uppdateringsbar prenumeration på en transaktionspublikation.
Vid Publisher, utför sp_addmergesubscription (Transact-SQL). Ange @publication, @subscriber, @subscriber_db och ett värde på pull för @subscription_type. Detta registrerar pull-prenumerationen.
Exempel (Transact-SQL)
Följande exempel skapar en pull-prenumeration på en transaktionell publikation. Den första batchen körs hos Subscriber, och den andra batchen utförs hos Publisher. Inloggnings- och lösenordsvärden anges vid körning med hjälp av sqlcmd-skriptvariabler.
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';
-- At the subscription database, create a pull subscription
-- to a transactional publication.
USE [AdventureWorksReplica]
EXEC sp_addpullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB;
-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@distributor = @publisher,
@job_login = $(Login),
@job_password = $(Password);
GO
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'pull',
@status = N'subscribed';
GO
Följande exempel skapar en pull-prenumeration på en sammanslagningspublikation. Den första batchen körs hos Subscriber, och den andra batchen utförs hos Publisher. Inloggnings- och lösenordsvärden tillhandahålls vid körning med sqlcmd-skriptvariabler .
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';
SET @hostname = N'adventure-works\david8';
-- At the subscription database, create a pull subscription
-- to a merge publication.
USE [AdventureWorksReplica]
EXEC sp_addmergepullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB;
-- Add an agent job to synchronize the pull subscription.
EXEC sp_addmergepullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@distributor = @publisher,
@job_login = $(Login),
@job_password = $(Password),
@hostname = @hostname;
GO
-- Execute this batch at the Publisher.
DECLARE @myMergePub AS sysname;
DECLARE @mySub AS sysname;
DECLARE @mySubDB AS sysname;
SET @myMergePub = N'AdvWorksSalesOrdersMerge';
SET @mySub = N'MYSUBSERVER';
SET @mySubDB = N'AdventureWorksReplica';
-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addmergesubscription @publication = @myMergePub,
@subscriber = @mySub, @subscriber_db = @mySubDB,
@subscription_type = N'pull';
GO
Använda replikeringshanteringsobjekt (RMO)
De RMO-klasser som används för att skapa en pull-prenumeration beror på vilken typ av publikation prenumerationen tillhör.
För att skapa en pull-prenumeration på en snapshot eller transaktionell publikation
Skapa anslutningar till både prenumeranten och utgivaren ServerConnection med hjälp av klassen .
Skapa en instans av TransPublication klassen med hjälp av Publisher-anslutningen från steg 1. Ange Name, DatabaseName och ConnectionContext.
Anropa LoadProperties metoden. Om den här metoden returnerar false är antingen egenskaperna som anges i steg 2 felaktiga eller så finns publikationen inte på servern.
Utför en bitvis logisk AND (& i Visual C# och And in Visual Basic) mellan Attributes egenskapen och AllowPull. Om resultatet är Noneanger du Attributes till resultatet av en bitvis logisk OR (| i Visual C# och Eller i Visual Basic) mellan Attributes och AllowPull. Anropa CommitPropertyChanges sedan för att aktivera pull-prenumerationer.
Om prenumerationsdatabasen inte finns skapar du den med hjälp Database av klassen . För mer information, se Skapa, ändra och ta bort databaser.
Skapa en instans av TransPullSubscription klassen.
Ange följande prenumerationsegenskaper:
Till ServerConnection prenumeranten skapad i steg 1 för ConnectionContext.
Namnet på prenumerationsdatabasen för DatabaseName.
Namnet på Publisher för PublisherName.
Namnet på publikationsdatabasen för PublicationDBName.
Namnet på publikationen för PublicationName.
Fälten Login och Password för SynchronizationAgentProcessSecurity att ange inloggningsuppgifterna för det Microsoft Windows konto där Distribution Agent körs hos prenumeranten. Detta konto används för att skapa lokala anslutningar till prenumeranten och för att göra fjärranslutningar med Windows-autentisering.
Note
Inställning SynchronizationAgentProcessSecurity krävs inte när prenumerationen skapas av en medlem i sysadmin-funktionen fast server, men det rekommenderas. I det här fallet personifierar agenten SQL Server Agent-kontot. Mer information finns i Säkerhetsmodell för replikeringsagent.
(Valfritt) Ett värde av true för CreateSyncAgentByDefault för att skapa ett agentjobb som används för att synkronisera prenumerationen. Om du anger false (standarden) kan prenumerationen endast synkroniseras programmatiskt och du måste ange ytterligare egenskaper när TransSynchronizationAgent du kommer åt detta objekt från egenskapen SynchronizationAgent . Mer information finns i Synkronisera en pull-prenumeration.
Note
SQL Server Agent finns inte tillgänglig i varje utgåva av SQL Server. När du anger ett värde på true för Express-abonnenter skapas inte agentjobbet. Dock lagras viktig prenumerationsrelaterad metadata hos prenumeranten. För en lista över funktioner som stöds av utgåvorna i SQL Server, se Utgåvor och stödda funktioner i SQL Server 2025.
(Valfritt) Ställ in SqlStandardLogin ochSqlStandardPassword/eller SecureSqlStandardPassword fälten för DistributorSecurity när du använder SQL Server-autentisering för att ansluta till distributören.
Anropa Create metoden.
Med hjälp av instansen av TransPublication klassen från steg 2, kalla MakePullSubscriptionWellKnown metoden för att registrera pull-prenumerationen hos Publisher. Om denna registrering redan finns uppstår ett undantag.
För att skapa en pull-prenumeration på en sammanslagningspublikation
Skapa kontakter med både Subscriber och Publisher genom att använda ServerConnection klassen.
Skapa en instans av MergePublication klassen med hjälp av Publisher-anslutningen från steg 1. Ange Name, DatabaseNameoch ConnectionContext.
Anropa LoadProperties metoden. Om den här metoden returnerar false är antingen egenskaperna som anges i steg 2 felaktiga eller så finns publikationen inte på servern.
Utför en bitvis logisk AND (& i Visual C# och And in Visual Basic) mellan Attributes egenskapen och AllowPull. Om resultatet är Noneanger du Attributes till resultatet av en bitvis logisk OR (| i Visual C# och Eller i Visual Basic) mellan Attributes och AllowPull. Anropa CommitPropertyChanges sedan för att aktivera pull-prenumerationer.
Om prenumerationsdatabasen inte finns skapar du den med hjälp Database av klassen . För mer information, se Skapa, ändra och ta bort databaser.
Skapa en instans av MergePullSubscription klassen.
Ange följande prenumerationsegenskaper:
Till ServerConnection prenumeranten skapad i steg 1 för ConnectionContext.
Namnet på prenumerationsdatabasen för DatabaseName.
Namnet på Publisher för PublisherName.
Namnet på publikationsdatabasen för PublicationDBName.
Namnet på publikationen för PublicationName.
Fälten Login och Password för SynchronizationAgentProcessSecurity att ange inloggningsuppgifterna för det Microsoft Windows konto där Merge Agent körs hos prenumeranten. Detta konto används för att skapa lokala anslutningar till prenumeranten och för att göra fjärranslutningar med Windows-autentisering.
Note
Inställning SynchronizationAgentProcessSecurity krävs inte när prenumerationen skapas av en medlem i sysadmin-funktionen fast server, men det rekommenderas. I det här fallet personifierar agenten SQL Server Agent-kontot. Mer information finns i Säkerhetsmodell för replikeringsagent.
(Valfritt) Ett värde av true för CreateSyncAgentByDefault för att skapa ett agentjobb som används för att synkronisera prenumerationen. Om du anger false (standarden) kan prenumerationen endast synkroniseras programmatiskt och du måste ange ytterligare egenskaper när MergeSynchronizationAgent du kommer åt detta objekt från egenskapen SynchronizationAgent . Mer information finns i Synkronisera en pull-prenumeration.
(Valfritt) Ställ in SqlStandardLogin ochSqlStandardPassword/eller SecureSqlStandardPassword fälten för DistributorSecurity när du använder SQL Server-autentisering för att ansluta till distributören.
(Valfritt) Ställ in SqlStandardLogin och/eller SecureSqlStandardPassword fälten PublisherSecurity för när du använder SQL Server Authentication för att SqlStandardPassword ansluta till Publisher.
Anropa Create metoden.
Med hjälp av instansen av MergePublication klassen från steg 2, kalla MakePullSubscriptionWellKnown metoden för att registrera pull-prenumerationen hos Publisher. Om denna registrering redan finns uppstår ett undantag.
Exempel (RMO)
Detta exempel skapar en pull-prenumeration på en transaktionell publikation. De Microsoft Windows kontouppgifter som används för att skapa Distribution Agent jobbet skickas vid körning.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
TransPublication publication;
TransPullSubscription subscription;
try
{
// Connect to the Publisher and Subscriber.
subscriberConn.Connect();
publisherConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new TransPublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new TransPullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = true;
// By default, subscriptions to transactional publications are synchronized
// continuously, but in this case we only want to synchronize on demand.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (TransSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName)
{
registered = true;
}
}
if (!registered)
{
// Register the subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
TransSubscriberType.ReadOnly);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransPullSubscription
Try
' Connect to the Publisher and Subscriber.
subscriberConn.Connect()
publisherConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New TransPublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.IsExistingObject Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New TransPullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.Description = "Pull subscription to " + publicationDbName _
+ " on " + subscriberName + "."
' Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = True
' By default, subscriptions to transactional publications are synchronized
' continuously, but in this case we only want to synchronize on demand.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As TransSubscription In publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName And _
existing.SubscriptionDBName = subscriptionDbName Then
registered = True
End If
Next existing
If Not registered Then
' Register the subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
TransSubscriberType.ReadOnly)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Detta exempel skapar en pull-prenumeration på en sammanslagningspublikation. De Windows kontouppgifter som användes för att skapa Merge Agent jobbet skickas vid körning.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
string hostname = @"adventure-works\garrett1";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
subscription.HostName = hostname;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = true;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
Dim hostname As String = "adventure-works\garrett1"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = True
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Detta exempel skapar en pull-prenumeration på en sammanslagningspublikation utan att skapa ett associerat agentjobb och prenumerationsmetadata i MSsubscription_properties. De Windows kontouppgifter som användes för att skapa Merge Agent jobbet skickas vid körning.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Specify that an agent job not be created for this subscription. The
// subscription can only be synchronized by running the Merge Agent directly.
// Subscription metadata stored in MSsubscription_properties will not
// be available and must be specified at run time.
subscription.CreateSyncAgentByDefault = false;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
' Specify that an agent job not be created for this subscription. The
' subscription can only be synchronized by running the Merge Agent directly.
' Subscription metadata stored in MSsubscription_properties will not
' be available and must be specified at run time.
subscription.CreateSyncAgentByDefault = False
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Detta exempel skapar en pull-prenumeration på en sammanslagningspublikation som kan synkroniseras över Internet med hjälp av webbsynkronisering. De Windows kontouppgifter som användes för att skapa Merge Agent jobbet skickas vid körning. För mer information, se Konfigurera webbsynkronisering.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
string hostname = @"adventure-works\garrett1";
string webSyncUrl = "https://" + publisherInstance + "/WebSync/replisapi.dll";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions and Web synchronization.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
if ((publication.Attributes & PublicationAttributes.AllowWebSynchronization) == 0)
{
publication.Attributes |= PublicationAttributes.AllowWebSynchronization;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
subscription.HostName = hostname;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Enable Web synchronization.
subscription.UseWebSynchronization = true;
subscription.InternetUrl = webSyncUrl;
// Specify the same Windows credentials to use when connecting to the
// Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication;
subscription.InternetLogin = winLogin;
subscription.InternetPassword = winPassword;
// Ensure that we create a job for this subscription.
subscription.CreateSyncAgentByDefault = true;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
Dim hostname As String = "adventure-works\garrett1"
Dim webSyncUrl As String = "https://" + publisherInstance + "/WebSync/replisapi.dll"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions and Web synchronization.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
If (publication.Attributes And PublicationAttributes.AllowWebSynchronization) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowWebSynchronization
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
subscription.CreateSyncAgentByDefault = True
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Enable Web synchronization.
subscription.UseWebSynchronization = True
subscription.InternetUrl = webSyncUrl
' Specify the same Windows credentials to use when connecting to the
' Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication
subscription.InternetLogin = winLogin
subscription.InternetPassword = winPassword
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try