Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Ez a témakör azt ismerteti, hogyan hozhat létre leküldéses előfizetést az SQL Server Management Studio, Transact-SQL vagy Replikációkezelési objektumok (RMO) használatával az SQL Serverben. A nem SQL Server-előfizetők leküldéses előfizetésének létrehozásáról további információt a nem SQL Server-előfizetők előfizetésének létrehozása című témakörben talál.
Megjegyzés:
A felügyelt Azure SQL-példány közzétevő, terjesztő és előfizető lehet a pillanatképek és a tranzakciós replikáció számára. Az Azure SQL Database adatbázisai csak pillanatkép- és tranzakciós replikáció push előfizetői lehetnek. További információ: Tranzakciós replikáció az Azure SQL Database-sel és a felügyelt Azure SQL-példányokkal.
Az SQL Server Management Studio használata
Hozzon létre leküldéses előfizetést a Publisherben vagy az Előfizetőben az Új előfizetés varázslóval. Kövesse a varázsló lapjait a következőhöz:
Adja meg a Közzétevőt és a kiadványt.
Válassza ki, hogy a replikációs ügynökök hol fognak futni. Leküldéses előfizetés esetén válassza az Összes ügynök futtatása a Terjesztésiügynök helye lapon vagy az Ügynök helyének egyesítése lapon a kiadvány típusától függően.
Adja meg az előfizetőket és az előfizetési adatbázisokat.
Adja meg a replikációs ügynökök által létrehozott kapcsolatokhoz használt bejelentkezéseket és jelszavakat:
A pillanatfelvételekre és tranzakciós kiadványokra való előfizetésekhez adja meg a hitelesítő adatokat a Terjesztési ügynök biztonsági beállításai oldalán.
A kiadványokat egyesítő előfizetésekhez adja meg a hitelesítő adatokat az Ügynök egyesítése biztonsági oldalon.
Az egyes ügynökök engedélyeiről további információt a replikációs ügynök biztonsági modelljében talál.
Adja meg a szinkronizálás ütemezését, és hogy mikor kell inicializálni az előfizetőt.
Adjon meg további lehetőségeket a kiadványok egyesítéséhez: az előfizetés típusa és a paraméteres szűrés értékei.
Adjon meg további lehetőségeket az előfizetések frissítését lehetővé tevő tranzakciós kiadványokhoz. Az egyik lehetőség annak eldöntése, hogy az előfizetőknek azonnal véglegesíteniük kell-e a módosításokat a Publisherben, vagy egy üzenetsorba kell őket írniuk. Egy másik lehetőség az előfizetőtől a Publisherhez való csatlakozáshoz használt hitelesítő adatok beállítása.
Igény szerint szkriptelje az előfizetést.
Leküldéses előfizetés létrehozása a Publisherből
Csatlakozzon a Publisherhez a Microsoft SQL Server Management Studióban, majd bontsa ki a kiszolgálócsomópontot.
Bontsa ki a Replikáció mappát, majd bontsa ki a Helyi kiadványok mappát.
Kattintson a jobb gombbal arra a kiadványra, amelyhez egy vagy több előfizetést szeretne létrehozni, majd válassza az Új előfizetések lehetőséget.
Töltse ki a lapokat az Új előfizetés varázslóban.
Push előfizetés létrehozása az előfizető részéről
Csatlakozzon az előfizetőhöz az SQL Server Management Studióban, majd bontsa ki a kiszolgálócsomópontot.
Nyissa meg a Replikáció mappát.
Kattintson a jobb gombbal a Helyi előfizetések mappára, majd válassza az Új előfizetések lehetőséget.
Az Új előfizetés varázsló Közzététel lapján válassza <az SQL Server Publisher> keresése vagy <az Oracle Publisher> keresése lehetőséget a Publisher legördülő listából.
Csatlakozás a Publisherhez a Csatlakozás a kiszolgálóhoz párbeszédpanelen.
Válasszon ki egy kiadványt a Kiadvány lapon.
Töltse ki a lapokat az Új előfizetés varázslóban.
Transact-SQL használata
A push alapú előfizetéseket programozási úton hozhatja létre replikációs tárolt eljárások használatával. A használt tárolt eljárások attól függenek, hogy milyen típusú kiadványhoz tartozik az előfizetés.
Fontos
Ha lehetséges, kérje meg a felhasználókat, hogy futásidőben adjanak meg biztonsági hitelesítő adatokat. Ha szkriptfájlban kell tárolnia a hitelesítő adatokat, a jogosulatlan hozzáférés megakadályozása érdekében biztonságossá kell tennie a fájlt.
Összefoglalás vagy tranzakciós kiadvány push előfizetésének létrehozása
A közzétételi adatbázisban ellenőrizze, hogy a kiadvány támogatja-e a leküldéses előfizetéseket a sp_helppublication futtatásával.
Ha a allow_push értéke 1, a leküldéses előfizetések támogatottak.
Ha a allow_push értéke 0, futtassa sp_changepublication. Adja meg a allow_push értékét @property, és igaz értéket a @value-hoz.
A közzétételi adatbázisban a Publisheren futtassa a sp_addsubscription-t. Adja meg @publication, @subscriber és @destination_db. Adja meg a leküldéses értéket a @subscription_type-hez. További információ az előfizetések frissítéséről: Frissíthető előfizetés létrehozása tranzakciós kiadványhoz.
Futtassa a sp_addpushsubscription_agent a publisherben a közzétételi adatbázisban. Adja meg a következőket:
A @subscriber, @subscriber_db és @publication paraméterek.
A Microsoft Windows hitelesítő adatok, amelyek alatt a Distribution Agent a Disztribútoron @job_login és @job_password szerint fut.
Megjegyzés:
A Windows integrált hitelesítéssel létesített kapcsolatok mindig a @job_login és @job_password által megadott Windows-hitelesítő adatokat használják. A terjesztési ügynök mindig a Helyi kapcsolatot hozza létre a forgalmazóval a Windows integrált hitelesítés használatával. Alapértelmezés szerint az ügynök a Windows integrált hitelesítés használatával csatlakozik az előfizetőhöz.
(Nem kötelező) A @subscriber_security_mode értéke 0, a Microsoft SQL Server bejelentkezési adatai pedig @subscriber_login és @subscriber_password. Adja meg ezeket a paramétereket, ha SQL Server-hitelesítést kell használnia az előfizetőhöz való csatlakozáskor.
Az előfizetés terjesztési ügynök feladatának ütemezése. További információ: Szinkronizálási ütemezések megadása.
Fontos
Ha egy távoli terjesztővel rendelkező Közzétevőnél push-előfizetést hoz létre, a rendszer az összes paraméterhez megadott értéket, beleértve a job_login és job_password, szövegként küldi el a terjesztőnek. A tárolt eljárás futtatása előtt titkosítania kell a Publisher és a távoli terjesztő közötti kapcsolatot. További információ: Titkosított kapcsolatok engedélyezése az adatbázismotorhoz (SQL Server Configuration Manager)
Előfizetés létrehozása egy egyesítési publikációhoz
A közzétételi adatbázisban ellenőrizze, hogy a kiadvány támogatja-e a leküldéses előfizetéseket a sp_helpmergepublication futtatásával.
Ha a allow_push értéke 1, a kiadvány támogatja a leküldéses előfizetéseket.
Ha a allow_push értéke nem 1, futtassa sp_changemergepublication. Adja meg a allow_push értéket a @property-hoz, és a true értéket a @value-hoz.
Futtassa a közzétételi adatbázisban lévő Publisherben az sp_addmergesubscription parancsot. Adja meg a következő paramétereket:
@publication. Ez a kiadvány neve.
@subscriber_type. Ügyfél-előfizetés esetén adja meg a helyi értéket. Kiszolgáló-előfizetés esetén adja meg a globális értéket.
@subscription_priority. Kiszolgáló-előfizetés esetén adja meg az előfizetés prioritását (0.00 – 99.99).
További információ: Fejlett összevonási replikációs ütközésészlelés és -feloldás.
A publisherben a közzétételi adatbázisban futtassa a sp_addmergepushsubscription_agent. Adja meg a következőket:
A @subscriber, @subscriber_db és @publication paraméterek.
Azok a Windows-hitelesítő adatok, amelyek alatt a Merge Agent a forgalmazónál @job_login és @job_password működik.
Megjegyzés:
A Windows integrált hitelesítéssel létesített kapcsolatok mindig a @job_login és @job_password által megadott Windows-hitelesítő adatokat használják. Az egyesítési ügynök mindig a Windows integrált hitelesítés használatával hozza létre a helyi kapcsolatot a forgalmazóval. Alapértelmezés szerint az ügynök a Windows integrált hitelesítés használatával csatlakozik az előfizetőhöz.
(Nem kötelező) A @subscriber_security_mode értéke 0, az SQL Server bejelentkezési adatai pedig @subscriber_login és @subscriber_password. Adja meg ezeket a paramétereket, ha SQL Server-hitelesítést kell használnia az előfizetőhöz való csatlakozáskor.
(Nem kötelező) A 0 érték a @publisher_security_mode, valamint az SQL Server bejelentkezési adatai: @publisher_login és @publisher_password. Adja meg ezeket az értékeket, ha SQL Server-hitelesítést kell használnia a Publisherhez való csatlakozáskor.
Az ennek az előfizetésnek szóló Merge Agent feladat ütemezése. További információ: Szinkronizálási ütemezések megadása.
Fontos
Ha push előfizetést hoz létre egy közzétevőnél, amelynek távoli terjesztője van, az összes paraméterhez megadott érték, beleértve a job_login és job_password, egyszerű szövegként van elküldve a terjesztőnek. A tárolt eljárás futtatása előtt titkosítania kell a Publisher és a távoli terjesztő közötti kapcsolatot. További információ: Titkosított kapcsolatok engedélyezése az adatbázismotorhoz (SQL Server Configuration Manager)
Példák (Transact-SQL)
Az alábbi példa leküldéses előfizetést hoz létre egy tranzakciós kiadványhoz. A bejelentkezési és jelszóértékek futásidőben, sqlcmd szkriptelési változókon keresztül lesznek megadva.
-- 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
Az alábbi példa egy push típusú előfizetést hoz létre egy egyesítési kiadványhoz. A bejelentkezési és jelszóértékek futásidőben, sqlcmd szkriptelési változókon keresztül lesznek megadva.
-- 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
Replikációkezelési objektumok használata
Leküldéses előfizetéseket programozott módon hozhat létre a Replikációkezelési objektumok (RMO) használatával. A leküldéses előfizetés létrehozásához használt RMO-osztályok attól függenek, hogy milyen típusú kiadványhoz készült az előfizetés.
Fontos
Ha lehetséges, kérje meg a felhasználókat, hogy futásidőben adjanak meg biztonsági hitelesítő adatokat. Ha hitelesítő adatokat kell tárolnia, használja a Microsoft Windows .NET-keretrendszer által biztosított titkosítási szolgáltatásokat .
Leküldéses előfizetés létrehozása pillanatképhez vagy tranzakciós kiadványhoz
Hozzon létre kapcsolatot a Publisherrel az ServerConnection osztály használatával.
Példányosítsa az TransPublication osztályt az 1. lépésben használt Publisher-kapcsolat segítségével. Adja meg Namea , DatabaseNameés ConnectionContexta .
Hívja meg a LoadProperties metódust. Ha ez a metódus hamis értéket ad vissza, a 2. lépésben megadott tulajdonságok helytelenek, vagy a kiadvány nem létezik a kiszolgálón.
Bitenkénti logikai ÉS művelet végrehajtása (& a Visual C# nyelvben és And a Visual Basic nyelvben) a Attributes tulajdonság és AllowPush között. Ha az eredmény None, állítsa be Attributes értékét az Attributes és AllowPush közötti bitenkénti logikai OR művelet eredményére (| a Visual C#-ben és Or a Visual Basic-ben). Ezután hívja meg CommitPropertyChanges a leküldéses előfizetések engedélyezéséhez.
Ha az előfizetési adatbázis nem létezik, hozza létre az Database osztály használatával. További információ: Adatbázisok létrehozása, módosítása és eltávolítása.
Hozzon létre egy példányt a TransSubscription osztályból.
Adja meg a következő előfizetési tulajdonságokat:
Az 1. lépésben létrehozott ServerConnection közzétevő a következőhöz ConnectionContext.
A(z) előfizetési adatbázisának SubscriptionDBNameneve.
Az előfizető neve a következőhöz SubscriberName: .
A következő kiadvány adatbázisa neve: DatabaseName
A kiadvány neve a következőhöz PublicationName: .
A Login és Password mezők a SynchronizationAgentProcessSecurity-ben arra szolgálnak, hogy megadják annak a Microsoft Windows-fióknak a hitelesítő adatait, amely alatt a terjesztési ügynök fut a forgalmazónál. Ez a fiók helyi kapcsolatok létesítésére szolgál a forgalmazóval, valamint távoli kapcsolatok létesítésére a Windows-hitelesítés használatával.
Megjegyzés:
A beállítás SynchronizationAgentProcessSecurity nem szükséges, ha az előfizetést a sysadmin rögzített kiszolgálói szerepkör egyik tagja hozza létre, de javasoljuk. Ebben az esetben az ügynök megszemélyesíti az SQL Server Agent-fiókot. További információ: Replikációs ügynök biztonsági modellje.
(Nem kötelező) Az előfizetés szinkronizálásához használt ügynökfeladat létrehozásához az alapértelmezett igaz értéket használja CreateSyncAgentByDefault-ként. Ha hamis értéket ad meg, az előfizetés csak programozott módon szinkronizálható.
(Nem kötelező) Állítsa a WindowsAuthentication értékét Hamisra, a SqlStandardLogin, SqlStandardPassword vagy a SecureSqlStandardPassword mezőket pedig a SubscriberSecurity mezők esetén, amikor SQL Server-hitelesítést használ az előfizetőhöz való csatlakozáshoz.
Hívja meg a Create metódust.
Fontos
Ha push előfizetést hoz létre egy távoli Forgalmazóval rendelkező Közzétevőnél, az összes tulajdonsághoz megadott értéket, köztük SynchronizationAgentProcessSecurity, egyszerű szövegként küldi el a Forgalmazónak. A metódus meghívása előtt titkosítania kell a Publisher és a Create távoli terjesztő közötti kapcsolatot. További információ: Titkosított kapcsolatok engedélyezése az adatbázismotorhoz (SQL Server Configuration Manager)
Előfizetés létrehozása egy egyesítési publikációhoz
Hozzon létre kapcsolatot a Publisherrel az ServerConnection osztály használatával.
Példányosítsa az MergePublication osztályt az 1. lépésben használt Publisher-kapcsolat segítségével. Adja meg Namea , DatabaseNameés ConnectionContexta .
Hívja meg a LoadProperties metódust. Ha ez a metódus hamis értéket ad vissza, a 2. lépésben megadott tulajdonságok helytelenek, vagy a kiadvány nem létezik a kiszolgálón.
Végezze el a bitenkénti logikai ÉS (& a Visual C#-ban és And a Visual Basicben) műveletet a Attributes tulajdonság és a AllowPush között. Ha az eredmény None, állítsa be a Attributes-et a Attributes és AllowPush közötti bitenkénti logikai OR művelet eredményére (| Visual C#-ben és Or Visual Basic-ben). Ezután hívja meg a CommitPropertyChanges, hogy engedélyezze a leküldéses előfizetéseket.
Ha az előfizetési adatbázis nem létezik, hozza létre az Database osztály használatával. További információ: Adatbázisok létrehozása, módosítása és eltávolítása.
Hozzon létre egy példányt a MergeSubscription osztályból.
Adja meg a következő előfizetési tulajdonságokat:
Az ServerConnection az 1. lépésben létrehozott közzétevőhöz a ConnectionContext számára.
A(z) előfizetési adatbázisának SubscriptionDBNameneve.
Az SubscriberName előfizető neve.
A DatabaseName kiadvány adatbázisának neve.
A PublicationName kiadvány neve.
A Login és Password mezők a SynchronizationAgentProcessSecurity esetében a Microsoft Windows-fiók hitelesítő adatainak megadására szolgálnak, amelyek alatt az egyesítési ügynök a forgalmazónál fut. Ez a fiók helyi kapcsolatok létesítésére szolgál a forgalmazóval, valamint távoli kapcsolatok létesítésére Windows-hitelesítéssel.
Megjegyzés:
A beállítás SynchronizationAgentProcessSecurity nem szükséges, ha az előfizetést a sysadmin rögzített kiszolgálói szerepkör egyik tagja hozza létre, de javasoljuk. Ebben az esetben az ügynök megszemélyesíti az SQL Server Agent-fiókot. További információ: Replikációs ügynök biztonsági modellje.
(Nem kötelező) Egy CreateSyncAgentByDefault érték, amely igaz (alapértelmezett), létrehoz egy ügynökfeladatot, amely az előfizetés szinkronizálására szolgál. Ha hamis értéket ad meg, az előfizetés csak programozott módon szinkronizálható.
(Nem kötelező) Állítsa be a SqlStandardLogin és SqlStandardPassword vagy SecureSqlStandardPassword mezőket a SubscriberSecurity-ben, amikor SQL Server-hitelesítést használ az előfizetőhöz való csatlakozáshoz.
(Nem kötelező) Állítsa be a WindowsAuthentication False (Hamis) értéket, illetve SqlStandardLoginSqlStandardPassword annak mezőitSecureSqlStandardPassword, PublisherSecurity amikor az SQL Server-hitelesítést használja a Publisherhez való csatlakozáshoz.
Hívja meg a Create metódust.
Fontos
Ha push típusú előfizetést hoz létre egy távoli terjesztővel rendelkező közzétevőnél, a rendszer az összes tulajdonsághoz megadott értéket, beleértve a SynchronizationAgentProcessSecurity helyőrzőt is, egyszerű szövegként küldi el a terjesztőnek. A metódus meghívása előtt titkosítania kell a Publisher és a Create távoli terjesztő közötti kapcsolatot. További információ: Titkosított kapcsolatok engedélyezése az adatbázismotorhoz (SQL Server Configuration Manager)
Példák (RMO)
Ez a példa létrehoz egy új leküldéses előfizetést egy tranzakciós kiadványhoz. A Terjesztési ügynök feladat futtatásához használt Windows-fiók hitelesítő adatai futásidőben lesznek átadva.
// 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
Ez a példa létrehoz egy új leküldéses előfizetést egy egyesítési kiadványhoz. Az Egyesítési ügynök feladat futtatásához használt Windows-fiók hitelesítő adatai futásidőben lesznek átadva.
// 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