Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
Dit onderwerp beschrijft hoe je een pull-abonnement aanmaakt in SQL Server met behulp van SQL Server Management Studio, Transact-SQL of Replication Management Objects (RMO).
Het instellen van een pull-abonnement voor P2P-replicatie is mogelijk per script, maar is niet beschikbaar via de wizard.
SQL Server Management Studio gebruiken
Maak een pull-abonnement aan bij de Publisher of de Subscriber met de New Subscription Wizard. Volg de pagina's in de wizard om:
Geef de uitgever en publicatie op.
Selecteer waar replicatieagents draaien. Voor een pull-abonnement selecteert u 'Run each agent at their Subscriber (pull subscriptions) op de Distribution Agent Location-pagina of de Merge Agent Location-pagina, afhankelijk van het type publicatie.
Geef abonnees en abonnementsdatabases op.
Geef de aanmeldingen en wachtwoorden op die worden gebruikt voor verbindingen die zijn gemaakt door replicatieagents:
Specificeer op de pagina Beveiliging van distributieagenten de referentiegegevens voor abonnementen op momentopnamen en transactionele publicaties.
Als u abonnementen wilt samenvoegen, geeft u referenties op de pagina Beveiliging van de samenvoegagent op.
Voor informatie over de benodigde permissies voor elke agent, zie Replication Agent Security Model.
Geef een synchronisatieschema op en wanneer de abonnee moet worden geïnitialiseerd.
Specificeer extra opties voor het samenvoegen van publicaties: abonnementstype; waarden voor geparametriseerde filtering; en informatie voor synchronisatie via HTTPS als de publicatie is ingeschakeld voor websynchronisatie.
Specificeer extra opties voor transactionele publicaties die het mogelijk maken abonnementen bij te werken: of abonnees wijzigingen direct bij de Publisher moeten committen of deze naar een wachtrij moeten schrijven; inloggegevens die worden gebruikt om van de Subscriber naar de Publisher te verbinden.
Scripte optioneel het abonnement.
Om een pull-abonnement aan te maken bij de Publisher
Maak verbinding met Publisher in Microsoft SQL Server Management Studio en vouw vervolgens het serverknooppunt uit.
Vouw de map Replicatie uit en vouw vervolgens de map Lokale publicaties uit.
Klik met de rechtermuisknop op de publicatie waarvoor je één of meer abonnementen wilt aanmaken, en klik vervolgens op Nieuwe abonnementen.
Voltooi de pagina's in de wizard Nieuw abonnement.
Om een pull-abonnement aan te maken van de abonnee
Maak verbinding met de abonnee in SQL Server Management Studio en vouw vervolgens het serverknooppunt uit.
Vouw de map Replicatie uit.
Klik met de rechtermuisknop op de map Lokale abonnementen en klik vervolgens op Nieuwe abonnementen.
Op de pagina Publicatie van de wizard Nieuw abonnement, selecteer <SQL Server Publisher> zoeken of <Oracle Publisher> zoeken uit de vervolgkeuzelijst Publisher.
Maak verbinding met publisher in het dialoogvenster Verbinding maken met server .
Selecteer een publicatie op de pagina Publicatie .
Voltooi de pagina's in de wizard Nieuw abonnement.
Transact-SQL gebruiken
Pull-abonnementen kunnen programmatisch worden aangemaakt met behulp van replicatie-opgeslagen procedures. De gebruikte opgeslagen procedures zijn afhankelijk van het type publicatie waartoe het abonnement behoort.
Om een pull-abonnement aan te maken op een snapshot of transactionele publicatie
Controleer Publisher dat de publicatie pull-abonnementen ondersteunt door sp_helppublication (Transact-SQL) uit te voeren.
Als de waarde van allow_pull in de resultaatset 1 is, ondersteunt de publicatie pull-abonnementen.
Als de waarde van allow_pull0 is, voer dan sp_changepublication uit (Transact-SQL), waarbij allow_pull voor @property en waar voor @value wordt gespecificeerd.
Voer bij de abonnee sp_addpullsubscription uit (Transact-SQL). Specificeer @publisher en @publication. Voor informatie over het bijwerken van abonnementen, zie Create an Updateable Subscription to a Transactional Publication.
Bij de abonnee voert u sp_addpullsubscription_agent uit (Transact-SQL). Geef het volgende op:
De @publisher, @publisher_db en @publication parameters.
De Microsoft Windows inloggegevens waaronder de Distribution Agent bij de Abonnee draait voor @job_login en @job_password.
Note
Verbindingen gemaakt met Windows Geïntegreerde Authenticatie gebruiken altijd de Windows inloggegevens die door @job_login en @job_password zijn gespecificeerd. De distributieagent maakt altijd de lokale verbinding met de abonnee met behulp van geïntegreerde Windows-verificatie. Standaard maakt de agent verbinding met de distributeur via Windows Integrated Authentication.
(Optioneel) Een waarde van 0 voor @distributor_security_mode en de SQL Server inloggegevens voor @distributor_login en @distributor_password, als je SQL Server Authenticatie moet gebruiken bij het verbinden met de distributeur.
Een planning voor de distributieagenttaak voor dit abonnement. Zie Synchronisatieschema's opgeven voor meer informatie.
Voer Publisher sp_addsubscription (Transact-SQL) uit om het pull-abonnement te registreren. Geef @publication, @subscriber en @destination_db op. Geef een waarde op voor pull voor @subscription_type.
Om een pull-abonnement aan te maken voor een merge-publicatie
Controleer op Publisher dat de publicatie pull-abonnementen ondersteunt door sp_helpmergepublication (Transact-SQL). uit te voeren.
Als de waarde van allow_pull in de resultaatset 1 is, ondersteunt de publicatie pull-abonnementen.
Als de waarde van allow_pull0 is, voer dan sp_changemergepublication uit (Transact-SQL), waarbij allow_pull voor @property en waar voor @value wordt gespecificeerd.
Bij de abonnee voert u sp_addmergepullsubscription uit (Transact-SQL). Specificeer @publisher, @publisher_db, @publication en de volgende parameters:
@subscriber_type - specificeer lokaal voor een clientabonnement en globaal voor een serverabonnement.
@subscription_priority - Specificeer een prioriteit voor het abonnement (0,00 tot 99,99). Dit is alleen vereist voor een serverabonnement.
Zie Advanced Merge Replication Conflict Detection and Resolution (Geavanceerde samenvoegingsconflictdetectie en -oplossing) voor meer informatie.
Bij de abonnee, voer sp_addmergepullsubscription_agent uit (Transact-SQL). Geef de volgende parameters op:
@publisher, @publisher_db en @publication.
De Windows gegevens waaronder de Merge Agent bij de abonnee draait voor @job_login en @job_password.
Note
Verbindingen gemaakt met Windows Geïntegreerde Authenticatie gebruiken altijd de Windows inloggegevens die door @job_login en @job_password zijn gespecificeerd. De Merge Agent maakt altijd de lokale verbinding met de abonnee via Windows Integrated Authentication. Standaard maakt de agent verbinding met de Distributor en Publisher via Windows Integrated Authentication.
(Optioneel) Een waarde van 0 voor @distributor_security_mode en de SQL Server inloggegevens voor @distributor_login en @distributor_password, als je SQL Server Authenticatie moet gebruiken bij het verbinden met de distributeur.
(Optioneel) Een waarde van 0 voor @publisher_security_mode en de SQL Server inloggegevens voor @publisher_login en @publisher_password, als je SQL Server authenticatie moet gebruiken bij het verbinden met de Publisher.
Een planning voor de samenvoegagent-taak voor dit abonnement. Voor meer informatie, zie Maak een updateerbaar abonnement op een transactionele publicatie aan.
Op de Publisher voer je sp_addmergesubscription uit (Transact-SQL). Specificeer @publication, @subscriber, @subscriber_db en een waarde van pull voor @subscription_type. Dit registreert het pull-abonnement.
Voorbeelden (Transact-SQL)
Het volgende voorbeeld creëert een pull-abonnement op een transactionele publicatie. De eerste batch wordt uitgevoerd bij de Subscriber, en de tweede batch bij de Publisher. Aanmeldings- en wachtwoordwaarden worden tijdens runtime opgegeven met behulp van sqlcmd-scriptvariabelen.
-- 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
Het volgende voorbeeld creëert een pull-abonnement op een samengevoegde publicatie. De eerste batch wordt uitgevoerd bij de Subscriber, en de tweede batch bij de Publisher. Inlog- en wachtwoordwaarden worden tijdens runtime geleverd met behulp van sqlcmd-scriptvariabelen .
-- 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
Replicatiebeheerobjecten (RMO) gebruiken
De RMO-klassen die worden gebruikt om een pull-abonnement te maken, hangen af van het type publicatie waartoe het abonnement behoort.
Om een pull-abonnement aan te maken op een snapshot of transactionele publicatie
Maak verbindingen met zowel de abonnee als de uitgever met behulp van de ServerConnection klasse.
Maak een exemplaar van de TransPublication klasse met behulp van de Publisher-verbinding uit stap 1. Geef Name, DatabaseName en ConnectionContext.
Roep de LoadProperties methode aan. Als deze methode onwaar retourneert, zijn de eigenschappen die zijn opgegeven in stap 2 onjuist of bestaat de publicatie niet op de server.
Voer een bitsgewijze logische AND (& in Visual C# en En in Visual Basic) uit tussen de Attributes eigenschap en AllowPull. Als het resultaat None is, stelt u Attributes in op het resultaat van een bitwise OR (| in Visual C# en Of in Visual Basic) tussen Attributes en AllowPull. Bel CommitPropertyChanges vervolgens om pull-abonnementen in te schakelen.
Als de abonnementsdatabase niet bestaat, maakt u deze met behulp van de Database klasse. Voor meer informatie, zie Databases creëren, wijzigen en verwijderen.
Maak een exemplaar van de TransPullSubscription-klasse.
Stel de volgende abonnementseigenschappen in:
De ServerConnection aan de abonnee die in stap 1 is aangemaakt voor ConnectionContext.
Naam van de abonnementsdatabase voor DatabaseName.
Naam van de Publisher voor PublisherName.
Naam van de publicatiedatabase voor PublicationDBName.
Naam van de publicatie voor PublicationName.
De Login en-velden Password van SynchronizationAgentProcessSecurity om de inloggegevens te geven voor het Microsoft Windows account waaronder de Distribution Agent draait bij de abonnee. Dit account wordt gebruikt om lokale verbindingen met de abonnee te maken en om externe verbindingen te maken met Windows-authenticatie.
Note
Instellen SynchronizationAgentProcessSecurity is niet vereist wanneer het abonnement wordt aangemaakt door een lid van de sysadmin vaste serverrol, maar het wordt wel aanbevolen. In dit geval imiteert de agent het SQL Server Agent-account. Zie Replication Agent Security Modelvoor meer informatie.
(Optioneel) Een waarde van waar voor CreateSyncAgentByDefault om een agentjob te maken die wordt gebruikt om het abonnement te synchroniseren. Als je false (de standaard) opgeeft, kan het abonnement alleen programmatisch worden gesynchroniseerd en moet je extra eigenschappen opgeven wanneer TransSynchronizationAgent je dit object vanuit de SynchronizationAgent property opent. Zie Een pull-abonnement synchroniseren voor meer informatie.
Note
SQL Server Agent is niet beschikbaar in elke editie van SQL Server. Wanneer je een waarde van waar opgeeft voor Express-abonnees, wordt de agentfunctie niet aangemaakt. Belangrijke abonnementsgerelateerde metadata wordt echter opgeslagen bij de abonnee. Voor een lijst van functies die door de edities in SQL Server worden ondersteund, zie Edities en ondersteunde functies van SQL Server 2025.
(Optioneel) Stel de SqlStandardLogin en/SqlStandardPasswordof SecureSqlStandardPassword velden in DistributorSecurity wanneer je SQL Server-authenticatie gebruikt om verbinding te maken met de distributeur.
Roep de Create methode aan.
Met behulp van de instantie van de TransPublication klasse uit stap 2 roep je de MakePullSubscriptionWellKnown methode aan om het pull-abonnement bij de Publisher te registreren. Als deze registratie al bestaat, is er een uitzondering.
Om een pull-abonnement aan te maken voor een merge-publicatie
Maak verbindingen met zowel de Abonnee als de Publisher door de ServerConnection klasse te gebruiken.
Maak een exemplaar van de MergePublication klasse met behulp van de Publisher-verbinding uit stap 1. Geef Name, DatabaseNameen ConnectionContext.
Roep de LoadProperties methode aan. Als deze methode onwaar retourneert, zijn de eigenschappen die zijn opgegeven in stap 2 onjuist of bestaat de publicatie niet op de server.
Voer een bitsgewijze logische AND (& in Visual C# en En in Visual Basic) uit tussen de Attributes eigenschap en AllowPull. Als het resultaat None is, stelt u Attributes in op het resultaat van een bitwise OR (| in Visual C# en Of in Visual Basic) tussen Attributes en AllowPull. Bel CommitPropertyChanges vervolgens om pull-abonnementen in te schakelen.
Als de abonnementsdatabase niet bestaat, maakt u deze met behulp van de Database klasse. Voor meer informatie, zie Databases creëren, wijzigen en verwijderen.
Maak een exemplaar van de MergePullSubscription-klasse.
Stel de volgende abonnementseigenschappen in:
De ServerConnection aan de abonnee die in stap 1 is aangemaakt voor ConnectionContext.
Naam van de abonnementsdatabase voor DatabaseName.
Naam van de Publisher voor PublisherName.
Naam van de publicatiedatabase voor PublicationDBName.
Naam van de publicatie voor PublicationName.
De Login en-velden Password van SynchronizationAgentProcessSecurity om de inloggegevens te geven voor het Microsoft Windows account waaronder de Merge Agent draait bij de abonnee. Dit account wordt gebruikt om lokale verbindingen met de abonnee te maken en om externe verbindingen te maken met Windows-authenticatie.
Note
Instellen SynchronizationAgentProcessSecurity is niet vereist wanneer het abonnement wordt aangemaakt door een lid van de sysadmin vaste serverrol, maar het wordt wel aanbevolen. In dit geval imiteert de agent het SQL Server Agent-account. Zie Replication Agent Security Modelvoor meer informatie.
(Optioneel) Een waarde van waar voor CreateSyncAgentByDefault om een agentjob te maken die wordt gebruikt om het abonnement te synchroniseren. Als je false (de standaard) opgeeft, kan het abonnement alleen programmatisch worden gesynchroniseerd en moet je extra eigenschappen opgeven wanneer MergeSynchronizationAgent je dit object vanuit de SynchronizationAgent property opent. Zie Een pull-abonnement synchroniseren voor meer informatie.
(Optioneel) Stel de SqlStandardLogin en/SqlStandardPasswordof SecureSqlStandardPassword velden in DistributorSecurity wanneer je SQL Server-authenticatie gebruikt om verbinding te maken met de distributeur.
(Optioneel) Stel de SqlStandardLogin en/SqlStandardPasswordof SecureSqlStandardPassword velden in wanneer PublisherSecurity je SQL Server Authentication gebruikt om verbinding te maken met de Publisher.
Roep de Create methode aan.
Met behulp van de instantie van de MergePublication klasse uit stap 2 roep je de MakePullSubscriptionWellKnown methode aan om het pull-abonnement bij de Publisher te registreren. Als deze registratie al bestaat, is er een uitzondering.
Voorbeeld (RMO)
Dit voorbeeld creëert een pull-abonnement op een transactionele publicatie. De Microsoft Windows accountgegevens die zijn gebruikt om de Distribution Agent taak aan te maken, worden tijdens runtime doorgegeven.
// 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
Dit voorbeeld creëert een pull-abonnement op een mergepublicatie. De Windows-accountgegevens die zijn gebruikt om de Merge Agent-taak te maken, worden tijdens runtime doorgegeven.
// 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
Dit voorbeeld creëert een pull-abonnement op een mergepublicatie zonder een bijbehorende agent-job en abonnementsmetadata in MSsubscription_properties aan te maken. De Windows-accountgegevens die zijn gebruikt om de Merge Agent-taak te maken, worden tijdens runtime doorgegeven.
// 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
Dit voorbeeld creëert een pull-abonnement op een merge-publicatie die via het internet gesynchroniseerd kan worden met websynchronisatie. De Windows-accountgegevens die zijn gebruikt om de Merge Agent-taak te maken, worden tijdens runtime doorgegeven. Voor meer informatie, zie Websynchronisatie configureren.
// 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
Verwante onderwerpen
- concepten voor replicatiebeheerobjecten
- Eigenschappen van pull-abonnement weergeven en wijzigen
- Websynchronisatie configureren
- Abonneren op publicaties
- Best practices voor replicatiebeveiliging