Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
azure SQL Database
Toto téma popisuje, jak vytvořit odběr nabízených oznámení v SQL Serveru pomocí aplikace SQL Server Management Studio, Transact-SQL nebo objektů RMO (Replication Management Object). Informace o vytvoření pushového předplatného pro odběratele, který není SQL Serverem, najdete v tématu Vytvoření předplatného pro odběratele, který není SQL Serverem.
Poznámka:
Spravovaná instance Azure SQL může být vydavatelem, distributorem a předplatitelem pro snímkovou a transakční replikaci. Databáze ve službě Azure SQL Database můžou být nabízeny pouze předplatitelům pro snímkovou a transakční replikaci. Další informace najdete v tématu Transakční replikace se službou Azure SQL Database a službou Azure SQL Managed Instance.
Použití aplikace SQL Server Management Studio
Vytvořte push předplatné u Publisheru nebo Subscriberu pomocí Průvodce novým předplatným. Postupujte podle stránek v průvodci takto:
Zadejte vydavatele a publikaci.
Vyberte, kde se agenti replikace spouští. U push předplatného vyberte Spustit všechny agenty na distributoru (vynucené předplatné) na stránce Umístění distribučního agenta nebo na stránce Umístění sloučeného agenta podle 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í .
Informace o oprávněních, která každý agent vyžaduje, najdete v tématu Model zabezpečení agenta replikace.
Zadejte plán synchronizace a čas inicializace odběratele.
Zadejte další možnosti pro sloučení publikací: typ předplatného a hodnoty pro parametrizované filtrování.
Zadejte další možnosti pro transakční publikace, které umožňují aktualizaci předplatných. Jednou z možností je rozhodnout, jestli mají odběratelé provést změny u Publisheru okamžitě, nebo je zapsat do fronty. Další možností je nastavení přihlašovacích údajů používaných pro připojení od odběratele k Vydavateli.
Volitelně můžete předplatné skriptovat.
Vytvoření push předplatného z vydavatele
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 myši na publikaci, pro kterou chcete vytvořit jedno nebo více předplatných, a pak vyberte Nová předplatná.
Dokončete stránky v průvodci Novým předplatným.
Vytvoření push předplatného na straně odběratele
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 pak vyberte Nová předplatná.
Na stránce Publikace v Průvodci vytvářením nového odběru vyberte z rozevíracího seznamu<Najít SQL Server Publisher> nebo <Najít Oracle Publisher>.
Připojte se k publisheru v dialogovém okně Připojit k serveru .
Vyberte publikaci na stránce Publikace .
Vyplňte stránky v Průvodci novým předplatným.
Použití Transact-SQL
Můžete vytvořit zasílaná předplatná programově pomocí uložených procedur replikace. Použité uložené procedury budou záviset na typu publikace, do které předplatné patří.
Důležité
Pokud je to možné, vyzve uživatele, aby za běhu zadali přihlašovací údaje zabezpečení. Pokud musíte přihlašovací údaje uložit do souboru skriptu, musíte ho zabezpečit, abyste zabránili neoprávněnému přístupu.
Vytvořit push odběr snímku nebo transakční publikace
V aplikaci Publisher v databázi publikace ověřte, že publikace podporuje nabízená předplatná spuštěním sp_helppublication.
Pokud je hodnota allow_push1, podporují se předplatná nabízených oznámení.
Pokud je hodnota allow_push0, spusťte sp_changepublication. Zadejte allow_push pro @property a true pro @value.
V publisheru v databázi publikace spusťte sp_addsubscription. Zadejte @publication, @subscriber a @destination_db. Zadejte hodnotu push pro @subscription_type. Informace o tom, jak aktualizovat předplatná, naleznete v tématu Vytvoření aktualizovatelného předplatného na transakční publikaci.
U Publisheru na databázi publikace spusťte sp_addpushsubscription_agent. Zadejte následující:
Parametry @subscriber, @subscriber_db a @publication.
Přihlašovací údaje systému Microsoft Windows, pod kterými běží distribuční agent na distributoru pro @job_login a @job_password.
Poznámka:
Připojení vytvořená prostřednictvím integrovaného ověřování systému Windows vždy používají přihlašovací údaje systému Windows zadané @job_login a @job_password. Distribuční agent vždy vytvoří místní připojení k distributoru pomocí integrovaného ověřování systému Windows. Ve výchozím nastavení se agent připojí k odběrateli pomocí integrovaného ověřování systému Windows.
(Volitelné) Hodnota 0 pro @subscriber_security_mode a přihlašovací údaje microsoft SQL Serveru pro @subscriber_login a @subscriber_password. Tyto parametry zadejte, pokud při připojování k odběrateli potřebujete použít ověřování SQL Serveru.
Harmonogram pro úlohu distribučního agenta pro toto předplatné. Další informace naleznete v tématu Určení plánů synchronizace.
Důležité
Při vytváření push předplatného v Publisheru se vzdáleným distributorem se hodnoty zadané pro všechny parametry, včetně job_login a job_password, odešlou distributorovi jako nesifrovaný text. Před spuštěním této uložené procedury byste měli šifrovat připojení mezi vydavatelem a jeho vzdáleným distributorem. Další informace naleznete v tématu Povolení šifrovaných připojení k databázovému stroji (SQL Server Configuration Manager).
Pro vytvoření přímého předplatného pro slučovací publikaci
V aplikaci Publisher v databázi publikace ověřte, zda publikace podporuje nabízená předplatná spuštěním sp_helpmergepublication.
Pokud je hodnota allow_push1, publikace podporuje nabízená předplatná.
Pokud hodnota allow_push není 1, spusťte sp_changemergepublication. Zadejte allow_push pro @property a true pro @value.
V publisheru v databázi publikace spusťte sp_addmergesubscription. Zadejte následující parametry:
@publication. Toto je název publikace.
@subscriber_type. V případě klientského předplatného zadejte místní. V případě předplatného serveru zadejte globální.
@subscription_priority. Pro serverové předplatné zadejte prioritu předplatného (0.00 až 99.99).
Další informace naleznete v tématu Rozšířené zjišťování konfliktů při slučování replikace a jejich řešení.
V Publisheru v databázi publikace je potřeba spustit sp_addmergepushsubscription_agent. Zadejte následující:
Parametry @subscriber, @subscriber_db a @publication.
Přihlašovací údaje systému Windows, pod kterými na distributorovi běží agent sloučení pro @job_login a @job_password.
Poznámka:
Připojení vytvořená prostřednictvím integrovaného ověřování systému Windows vždy používají přihlašovací údaje systému Windows zadané @job_login a @job_password. Agent sloučení vždy vytvoří místní připojení k distributoru pomocí integrovaného ověřování systému Windows. Ve výchozím nastavení se agent připojí k odběrateli pomocí integrovaného ověřování systému Windows.
(Volitelné) Hodnota 0 pro @subscriber_security_mode a přihlašovací údaje SQL Serveru pro @subscriber_login a @subscriber_password. Tyto parametry zadejte, pokud při připojování k odběrateli potřebujete použít ověřování SQL Serveru.
(Volitelné) Hodnota 0 pro @publisher_security_mode a přihlašovací údaje SQL Serveru pro @publisher_login a @publisher_password. Tyto hodnoty zadejte, pokud při připojování k publisheru potřebujete použít ověřování SQL Serveru.
Plán pro úlohu agenta pro slučování pro toto předplatné. Další informace naleznete v tématu Určení plánů synchronizace.
Důležité
Při vytváření push předplatného v Publisheru se vzdáleným Distributorem jsou hodnoty zadané pro všechny parametry, včetně job_login a job_password, odeslány Distributorovi jako prostý text. Před spuštěním této uložené procedury byste měli šifrovat připojení mezi vydavatelem a jeho vzdáleným distributorem. Další informace naleznete v tématu Povolení šifrovaných připojení k databázovému stroji (SQL Server Configuration Manager).
Příklady (Transact-SQL)
Následující příklad vytvoří push odběr k transakční publikaci. Hodnoty přihlášení a hesla se za běhu zadají prostřednictvím skriptovaný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".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'push';
--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
Následující příklad vytvoří push odběr na sloučenou publikaci. Hodnoty přihlášení a hesla se za běhu zadají prostřednictvím skriptovaný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".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
SET @hostname = N'adventure-works\david8'
-- Add a push subscription to a merge publication.
USE [AdventureWorks2022];
EXEC sp_addmergesubscription
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@subscription_type = N'push',
@hostname = @hostname;
--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
Použití objektů správy replikace
Push předplatná můžete vytvářet programově pomocí objektů RMO (Replication Management Objects). Třídy RMO, které použijete k vytvoření nabízeného předplatného, závisí na typu publikace, pro kterou je odběr vytvořen.
Důležité
Pokud je to možné, vyzve uživatele, aby za běhu zadali přihlašovací údaje zabezpečení. Pokud je nutné uložit přihlašovací údaje, použijte kryptografické služby , které poskytuje rozhraní Microsoft Windows .NET Framework.
Vytvořit push odběr snímku nebo transakční publikace
Vytvořte připojení k Publisheru pomocí ServerConnection třídy.
Vytvořte instanci TransPublication 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 AllowPush. 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 AllowPush. Potom zavolejte CommitPropertyChanges , abyste povolili nabízená předplatná.
Pokud databáze předplatného neexistuje, vytvořte ji pomocí Database třídy. Další informace naleznete v tématu Vytváření, změny a odebírání databází.
Vytvořte instanci TransSubscription třídy.
Nastavte následující vlastnosti předplatného:
Připojení ServerConnection k vydavateli vytvořené v kroku 1 pro ConnectionContext.
Název databáze předplatného pro SubscriptionDBName.
Jméno odběratele pro SubscriberName.
Název databáze publikací pro DatabaseName.
Název publikace pro PublicationName.
Pole Login a Password z SynchronizationAgentProcessSecurity poskytují přihlašovací údaje pro účet systému Microsoft Windows, pod kterým je u distributora spuštěný agent distribuce. Tento účet slouží k vytváření místních připojení k distributoru a k vytváření vzdálených připojení pomocí ověřování systému Windows.
Poznámka:
Nastavení SynchronizationAgentProcessSecurity není vyžadováno, pokud je předplatné vytvořené členem pevné role serveru správce systému , ale doporučujeme ho. 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 (výchozí) pro vytvoření CreateSyncAgentByDefault úlohy agenta používané k synchronizaci předplatného. Pokud zadáte false, předplatné se dá synchronizovat jenom prostřednictvím kódu programu.
(Volitelné) Nastavte WindowsAuthentication na hodnotu False, a to v polích SqlStandardLogin, SqlStandardPassword nebo SecureSqlStandardPasswordSubscriberSecurity při použití ověřování SQL Serveru pro připojení k odběratelskému serveru.
Zavolejte metodu Create .
Důležité
Při vytváření push předplatného u Publisheru se vzdáleným Distributorem se hodnoty zadané pro všechny vlastnosti, včetně SynchronizationAgentProcessSecurity, odešlou Distributorovi jako prostý text. Před voláním metody byste měli zašifrovat připojení mezi vydavatelem a jeho vzdáleným distributorem Create . Další informace naleznete v tématu Povolení šifrovaných připojení k databázovému stroji (SQL Server Configuration Manager).
Vytvoření push předplatného ke sloučené publikaci
Vytvořte připojení k Publisheru pomocí ServerConnection třídy.
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 bitový logický soubor AND (& v jazyce Visual C# a And v jazyce Visual Basic) mezi Attributes vlastností a AllowPush. Pokud je None výsledek, nastavte Attributes na výsledek bitové logické OR (| v jazyce Visual C# a Or v jazyce Visual Basic) mezi Attributes a AllowPush. Potom zavolejte CommitPropertyChanges , abyste povolili nabízená předplatná.
Pokud databáze předplatného neexistuje, vytvořte ji pomocí Database třídy. Další informace naleznete v tématu Vytváření, změny a odebírání databází.
Vytvořte instanci MergeSubscription třídy.
Nastavte následující vlastnosti předplatného:
ServerConnection k Publisher vytvořený v kroku 1 pro ConnectionContext.
Název databáze předplatného pro SubscriptionDBName.
Jméno odběratele pro SubscriberName.
Název databáze publikací pro DatabaseName.
Název publikace pro PublicationName.
Pole Login a PasswordSynchronizationAgentProcessSecurity pro zadání přihlašovacích údajů pro účet Microsoft Windows, pod kterým agent sloučení běží u distributora. Tento účet slouží k vytváření místních připojení k distributoru a k provádění vzdálených připojení prostřednictvím ověřování systému Windows.
Poznámka:
Nastavení SynchronizationAgentProcessSecurity není vyžadováno, pokud je předplatné vytvořené členem pevné role serveru správce systému , ale doporučujeme ho. 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 (výchozí) pro CreateSyncAgentByDefault vytvoření úlohy agenta, která se používá k synchronizaci předplatného. Pokud zadáte false, předplatné se dá synchronizovat jenom prostřednictvím kódu programu.
(Volitelné) Nastavte pole SqlStandardLogin a SqlStandardPassword nebo pole SecureSqlStandardPassword pro SubscriberSecurity při použití SQL Server ověřování pro připojení k odběrateli.
(Volitelné) Nastavte WindowsAuthentication na False, pole SqlStandardLogin, SqlStandardPassword nebo SecureSqlStandardPassword v PublisherSecurity při použití ověřování SQL Serveru pro připojení k Publisheru.
Zavolejte metodu Create .
Důležité
Při vytváření předplatného nabízených oznámení v Publisheru se vzdáleným distributorem se hodnoty zadané pro všechny vlastnosti, včetně SynchronizationAgentProcessSecurity, odešlou distributorovi jako prostý text. Před voláním metody byste měli zašifrovat připojení mezi vydavatelem a jeho vzdáleným distributorem Create . Další informace naleznete v tématu Povolení šifrovaných připojení k databázovému stroji (SQL Server Configuration Manager).
Příklady (RMO)
Tento příklad vytvoří nové pushové předplatné k transakční publikaci. Přihlašovací údaje účtu systému Windows, které používáte ke spuštění úlohy distribučního agenta, se předávají za běhu.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
// Create the objects that we need.
TransPublication publication;
TransSubscription subscription;
try
{
// Connect to the Publisher.
conn.Connect();
// Ensure that the publication exists and that
// it supports push subscriptions.
publication = new TransPublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = conn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPush;
}
// Define the push subscription.
subscription = new TransSubscription();
subscription.ConnectionContext = conn;
subscription.SubscriberName = subscriberName;
subscription.PublicationName = publicationName;
subscription.DatabaseName = publicationDbName;
subscription.SubscriptionDBName = subscriptionDbName;
// Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// 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 push subscription.
subscription.Create();
}
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
{
conn.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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransSubscription
Try
' Connect to the Publisher.
conn.Connect()
' Ensure that the publication exists and that
' it supports push subscriptions.
publication = New TransPublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = conn
If publication.IsExistingObject Then
If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPush
End If
' Define the push subscription.
subscription = New TransSubscription()
subscription.ConnectionContext = conn
subscription.SubscriberName = subscriberName
subscription.PublicationName = publicationName
subscription.DatabaseName = publicationDbName
subscription.SubscriptionDBName = subscriptionDbName
' Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' 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 push subscription.
subscription.Create()
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
conn.Disconnect()
End Try
Tento příklad vytvoří nové pushové předplatné pro slučovací publikaci. Přihlašovací údaje účtu systému Windows, které používáte ke spuštění úlohy agenta Sloučení, se předávají za běhu.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
string hostname = @"adventure-works\garrett1";
//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergeSubscription subscription;
try
{
// Connect to the Publisher.
conn.Connect();
// Ensure that the publication exists and that
// it supports push subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = conn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPush;
}
// Define the push subscription.
subscription = new MergeSubscription();
subscription.ConnectionContext = conn;
subscription.SubscriberName = subscriberName;
subscription.PublicationName = publicationName;
subscription.DatabaseName = publicationDbName;
subscription.SubscriptionDBName = subscriptionDbName;
subscription.HostName = hostname;
// Set a schedule to synchronize the subscription every 2 hours
// during weekdays from 6am to 10pm.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
subscription.AgentSchedule.FrequencySubDayInterval = 2;
subscription.AgentSchedule.ActiveStartDate = 20051108;
subscription.AgentSchedule.ActiveEndDate = 20071231;
subscription.AgentSchedule.ActiveStartTime = 060000;
subscription.AgentSchedule.ActiveEndTime = 100000;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Create the push subscription.
subscription.Create();
}
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
{
conn.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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
Dim hostname As String = "adventure-works\garrett1"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription
Try
' Connect to the Publisher.
conn.Connect()
' Ensure that the publication exists and that
' it supports push subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = conn
If publication.IsExistingObject Then
If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPush
End If
' Define the push subscription.
subscription = New MergeSubscription()
subscription.ConnectionContext = conn
subscription.SubscriberName = subscriberName
subscription.PublicationName = publicationName
subscription.DatabaseName = publicationDbName
subscription.SubscriptionDBName = subscriptionDbName
subscription.HostName = hostname
' Set a schedule to synchronize the subscription every 2 hours
' during weekdays from 6am to 10pm.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
subscription.AgentSchedule.FrequencySubDayInterval = 2
subscription.AgentSchedule.ActiveStartDate = 20051108
subscription.AgentSchedule.ActiveEndDate = 20071231
subscription.AgentSchedule.ActiveStartTime = 60000
subscription.AgentSchedule.ActiveEndTime = 100000
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Create the push subscription.
subscription.Create()
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
conn.Disconnect()
End Try