Erstellen eines Pushabonnements
Gilt für: SQL Server Azure SQL-Datenbank
In diesem Thema wird beschrieben, wie Sie ein Pushabonnement in SQL Server mithilfe von SQL Server Management Studio, Transact-SQL oder Replikationsverwaltungsobjekte (RMO) erstellen. Informationen zum Erstellen eines Pushabonnements für einen Nicht-SQL Server-Abonnenten finden Sie unter Erstellen eines Abonnements für einen Nicht-SQL Server-Abonnenten.
Hinweis
Azure SQL Managed Instance kann als Herausgeber, Verleger und Abonnent der Momentaufnahmen- und Transaktionsreplikation fungieren. Datenbanken in Azure SQL-Datenbank können nun Pushabonnenten der Momentaufnahmen- und Transaktionsreplikation sein. Weitere Informationen finden Sie in den Abschnitten zur Transaktionsreplikation unter Replikation zu Azure SQL-Datenbank und Transaktionsreplikation mit Azure SQL Managed Instance (Vorschau).
Verwendung von SQL Server Management Studio
Erstellen Sie mit dem Assistenten für neue Abonnements ein Pushabonnement auf dem Verleger oder Abonnenten. Folgen Sie den Seiten im Assistenten für folgende Aufgaben:
Angeben des Verlegers und der Veröffentlichung.
Auswählen, wo die Replikations-Agents ausgeführt werden. Wählen Sie für ein Pushabonnement je nach Veröffentlichungstyp auf der Seite Speicherort des Verteilungs-Agents bzw. Speicherort des Merge-Agents die Option Alle Agents auf dem Verteiler ausführen (Pushabonnements) aus.
Angeben der Abonnenten und Abonnentendatenbanken.
Angeben der Anmeldenamen und Kennwörter für Verbindungen zwischen den Replikations-Agents:
Bei Abonnements für Momentaufnahme- und Transaktionsveröffentlichungen geben Sie die Anmeldeinformationen auf der Seite Sicherheit für den Verteilungs-Agent an.
Bei Abonnements für Mergeveröffentlichungen geben Sie die Anmeldeinformationen auf der Seite Sicherheit für den Merge-Agent an.
Informationen zu den erforderlichen Berechtigungen für die jeweiligen Agents finden Sie unter Sicherheitsmodell des Replikations-Agents.
Angeben eines Synchronisierungszeitplans und wann der Abonnent initialisiert werden soll.
Angeben weiterer Optionen für Mergeveröffentlichungen. Diese Optionen umfassen den Abonnementtyp und Werte für parametrisierte Filter.
Angeben von zusätzlichen Optionen für Transaktionsveröffentlichungen, die Updates von Abonnements zulassen. Eine Option besteht darin, zu entscheiden, ob Abonnenten bei Änderungen auf dem Verleger sofort einen Commit ausführen oder diese in eine Warteschlange schreiben sollen. Eine weitere Option besteht darin, Anmeldeinformationen einzurichten, mit denen eine Verbindung zwischen dem Abonnenten und dem Verleger hergestellt wird.
Optionales Erstellen eines Skripts für das Abonnement.
So erstellen Sie ein Pushabonnement auf dem Verleger
Stellen Sie mit dem Verleger in Microsoft SQL Server Management Studio eine Verbindung her, und erweitern Sie dann den Serverknoten.
Erweitern Sie den Ordner Replikation , und erweitern Sie dann den Ordner Lokale Veröffentlichungen .
Klicken Sie mit der rechten Maustaste auf die Veröffentlichung, für die Sie ein oder mehrere Abonnements erstellen möchten, und klicken Sie dann auf Neue Abonnements.
Schließen Sie die Seiten im Assistenten für neue Abonnements ab.
So erstellen Sie ein Pushabonnement auf dem Abonnenten
Stellen Sie mit dem Abonnenten in SQL Server Management Studio eine Verbindung her, und erweitern Sie dann den Serverknoten.
Erweitern Sie den Ordner Replikation .
Klicken Sie mit der rechten Maustaste zuerst auf den Ordner Lokale Abonnements und anschließend auf Neue Abonnements.
Wählen Sie im Assistenten für neue Abonnements auf der Seite Veröffentlichung in der Dropdownliste Verleger die Option <SQL Server-Verleger suchen> oder <Oracle-Verleger suchen> aus.
Stellen Sie im Dialogfeld Verbindung mit Server herstellen eine Verbindung mit dem Verleger her.
Wählen Sie auf der Seite Veröffentlichung eine Veröffentlichung aus.
Schließen Sie die Seiten im Assistenten für neue Abonnements ab.
Verwenden von Transact-SQL
Sie können Pushabonnements mithilfe von gespeicherten Replikationsprozeduren programmgesteuert erstellen. Die verwendeten gespeicherten Prozeduren hängen vom Typ der Veröffentlichung ab, zu der das Abonnement gehört.
Wichtig
Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit anzugeben. Wenn Anmeldeinformationen in einer Skriptdatei gespeichert werden müssen, muss die Datei an einem sicheren Ort gespeichert werden, um unberechtigten Zugriff zu vermeiden.
So erstellen Sie ein Pushabonnement für eine Momentaufnahme- oder Transaktionsveröffentlichung.
Überprüfen Sie für die Veröffentlichungsdatenbank auf dem Verleger, ob die Veröffentlichung Pushabonnements unterstützt, indem Sie sp_helppublication ausführen.
Wenn der Wert von allow_push1ist, werden Pushabonnements unterstützt.
Wenn der Wert von allow_push0 ist, führen Sie sp_changepublication aus. Legen Sie allow_push für @property und true für @value fest.
Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addsubscription aus. Geben Sie @publication, @subscriberund @destination_dban. Geben Sie den Wert push für @subscription_typean. Weitere Informationen zum Aktualisieren von Abonnements finden Sie unter Erstellen eines aktualisierbaren Abonnements für eine Transaktionsveröffentlichung.
Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addpushsubscription_agent aus. Geben Sie die folgenden Informationen an:
Die Parameter @subscriber, @subscriber_dbund @publication .
Die Microsoft Windows-Anmeldeinformationen, unter denen der Verteilungs-Agent auf dem Verteiler für @job_login und @job_password ausgeführt wird.
Hinweis
Für Verbindungen, die über die integrierte Windows-Authentifizierung hergestellt werden, werden immer die mit @job_login und @job_password angegebenen Windows-Anmeldeinformationen verwendet. Der Verteilungs-Agent stellt die lokale Verbindung mit dem Verteiler immer mithilfe der integrierten Windows-Authentifizierung her. Standardmäßig stellt der Agent mithilfe der integrierten Windows-Authentifizierung eine Verbindung mit dem Abonnenten her.
(Optional) Den Wert 0 für @subscriber_security_mode und die Microsoft SQL Server-Anmeldeinformationen für @subscriber_login und @subscriber_password. Geben Sie diese Parameter an, falls Sie beim Herstellen einer Verbindung mit dem Abonnenten die SQL Server-Authentifizierung verwenden müssen.
Einen Zeitplan für den Verteilungs-Agentauftrag für dieses Abonnement. Weitere Informationen finden Sie unter Angeben von Synchronisierungszeitplänen.
Wichtig
Wenn Sie ein Pushabonnement auf einem Verleger mit einem Remoteverteiler erstellen, werden die angegebenen Werte für alle Parameter, einschließlich job_login und job_password, als Nur-Text an den Verteiler gesendet. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie diese gespeicherte Prozedur ausführen. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).
So erstellen Sie ein Pushabonnement für eine Mergeveröffentlichung
Überprüfen Sie für die Veröffentlichungsdatenbank auf dem Verleger, ob die Veröffentlichung Pushabonnements unterstützt, indem Sie sp_helpmergepublication ausführen.
Wenn der Wert von allow_push1ist, werden Pushabonnements von der Veröffentlichung unterstützt.
Wenn der Wert von allow_push nicht 1 ist, führen Sie sp_changemergepublication aus. Legen Sie allow_push für @property und true für @value fest.
Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addmergesubscription aus. Geben Sie die folgenden Parameter an:
@publication. Das ist der Name der Veröffentlichung.
@subscriber_type. Geben Sie für ein Clientabonnement local an. Geben Sie für ein Serverabonnement global an.
@subscription_priority. Geben Sie für ein Serverabonnement eine Priorität für das Abonnement (0.00 bis 99.99) an.
Weitere Informationen finden Sie unter Erweiterte Konflikterkennung und -lösung bei der Mergereplikation.
Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addmergepushsubscription_agent aus. Geben Sie die folgenden Informationen an:
Die Parameter @subscriber, @subscriber_dbund @publication .
Die Windows-Anmeldeinformationen, unter denen der Merge-Agent auf dem Verteiler für @job_login und @job_passwordausgeführt wird.
Hinweis
Für Verbindungen, die über die integrierte Windows-Authentifizierung hergestellt werden, werden immer die mit @job_login und @job_password angegebenen Windows-Anmeldeinformationen verwendet. Der Merge-Agent stellt die lokale Verbindung mit dem Verteiler immer mithilfe der integrierten Windows-Authentifizierung her. Standardmäßig stellt der Agent mithilfe der integrierten Windows-Authentifizierung eine Verbindung mit dem Abonnenten her.
(Optional) Den Wert 0 für @subscriber_security_mode und die SQL Server-Anmeldeinformationen für @subscriber_login und @subscriber_password. Geben Sie diese Parameter an, falls Sie beim Herstellen einer Verbindung mit dem Abonnenten die SQL Server-Authentifizierung verwenden müssen.
(Optional) Den Wert 0 für @publisher_security_mode und die SQL Server-Anmeldeinformationen für @publisher_login und @publisher_password. Geben Sie diese Werte an, falls Sie beim Herstellen einer Verbindung mit dem Verleger die SQL Server-Authentifizierung verwenden müssen.
Einen Zeitplan für den Merge-Agentauftrag für dieses Abonnement. Weitere Informationen finden Sie unter Angeben von Synchronisierungszeitplänen.
Wichtig
Wenn Sie ein Pushabonnement auf einem Verleger mit einem Remoteverteiler erstellen, werden die angegebenen Werte für alle Parameter, einschließlich job_login und job_password, als Nur-Text an den Verteiler gesendet. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie diese gespeicherte Prozedur ausführen. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).
Beispiele (Transact-SQL)
Im folgenden Beispiel wird ein Pushabonnement für eine Transaktionsveröffentlichung erstellt. Die Werte für den Anmeldenamen und das Kennwort werden zur Laufzeit mithilfe von sqlcmd-Skriptvariablen bereitgestellt.
-- 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
Im folgenden Beispiel wird ein Pushabonnement für eine Mergeveröffentlichung erstellt. Die Werte für den Anmeldenamen und das Kennwort werden zur Laufzeit mithilfe von sqlcmd-Skriptvariablen bereitgestellt.
-- 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
Verwenden von Replikationsverwaltungsobjekten
Sie können Pushabonnements mithilfe von Replikationsverwaltungsobjekten (RMO) programmgesteuert erstellen. Die RMO-Klassen, die Sie zum Erstellen eines Pushabonnements verwenden, hängen vom Typ der Veröffentlichung ab, für die das Abonnement erstellt wird.
Wichtig
Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit anzugeben. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von Microsoft Windows .NET Framework.
So erstellen Sie ein Pushabonnement für eine Momentaufnahme- oder Transaktionsveröffentlichung.
Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.
Erstellen Sie eine Instanz der TransPublication -Klasse, indem Sie die Verlegerverbindung aus Schritt 1 verwenden. Geben Sie Name, DatabaseNameund ConnectionContextan.
Rufen Sie die LoadProperties-Methode auf. Wenn diese Methode falsezurückgibt, sind entweder die in Schritt 2 angegebenen Eigenschaften falsch definiert, oder die Veröffentlichung ist auf dem Server nicht vorhanden.
Führen Sie ein bitweises logisches "Und" (& in Visual C# und And in Visual Basic) zwischen der Attributes-Eigenschaft und AllowPush. Falls das Ergebnis Nonelautet, legen Sie für Attributes das Ergebnis eines bitweisen logischen OR (| in Visual C# und Or in Visual Basic) zwischen Attributes und AllowPush. Rufen Sie dann CommitPropertyChanges auf, um Pushabonnements zu aktivieren.
Falls die Abonnementdatenbank nicht vorhanden ist, erstellen Sie sie mithilfe der Database -Klasse. Weitere Informationen finden Sie unter Erstellen, Ändern und Löschen von Datenbanken.
Erstellen Sie eine Instanz der TransSubscription-Klasse.
Legen Sie folgende Eigenschaften für das Abonnement fest:
ServerConnection auf den in Schritt 1 erstellten Verleger für ConnectionContext.
Name der Abonnementdatenbank für SubscriptionDBName.
Name des Abonnenten für SubscriberName.
Name der Veröffentlichungsdatenbank für DatabaseName.
Name der Veröffentlichung für PublicationName.
Die Parameter Login und Password von SynchronizationAgentProcessSecurity, um die Anmeldeinformationen für das Microsoft Windows-Konto bereitzustellen, unter dem der Verteilungs-Agent auf dem Verteiler ausgeführt wird. Mit diesem Konto werden lokale Verbindungen mit dem Verteiler sowie Remoteverbindungen mithilfe der Windows-Authentifizierung hergestellt.
Hinweis
SynchronizationAgentProcessSecurity muss nicht festgelegt werden, wenn das Abonnement von einem Mitglied der festen Serverrolle sysadmin erstellt wurde. Die Verwendung dieser Eigenschaft wird jedoch empfohlen. In diesem Fall nimmt der Agent die Identität des SQL Server-Agent-Kontos an. Weitere Informationen finden Sie unter Sicherheitsmodell des Replikations-Agents.
(Optional) Den Wert true (Standard) für CreateSyncAgentByDefault , um einen Agentauftrag zu erstellen, mit dem das Abonnement synchronisiert wird. Wenn Sie falseangeben, kann das Abonnement nur programmgesteuert synchronisiert werden.
(Optional) Legen Sie die Felder WindowsAuthentication auf Falsch, SqlStandardLogin und SqlStandardPassword oder SecureSqlStandardPassword auf SubscriberSecurity fest, wenn Sie die SQL Server-Authentifizierung zum Herstellen einer Verbindung mit dem Abonnenten verwenden.
Rufen Sie die Create-Methode auf.
Wichtig
Wenn Sie ein Pushabonnement auf einem Verleger mit einem Remoteverteiler erstellen, werden die angegebenen Werte für alle Eigenschaften (einschließlich SynchronizationAgentProcessSecurity) als Nur-Text an den Verteiler gesendet. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie die Create-Methode aufrufen. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).
So erstellen Sie ein Pushabonnement für eine Mergeveröffentlichung
Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.
Erstellen Sie eine Instanz der MergePublication -Klasse, indem Sie die Verlegerverbindung aus Schritt 1 verwenden. Geben Sie Name, DatabaseNameund ConnectionContextan.
Rufen Sie die LoadProperties-Methode auf. Wenn diese Methode falsezurückgibt, sind entweder die in Schritt 2 angegebenen Eigenschaften falsch definiert, oder die Veröffentlichung ist auf dem Server nicht vorhanden.
Führen Sie ein bitweises logisches "Und" (& in Visual C# und And in Visual Basic) zwischen der Attributes-Eigenschaft und AllowPush. Falls das Ergebnis Nonelautet, legen Sie für Attributes das Ergebnis eines bitweisen logischen OR (| in Visual C# und Or in Visual Basic) zwischen Attributes und AllowPush. Rufen Sie dann CommitPropertyChanges auf, um Pushabonnements zu aktivieren.
Falls die Abonnementdatenbank nicht vorhanden ist, erstellen Sie sie mithilfe der Database -Klasse. Weitere Informationen finden Sie unter Erstellen, Ändern und Löschen von Datenbanken.
Erstellen Sie eine Instanz der MergeSubscription-Klasse.
Legen Sie folgende Eigenschaften für das Abonnement fest:
ServerConnection auf den in Schritt 1 erstellten Verleger für ConnectionContext.
Name der Abonnementdatenbank für SubscriptionDBName.
Name des Abonnenten für SubscriberName.
Name der Veröffentlichungsdatenbank für DatabaseName.
Name der Veröffentlichung für PublicationName.
Die Parameter Login und Password von SynchronizationAgentProcessSecurity, um die Anmeldeinformationen für das Microsoft Windows-Konto bereitzustellen, unter dem der Merge-Agent auf dem Verteiler ausgeführt wird. Mit diesem Konto werden lokale Verbindungen mit dem Verteiler sowie Remoteverbindungen über die Windows-Authentifizierung hergestellt.
Hinweis
SynchronizationAgentProcessSecurity muss nicht festgelegt werden, wenn das Abonnement von einem Mitglied der festen Serverrolle sysadmin erstellt wurde. Die Verwendung dieser Eigenschaft wird jedoch empfohlen. In diesem Fall nimmt der Agent die Identität des SQL Server-Agent-Kontos an. Weitere Informationen finden Sie unter Sicherheitsmodell des Replikations-Agents.
(Optional) Den Wert true (Standard) für CreateSyncAgentByDefault , um einen Agentauftrag zu erstellen, mit dem das Abonnement synchronisiert wird. Wenn Sie falseangeben, kann das Abonnement nur programmgesteuert synchronisiert werden.
(Optional) Legen Sie die Felder SqlStandardLogin und SqlStandardPassword oder SecureSqlStandardPassword von SubscriberSecurity fest, wenn Sie die SQL Server-Authentifizierung zum Herstellen einer Verbindung mit dem Abonnenten verwenden.
(Optional) Legen Sie die Felder WindowsAuthentication auf Falsch, SqlStandardLogin und SqlStandardPassword oder SecureSqlStandardPassword auf PublisherSecurity fest, wenn Sie die SQL Server-Authentifizierung zum Herstellen einer Verbindung mit dem Verleger verwenden.
Rufen Sie die Create-Methode auf.
Wichtig
Wenn Sie ein Pushabonnement auf einem Verleger mit einem Remoteverteiler erstellen, werden die angegebenen Werte für alle Eigenschaften (einschließlich SynchronizationAgentProcessSecurity) als Nur-Text an den Verteiler gesendet. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie die Create-Methode aufrufen. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).
Beispiele (RMO)
Im folgenden Beispiel wird ein neues Pushabonnement für eine Transaktionsveröffentlichung erstellt. Die Anmeldeinformationen für das Windows-Konto, mit denen Sie den Verteilungs-Agent-Auftrag ausführen, werden zur Laufzeit übergeben.
// 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
Im folgenden Beispiel wird ein neues Pushabonnement für eine Mergeveröffentlichung erstellt. Die Anmeldeinformationen für das Windows-Konto, mit denen Sie den Merge-Agent-Auftrag ausführen, werden zur Laufzeit übergeben.
// 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
Weitere Informationen
Anzeigen und Ändern der Eigenschaften von Pushabonnements
Bewährte Methoden für die Replikationssicherheit
Erstellen einer Veröffentlichung
Grundlegendes zu Replikationsverwaltungsobjekten
Synchronisieren eines Pushabonnements
Abonnieren von Veröffentlichungen
Verwenden von sqlcmd mit Skriptvariablen