Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL ServerAzure
SQL Managed Instance
Toto téma popisuje, jak vytvořit pull předplatné v SQL Server pomocí SQL Server Management Studio, Transact-SQL nebo Replication Management Objects (RMO).
Nastavení pull předplatného pro P2P replikaci je možné pomocí skriptu, ale není dostupné přes průvodce.
Použití aplikace SQL Server Management Studio
Vytvořte pull předplatné u Publisher nebo Subscriber pomocí Průvodce novým odběratelem. Postupujte podle stránek v průvodci takto:
Zadejte vydavatele a publikaci.
Vyberte, kde se agenti replikace spouští. Pro pull předplatné vyberte Spustit každého agenta na jeho Subscriber (pull subscriptions) na stránce Distribution Agent Location nebo na stránce Merge Agent Location, v závislosti na typu publikace.
Zadejte odběratele a databáze předplatných.
Zadejte přihlašovací jména a hesla používaná pro připojení provedená agenty replikace:
Pro odběry snímkových a transakčních publikací zadejte přihlašovací údaje na stránce Zabezpečení distribučního agenta.
Pro předplatná ke sloučení publikací zadejte přihlašovací údaje na stránce Zabezpečení agenta sloučení .
Pro informace o oprávněních požadovaných každým agentem viz Model zabezpečení replikačního agenta.
Zadejte plán synchronizace a čas inicializace odběratele.
Specifikujte další možnosti sloučení publikací: typ předplatného; hodnoty pro parametrizované filtrování; a informace pro synchronizaci přes HTTPS, pokud je publikace povolena pro webovou synchronizaci.
Specifikujte další možnosti pro transakční publikace, které umožňují aktualizaci odběrů: zda mají předplatitelé okamžitě zavést změny u Publisher, nebo je zapsat do fronty; přihlašovací údaje používané k připojení od předplatitele k Publisher.
Volitelně si předplatné naskriptujte.
Pro vytvoření pull předplatného od Publisher
Připojte se k publisheru v aplikaci Microsoft SQL Server Management Studio a potom rozbalte uzel serveru.
Rozbalte složku Replikace a potom rozbalte složku Místní publikace .
Klikněte pravým tlačítkem na publikaci, pro kterou chcete vytvořit jedno nebo více odběrů, a poté klikněte na Nová odběra.
Dokončete stránky v průvodci Novým předplatným.
Pro vytvoření pull předplatného od Subscriber
Připojte se ke Subscriber v SQL Server Management Studio a pak rozbalte uzel serveru.
Rozbalte složku Replikace .
Klikněte pravým tlačítkem myši na složku Místní předplatná a potom klikněte na nová předplatná.
Na stránce Publikace v Průvodci vytvářením nového odběru vyberte z << nebo >Najít Oracle Publisher.
Připojte se k publisheru v dialogovém okně Připojit k serveru .
Vyberte publikaci na stránce Publikace .
Dokončete stránky v průvodci Novým předplatným.
Použití Transact-SQL
Pull předplatné lze vytvářet programově pomocí uložených procedur replikace. Použité uložené procedury budou záviset na typu publikace, do které předplatné patří.
Pro vytvoření pull předplatného na snapshot nebo transakční publikaci
Na Publisher ověřte, že publikace podporuje pull subscriptions, vykonáním sp_helppublication (Transact-SQL).
Pokud je hodnota allow_pull ve výsledné sadě 1, pak publikace podporuje pull subscriptions.
Pokud je hodnota allow_pull0, proveďte sp_changepublication (Transact-SQL), přičemž allow_pull pro @property a pravda pro @value.
U odběratele proveďte sp_addpullsubscription (Transact-SQL). Upřesněte @publisher a @publication. Pro informace o aktualizaci předplatného viz Vytvořit aktualizovatelné předplatné transakční publikace.
U odběratele proveďte sp_addpullsubscription_agent (Transact-SQL). Zadejte následující:
Parametry @publisher, @publisher_db a @publication .
Microsoft Windows přihlašovací údaje, pod kterými Distribution Agent u Subscriber běží pro @job_login a @job_password.
Note
Spojení vytvořená pomocí Windows integrované autentizace vždy používají Windows přihlašovací údaje specifikované @job_login a @job_password. Distribuční agent vždy vytvoří místní připojení k odběrateli pomocí integrovaného ověřování systému Windows. Ve výchozím nastavení se agent připojí k distributorovi pomocí Windows Integrated Authentication.
(Volitelné) Hodnota 0 pro @distributor_security_mode a SQL Server přihlašovací údaje pro @distributor_login a @distributor_password, pokud potřebujete použít SQL Server autentizaci při připojení k distributorovi.
Harmonogram pro úlohu distribučního agenta pro toto předplatné. Další informace naleznete v tématu Určení plánů synchronizace.
V Publisher provést sp_addsubscription (Transact-SQL) pro registraci pull předplatného. Zadejte @publication, @subscriber a @destination_db. Zadejte hodnotu pull pro @subscription_type.
Pro vytvoření pull předplatného na sloučení publikace
Na Publisher ověřte, že publikace podporuje stažení odběrů pomocí sp_helpmergepublication (Transact-SQL).
Pokud je hodnota allow_pull ve výsledné sadě 1, pak publikace podporuje pull subscriptions.
Pokud je hodnota allow_pull0, proveďte sp_changemergepublication (Transact-SQL), přičemž allow_pull je určeno pro @property a pravda pro @value.
U odběratele proveďte sp_addmergepullsubscription (Transact-SQL). Specifikujte @publisher, @publisher_db, @publication a následující parametry:
@subscriber_type - specifikujte lokální pro klientské předplatné a globální pro serverové předplatné.
@subscription_priority - Určete prioritu předplatného (0,00 až 99,99). To je vyžadováno pouze pro předplatné serveru.
Další informace najdete v tématu Pokročilé zjišťování a řešení konfliktů replikace sloučením.
U odběratele proveďte sp_addmergepullsubscription_agent (Transact-SQL). Zadejte následující parametry:
@publisher, @publisher_db a @publication.
Windows přihlašovací údaje, pod kterými Merge Agent u Subscriber běží pro @job_login a @job_password.
Note
Spojení vytvořená pomocí Windows integrované autentizace vždy používají Windows přihlašovací údaje specifikované @job_login a @job_password. Merge Agent vždy naváže lokální spojení s předplatitelem pomocí Windows Integrated Authentication. Ve výchozím nastavení se agent připojí k distributorovi a Publisher pomocí integrované autentizace Windows.
(Volitelné) Hodnota 0 pro @distributor_security_mode a SQL Server přihlašovací údaje pro @distributor_login a @distributor_password, pokud potřebujete použít SQL Server autentizaci při připojení k distributorovi.
(Volitelné) Hodnota 0 pro @publisher_security_mode a SQL Server přihlašovací údaje pro @publisher_login a @publisher_password, pokud potřebujete použít SQL Server autentizaci při připojení k Publisher.
Plán pro úlohu agenta pro slučování pro toto předplatné. Pro více informací viz Vytvořit aktualizovatelné předplatné transakční publikace.
Na Publisher proveďte sp_addmergesubscription (Transact-SQL). Specifikujte @publication, @subscriber, @subscriber_db a hodnotu pull pro @subscription_type. Tím se zaregistruje pull předplatné.
Příklady (Transact-SQL)
Následující příklad vytváří pull předplatné transakční publikace. První várka se provádí u předplatitele a druhá várka u Publisher. Hodnoty přihlášení a hesla se za běhu zadají pomocí proměnných skriptování sqlcmd.
-- 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
Následující příklad vytváří pull předplatné pro sloučení publikace. První várka se provádí u předplatitele a druhá várka u Publisher. Přihlašovací a heslové hodnoty jsou zadávány za běhu pomocí skriptovacích proměnných sqlcmd .
-- 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
Použití objektů správy replikace (RMO)
Třídy RMO používané k vytvoření pull předplatného závisí na typu publikace, ke které předplatné patří.
Pro vytvoření pull předplatného na snapshot nebo transakční publikaci
Vytvořte připojení k odběrateli i vydavateli pomocí ServerConnection třídy.
Vytvořte instanci TransPublication třídy pomocí připojení Publisheru z kroku 1. Zadejte Name, DatabaseName a ConnectionContext.
Zavolejte metodu LoadProperties . Pokud tato metoda vrátí hodnotu false, buď vlastnosti zadané v kroku 2 jsou nesprávné nebo publikace na serveru neexistuje.
Proveďte bitovou logickou operaci AND (& v jazyce Visual C# a And v jazyce Visual Basic) mezi vlastností Attributes a AllowPull. Pokud je výsledek None, nastavte Attributes na výsledek bitové logické operace OR (| v jazyce Visual C# a Or v jazyce Visual Basic) mezi Attributes a AllowPull. Poté zavolejte CommitPropertyChanges a povolte pull subscriptions.
Pokud databáze předplatného neexistuje, vytvořte ji pomocí Database třídy. Pro více informací viz Vytváření, Měnit a Odstraňovat databáze.
Vytvořte instanci TransPullSubscription třídy.
Nastavte následující vlastnosti předplatného:
To the Subscriber vytvořené ServerConnection v kroku 1 pro ConnectionContext.
Název databáze předplatného pro DatabaseName.
Název Publisher pro PublisherName.
Název databáze publikací pro PublicationDBName.
Název publikace pro PublicationName.
Pole LoginSynchronizationAgentProcessSecurity a Password poskytují přihlašovací údaje pro účet Microsoft Windows, pod kterým Distribution Agent běží u Subscriber. Tento účet slouží k navazování lokálních spojení s předplatitelem a k vzdáleným spojením pomocí ověřování Windows.
Note
Nastavení SynchronizationAgentProcessSecurity není nutné, pokud předplatné vytváří člen role pevného správce systému , ale doporučuje se. V takovém případě agent zosobní účet agenta SQL Serveru. Další informace naleznete v tématu Model zabezpečení agenta replikace.
(Volitelné) Hodnota true pro pro CreateSyncAgentByDefault vytvoření agentní úlohy, která se používá k synchronizaci předplatného. Pokud zadáte false (výchozí), předplatné lze synchronizovat pouze programově a musíte zadat další vlastnosti, TransSynchronizationAgent kdy k objektu přistupujete z dané SynchronizationAgent vlastnosti. Další informace naleznete v tématu Synchronizace vyžádaného odběru.
Note
SQL Server Agent není dostupný ve všech edicích SQL Server. Když zadáte hodnotu true pro Express Subscribers, agentní role se nevytvoří. Důležitá metadata související s odběratelem jsou však uložena u Subscriber. Pro seznam funkcí podporovaných edicí v SQL Server viz Edice a podporované funkce SQL Server 2025.
(Volitelné) Nastavte SqlStandardLogin pole a SqlStandardPassword nebo SecureSqlStandardPassword při DistributorSecurity použití SQL Server Authentication pro připojení k distributorovi.
Zavolejte metodu Create .
Pomocí instance třídy TransPublication z kroku 2 zavolejte metodu MakePullSubscriptionWellKnown pro registraci pull předplatného u Publisher. Pokud tato registrace již existuje, nastává výjimka.
Pro vytvoření pull předplatného na sloučení publikace
Vytvořte spojení jak s předplatitelem, tak s Publisher pomocí této třídyServerConnection.
Vytvořte instanci MergePublication třídy pomocí připojení Publisheru z kroku 1. Zadejte Name, DatabaseNamea ConnectionContext.
Zavolejte metodu LoadProperties . Pokud tato metoda vrátí hodnotu false, buď vlastnosti zadané v kroku 2 jsou nesprávné nebo publikace na serveru neexistuje.
Proveďte bitovou logickou operaci AND (& v jazyce Visual C# a And v jazyce Visual Basic) mezi vlastností Attributes a AllowPull. Pokud je výsledek None, nastavte Attributes na výsledek bitové logické operace OR (| v jazyce Visual C# a Or v jazyce Visual Basic) mezi Attributes a AllowPull. Poté zavolejte CommitPropertyChanges a povolte pull subscriptions.
Pokud databáze předplatného neexistuje, vytvořte ji pomocí Database třídy. Pro více informací viz Vytváření, Měnit a Odstraňovat databáze.
Vytvořte instanci MergePullSubscription třídy.
Nastavte následující vlastnosti předplatného:
To the Subscriber vytvořené ServerConnection v kroku 1 pro ConnectionContext.
Název databáze předplatného pro DatabaseName.
Název Publisher pro PublisherName.
Název databáze publikací pro PublicationDBName.
Název publikace pro PublicationName.
Pole LoginSynchronizationAgentProcessSecurity a Password slouží k poskytnutí přihlašovacích údajů pro účet Microsoft Windows, pod kterým Merge Agent běží u Subscriber. Tento účet slouží k navazování lokálních spojení s předplatitelem a k vzdáleným spojením pomocí ověřování Windows.
Note
Nastavení SynchronizationAgentProcessSecurity není nutné, pokud předplatné vytváří člen role pevného správce systému , ale doporučuje se. V takovém případě agent zosobní účet agenta SQL Serveru. Další informace naleznete v tématu Model zabezpečení agenta replikace.
(Volitelné) Hodnota true pro pro CreateSyncAgentByDefault vytvoření agentní úlohy, která se používá k synchronizaci předplatného. Pokud zadáte false (výchozí), předplatné lze synchronizovat pouze programově a musíte zadat další vlastnosti, MergeSynchronizationAgent kdy k objektu přistupujete z dané SynchronizationAgent vlastnosti. Další informace naleznete v tématu Synchronizace vyžádaného odběru.
(Volitelné) Nastavte SqlStandardLogin pole a SqlStandardPassword nebo SecureSqlStandardPassword při DistributorSecurity použití SQL Server Authentication pro připojení k distributorovi.
(Volitelné) Nastavte SqlStandardLogin pole a SqlStandardPassword nebo SecureSqlStandardPassword při PublisherSecurity použití SQL Server Authentication pro připojení k Publisher.
Zavolejte metodu Create .
Pomocí instance třídy MergePublication z kroku 2 zavolejte metodu MakePullSubscriptionWellKnown pro registraci pull předplatného u Publisher. Pokud tato registrace již existuje, nastává výjimka.
Příklad (RMO)
Tento příklad vytváří pull předplatné transakční publikace. Přihlašovací údaje k účtu Microsoft Windows použité k vytvoření Distribution Agent úlohy jsou předávány za běhu.
// 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
Tento příklad vytváří pull předplatné na sloučení publikace. Přihlašovací údaje k účtu Windows použité k vytvoření úlohy Merge Agent jsou předávány za běhu.
// 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
Tento příklad vytváří pull předplatné na sloučení publikace bez vytvoření přidružené agentní role a metadat předplatného v MSsubscription_properties. Přihlašovací údaje k účtu Windows použité k vytvoření úlohy Merge Agent jsou předávány za běhu.
// 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
Tento příklad vytváří pull předplatné na sloučení publikace, kterou lze synchronizovat přes internet pomocí webové synchronizace. Přihlašovací údaje k účtu Windows použité k vytvoření úlohy Merge Agent jsou předávány za běhu. Pro více informací viz Konfigurace webové synchronizace.
// 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
Související obsah
- koncepty objektů správy replikace
- Zobrazení a úprava vlastností pull odběru
- Konfigurace synchronizace webu
- Přihlásit se k odběru publikací
- Osvědčené postupy zabezpečení replikace