Erstellen eines PushabonnementsCreate a push subscription

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

In diesem Thema wird beschrieben, wie ein Pushabonnement in SQL ServerSQL Server mit SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQLoder Replikationsverwaltungsobjekten (RMO) erstellt wird.This topic describes how to create a push subscription in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO). Informationen zum Erstellen eines Pushabonnements für einen Nicht-SQL ServerSQL Server-Abonnenten finden Sie unter Erstellen eines Abonnements für einen Nicht-SQL Server-Abonnenten.For information about creating a push subscription for a non- SQL ServerSQL Server Subscriber, see Create a subscription for a non-SQL Server Subscriber.

Hinweis

Eine verwaltete Azure SQL-Datenbank-Instanz kann als Verleger, Verteiler und Abonnent für die Momentaufnahme- und Transaktionsreplikation fungieren.Azure SQL Database managed instance can be a publisher, distributor, and subscriber for snapshot and transactional replication. Einzelne und in einem Pool zusammengefasste Azure SQL-Datenbanken können nur Pushabonnenten für Momentaufnahme- und Transaktionsreplikation sein.Azure SQL database single and pooled databases can only be push subscribers for snapshot and transactional replication. Weitere Informationen finden Sie unter Transaktionsreplikation mit Azure SQL-Datenbank.For more information, see Transactional replication with Azure SQL Database.

Verwenden von SQL Server Management StudioUsing SQL Server Management Studio

Erstellen Sie mit dem Assistenten für neue Abonnements ein Pushabonnement auf dem Verleger oder Abonnenten.Create a push subscription at the Publisher or the Subscriber by using the New Subscription Wizard. Folgen Sie den Seiten im Assistenten für folgende Aufgaben:Follow the pages in the wizard to:

  • Angeben des Verlegers und der Veröffentlichung.Specify the Publisher and publication.

  • Auswählen, wo die Replikations-Agents ausgeführt werden.Select where replication agents will run. 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.For a push subscription, select Run all agents at the Distributor (push subscriptions) on the Distribution Agent Location page or Merge Agent Location page, depending on the type of publication.

  • Angeben der Abonnenten und Abonnentendatenbanken.Specify Subscribers and subscription databases.

  • Angeben der Anmeldenamen und Kennwörter für Verbindungen zwischen den Replikations-Agents:Specify the logins and passwords used for connections made by replication agents:

    • Bei Abonnements für Momentaufnahme- und Transaktionsveröffentlichungen geben Sie die Anmeldeinformationen auf der Seite Sicherheit für den Verteilungs-Agent an.For subscriptions to snapshot and transactional publications, specify credentials on the Distribution Agent Security page.

    • Bei Abonnements für Mergeveröffentlichungen geben Sie die Anmeldeinformationen auf der Seite Sicherheit für den Merge-Agent an.For subscriptions to merge publications, specify credentials on the Merge Agent Security page.

      Informationen zu den erforderlichen Berechtigungen für die jeweiligen Agents finden Sie unter Sicherheitsmodell des Replikations-Agents.For information about the permissions that each agent requires, see Replication agent security model.

  • Angeben eines Synchronisierungszeitplans und wann der Abonnent initialisiert werden soll.Specify a synchronization schedule and when the Subscriber should be initialized.

  • Angeben weiterer Optionen für Mergeveröffentlichungen. Diese Optionen umfassen den Abonnementtyp und Werte für parametrisierte Filter.Specify additional options for merge publications: subscription type and values for parameterized filtering.

  • Angeben von zusätzlichen Optionen für Transaktionsveröffentlichungen, die Updates von Abonnements zulassen.Specify additional options for transactional publications that allow updating subscriptions. 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.One option is to decide whether Subscribers should commit changes at the Publisher immediately or write them to a queue. Eine weitere Option besteht darin, Anmeldeinformationen einzurichten, mit denen eine Verbindung zwischen dem Abonnenten und dem Verleger hergestellt wird.Another option is setting up credentials used to connect from the Subscriber to the Publisher.

  • Optionales Erstellen eines Skripts für das Abonnement.Optionally, script the subscription.

So erstellen Sie ein Pushabonnement auf dem VerlegerTo create a push subscription from the Publisher

  1. Stellen Sie in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studioeine Verbindung mit dem Verleger her, und erweitern Sie dann den Serverknoten.Connect to the Publisher in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Erweitern Sie den Ordner Replikation , und erweitern Sie dann den Ordner Lokale Veröffentlichungen .Expand the Replication folder, and then expand the Local Publications folder.

  3. 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.Right-click the publication for which you want to create one or more subscriptions, and then select New Subscriptions.

  4. Schließen Sie die Seiten im Assistenten für neue Abonnements ab.Complete the pages in the New Subscription Wizard.

So erstellen Sie ein Pushabonnement auf dem AbonnentenTo create a push subscription from the Subscriber

  1. Stellen Sie in SQL Server Management StudioSQL Server Management Studioeine Verbindung mit dem Abonnenten her, und erweitern Sie dann den Serverknoten.Connect to the Subscriber in SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Erweitern Sie den Ordner Replikation .Expand the Replication folder.

  3. Klicken Sie mit der rechten Maustaste zuerst auf den Ordner Lokale Abonnements und anschließend auf Neue Abonnements.Right-click the Local Subscriptions folder, and then select New Subscriptions.

  4. 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.On the Publication page of the New Subscription Wizard, select <Find SQL Server Publisher> or <Find Oracle Publisher> from the Publisher drop-down list.

  5. Stellen Sie im Dialogfeld Verbindung mit Server herstellen eine Verbindung mit dem Verleger her.Connect to the Publisher in the Connect to Server dialog box.

  6. Wählen Sie auf der Seite Veröffentlichung eine Veröffentlichung aus.Select a publication on the Publication page.

  7. Schließen Sie die Seiten im Assistenten für neue Abonnements ab.Complete the pages in the New Subscription Wizard.

Verwenden von Transact-SQLUsing Transact-SQL

Sie können Pushabonnements mithilfe von gespeicherten Replikationsprozeduren programmgesteuert erstellen.You can create push subscriptions programmatically by using replication stored procedures. Die verwendeten gespeicherten Prozeduren hängen vom Typ der Veröffentlichung ab, zu der das Abonnement gehört.The stored procedures used will depend on the type of publication to which the subscription belongs.

Wichtig

Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit anzugeben.When possible, prompt users to enter security credentials at runtime. Wenn Anmeldeinformationen in einer Skriptdatei gespeichert werden müssen, muss die Datei an einem sicheren Ort gespeichert werden, um unberechtigten Zugriff zu vermeiden.If you must store credentials in a script file, you must secure the file to prevent unauthorized access.

So erstellen Sie ein Pushabonnement für eine Momentaufnahme- oder Transaktionsveröffentlichung.To create a push subscription to a snapshot or transactional publication

  1. Überprüfen Sie für die Veröffentlichungsdatenbank auf dem Verleger, ob die Veröffentlichung Pushabonnements unterstützt, indem Sie sp_helppublication ausführen.At the Publisher on the publication database, verify that the publication supports push subscriptions by running sp_helppublication.

    • Wenn der Wert von allow_push 1ist, werden Pushabonnements unterstützt.If the value of allow_push is 1, push subscriptions are supported.

    • Wenn der Wert von allow_push 0 ist, führen Sie sp_changepublication aus.If the value of allow_push is 0, run sp_changepublication. Legen Sie allow_push für @property und true für @value fest.Specify allow_push for @property and true for @value.

  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addsubscription aus.At the Publisher on the publication database, run sp_addsubscription. Geben Sie @publication, @subscriber und @destination_db an.Specify @publication, @subscriber, and @destination_db. Geben Sie den Wert push für @subscription_type an.Specify a value of push for @subscription_type. Weitere Informationen zum Aktualisieren von Abonnements finden Sie unter Erstellen eines aktualisierbaren Abonnements für eine Transaktionsveröffentlichung.For information about how to update subscriptions, see Create an updatable subscription to a transactional publication.

  3. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addpushsubscription_agent aus.At the Publisher on the publication database, run sp_addpushsubscription_agent. Geben Sie Folgendes an:Specify the following:

    • Die Parameter @subscriber, @subscriber_db und @publication.The @subscriber, @subscriber_db, and @publication parameters.

    • Die MicrosoftMicrosoft Windows-Anmeldeinformationen, unter denen der Verteilungs-Agent auf dem Verteiler für @job_login und @job_password ausgeführt wird.The MicrosoftMicrosoft Windows credentials under which the Distribution Agent at the Distributor runs for @job_login and @job_password.

      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.Connections made through Windows Integrated Authentication always use the Windows credentials specified by @job_login and @job_password. Der Verteilungs-Agent stellt die lokale Verbindung mit dem Verteiler immer mithilfe der integrierten Windows-Authentifizierung her.The Distribution Agent always makes the local connection to the Distributor by using Windows Integrated Authentication. Standardmäßig stellt der Agent mithilfe der integrierten Windows-Authentifizierung eine Verbindung mit dem Abonnenten her.By default, the agent will connect to the Subscriber by using Windows Integrated Authentication.

    • (Optional) Den Wert 0 für @subscriber_security_mode und die MicrosoftMicrosoft SQL ServerSQL Server-Anmeldeinformationen für @subscriber_login und @subscriber_password.(Optional) A value of 0 for @subscriber_security_mode and the MicrosoftMicrosoft SQL ServerSQL Server login information for @subscriber_login and @subscriber_password. Geben Sie diese Parameter an, falls Sie beim Herstellen einer Verbindung mit dem Abonnenten die SQL Server-Authentifizierung verwenden müssen.Specify these parameters if you need to use SQL Server Authentication when connecting to the Subscriber.

    • Einen Zeitplan für den Verteilungs-Agentauftrag für dieses Abonnement.A schedule for the Distribution Agent job for this subscription. Weitere Informationen finden Sie unter Angeben von Synchronisierungszeitplänen.For more information, see Specify synchronization schedules.

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.When you're creating a push subscription at a Publisher with a remote Distributor, the values supplied for all parameters, including job_login and job_password, are sent to the Distributor as plain text. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie diese gespeicherte Prozedur ausführen.You should encrypt the connection between the Publisher and its remote Distributor before running this stored procedure. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).For more information, see Enable encrypted connections to the database engine (SQL Server Configuration Manager).

So erstellen Sie ein Pushabonnement für eine MergeveröffentlichungTo create a push subscription to a merge publication

  1. Überprüfen Sie für die Veröffentlichungsdatenbank auf dem Verleger, ob die Veröffentlichung Pushabonnements unterstützt, indem Sie sp_helpmergepublication ausführen.At the Publisher on the publication database, verify that the publication supports push subscriptions by running sp_helpmergepublication.

    • Wenn der Wert von allow_push 1ist, werden Pushabonnements von der Veröffentlichung unterstützt.If the value of allow_push is 1, the publication supports push subscriptions.

    • Wenn der Wert von allow_push nicht 1 ist, führen Sie sp_changemergepublication aus.If the value of allow_push is not 1, run sp_changemergepublication. Legen Sie allow_push für @property und true für @value fest.Specify allow_push for @property and true for @value.

  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addmergesubscription aus.At the Publisher on the publication database, run sp_addmergesubscription. Geben Sie die folgenden Parameter an:Specify the following parameters:

    • @publication.@publication. Das ist der Name der Veröffentlichung.This is the name of the publication.

    • @subscriber_type.@subscriber_type. Geben Sie für ein Clientabonnement local an.For a client subscription, specify local. Geben Sie für ein Serverabonnement global an.For a server subscription, specify global.

    • @subscription_priority.@subscription_priority. Geben Sie für ein Serverabonnement eine Priorität für das Abonnement (0.00 bis 99.99) an.For a server subscription, specify a priority for the subscription (0.00 to 99.99).

    Weitere Informationen finden Sie unter Erweiterte Konflikterkennung und -lösung bei der Mergereplikation.For more information, see Advanced merge replication conflict detection and resolution.

  3. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addmergepushsubscription_agent aus.At the Publisher on the publication database, run sp_addmergepushsubscription_agent. Geben Sie Folgendes an:Specify the following:

    • Die Parameter @subscriber, @subscriber_db und @publication.The @subscriber, @subscriber_db, and @publication parameters.

    • Die Windows-Anmeldeinformationen, unter denen der Merge-Agent auf dem Verteiler für @job_login und @job_password ausgeführt wird.The Windows credentials under which the Merge Agent at the Distributor runs for @job_login and @job_password.

      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.Connections made through Windows Integrated Authentication always use the Windows credentials specified by @job_login and @job_password. Der Merge-Agent stellt die lokale Verbindung mit dem Verteiler immer mithilfe der integrierten Windows-Authentifizierung her.The Merge Agent always makes the local connection to the Distributor by using Windows Integrated Authentication. Standardmäßig stellt der Agent mithilfe der integrierten Windows-Authentifizierung eine Verbindung mit dem Abonnenten her.By default, the agent will connect to the Subscriber by using Windows Integrated Authentication.

    • (Optional) Den Wert 0 für @subscriber_security_mode und die SQL ServerSQL Server-Anmeldeinformationen für @subscriber_login und @subscriber_password.(Optional) A value of 0 for @subscriber_security_mode and the SQL ServerSQL Server login information for @subscriber_login and @subscriber_password. Geben Sie diese Parameter an, falls Sie beim Herstellen einer Verbindung mit dem Abonnenten die SQL Server-Authentifizierung verwenden müssen.Specify these parameters if you need to use SQL Server Authentication when connecting to the Subscriber.

    • (Optional) Den Wert 0 für @publisher_security_mode und die SQL ServerSQL Server-Anmeldeinformationen für @publisher_login und @publisher_password.(Optional) A value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password. Geben Sie diese Werte an, falls Sie beim Herstellen einer Verbindung mit dem Verleger die SQL Server-Authentifizierung verwenden müssen.Specify these values if you need to use SQL Server Authentication when connecting to the Publisher.

    • Einen Zeitplan für den Merge-Agentauftrag für dieses Abonnement.A schedule for the Merge Agent job for this subscription. Weitere Informationen finden Sie unter Angeben von Synchronisierungszeitplänen.For more information, see Specify synchronization schedules.

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.When you're creating a push subscription at a Publisher with a remote Distributor, the values supplied for all parameters, including job_login and job_password, are sent to the Distributor as plain text. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie diese gespeicherte Prozedur ausführen.You should encrypt the connection between the Publisher and its remote Distributor before running this stored procedure. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).For more information, see Enable encrypted connections to the database engine (SQL Server Configuration Manager).

Beispiele (Transact-SQL)Examples (Transact-SQL)

Im folgenden Beispiel wird ein Pushabonnement für eine Transaktionsveröffentlichung erstellt.The following example creates a push subscription to a transactional publication. Die Werte für den Anmeldenamen und das Kennwort werden zur Laufzeit mithilfe von sqlcmd-Skriptvariablen bereitgestellt.Login and password values are supplied at runtime through sqlcmd scripting variables.

-- 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'AdventureWorks2012Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2012]
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.The following example creates a push subscription to a merge publication. Die Werte für den Anmeldenamen und das Kennwort werden zur Laufzeit mithilfe von sqlcmd-Skriptvariablen bereitgestellt.Login and password values are supplied at runtime through sqlcmd scripting variables.

-- 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 [AdventureWorks2012];
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 ReplikationsverwaltungsobjektenUsing Replication Management Objects

Sie können Pushabonnements mithilfe von Replikationsverwaltungsobjekten (RMO) programmgesteuert erstellen.You can create push subscriptions programmatically by using Replication Management Objects (RMO). 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.The RMO classes that you use to create a push subscription depend on the type of publication to which the subscription is created.

Wichtig

Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit anzugeben.When possible, prompt users to enter security credentials at runtime. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von MicrosoftMicrosoft Windows .NET Framework.If you must store credentials, use the cryptographic services that the MicrosoftMicrosoft Windows .NET Framework provides.

So erstellen Sie ein Pushabonnement für eine Momentaufnahme- oder Transaktionsveröffentlichung.To create a push subscription to a snapshot or transactional publication

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.Create a connection to the Publisher by using the ServerConnection class.

  2. Erstellen Sie eine Instanz der TransPublication -Klasse, indem Sie die Verlegerverbindung aus Schritt 1 verwenden.Create an instance of the TransPublication class by using the Publisher connection from step 1. Geben Sie Name, DatabaseNameund ConnectionContextan.Specify Name, DatabaseName, and ConnectionContext.

  3. Rufen Sie die LoadProperties -Methode auf.Call the LoadProperties method. 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.If this method returns false, either the properties specified in step 2 are incorrect or the publication does not exist on the server.

  4. Führen Sie ein bitweises logisches AND ( & in Visual C# und And in Visual Basic) zwischen der Attributes -Eigenschaft und AllowPush.Perform a bitwise logical AND (& in Visual C# and And in Visual Basic) between the Attributes property and 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.If the result is None, set Attributes to the result of a bitwise logical OR (| in Visual C# and Or in Visual Basic) between Attributes and AllowPush. Rufen Sie dann CommitPropertyChanges auf, um Pushabonnements zu aktivieren.Then, call CommitPropertyChanges to enable push subscriptions.

  5. Falls die Abonnementdatenbank nicht vorhanden ist, erstellen Sie sie mithilfe der Database -Klasse.If the subscription database does not exist, create it by using the Database class. Weitere Informationen finden Sie unter Erstellen, Ändern und Löschen von Datenbanken.For more information, see Creating, altering, and removing databases.

  6. Erstellen Sie eine Instanz der TransSubscription -Klasse.Create an instance of the TransSubscription class.

  7. Legen Sie folgende Eigenschaften für das Abonnement fest:Set the following subscription properties:

  8. Rufen Sie die Create -Methode auf.Call the Create method.

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.When you're creating a push subscription at a Publisher with a remote Distributor, the values supplied for all properties, including SynchronizationAgentProcessSecurity, are sent to the Distributor as plain text. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie die Create-Methode aufrufen.You should encrypt the connection between the Publisher and its remote Distributor before calling the Create method. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).For more information, see Enable encrypted connections to the database engine (SQL Server Configuration Manager).

So erstellen Sie ein Pushabonnement für eine MergeveröffentlichungTo create a push subscription to a merge publication

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.Create a connection to the Publisher by using the ServerConnection class.

  2. Erstellen Sie eine Instanz der MergePublication -Klasse, indem Sie die Verlegerverbindung aus Schritt 1 verwenden.Create an instance of the MergePublication class by using the Publisher connection from step 1. Geben Sie Name, DatabaseNameund ConnectionContextan.Specify Name, DatabaseName, and ConnectionContext.

  3. Rufen Sie die LoadProperties -Methode auf.Call the LoadProperties method. 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.If this method returns false, either the properties specified in step 2 are incorrect or the publication does not exist on the server.

  4. Führen Sie ein bitweises logisches AND ( & in Visual C# und And in Visual Basic) zwischen der Attributes -Eigenschaft und AllowPush.Perform a bitwise logical AND (& in Visual C# and And in Visual Basic) between the Attributes property and 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.If the result is None, set Attributes to the result of a bitwise logical OR (| in Visual C# and Or in Visual Basic) between Attributes and AllowPush. Rufen Sie dann CommitPropertyChanges auf, um Pushabonnements zu aktivieren.Then, call CommitPropertyChanges to enable push subscriptions.

  5. Falls die Abonnementdatenbank nicht vorhanden ist, erstellen Sie sie mithilfe der Database -Klasse.If the subscription database does not exist, create it by using the Database class. Weitere Informationen finden Sie unter Erstellen, Ändern und Löschen von Datenbanken.For more information, see Creating, altering, and removing databases.

  6. Erstellen Sie eine Instanz der MergeSubscription -Klasse.Create an instance of the MergeSubscription class.

  7. Legen Sie folgende Eigenschaften für das Abonnement fest:Set the following subscription properties:

  8. Rufen Sie die Create -Methode auf.Call the Create method.

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.When you're creating a push subscription at a Publisher with a remote Distributor, the values supplied for all properties, including SynchronizationAgentProcessSecurity, are sent to the Distributor as plain text. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie die Create-Methode aufrufen.You should encrypt the connection between the Publisher and its remote Distributor before calling the Create method. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).For more information, see Enable encrypted connections to the database engine (SQL Server Configuration Manager).

Beispiele (RMO)Examples (RMO)

Im folgenden Beispiel wird ein neues Pushabonnement für eine Transaktionsveröffentlichung erstellt.This example creates a new push subscription to a transactional publication. Die Anmeldeinformationen für das Windows-Konto, mit denen Sie den Verteilungs-Agent-Auftrag ausführen, werden zur Laufzeit übergeben.The Windows account credentials that you use to run the Distribution Agent job are passed at runtime.

           // Define the Publisher, publication, and databases.
           string publicationName = "AdvWorksProductTran";
           string publisherName = publisherInstance;
           string subscriberName = subscriberInstance;
           string subscriptionDbName = "AdventureWorks2012Replica";
           string publicationDbName = "AdventureWorks2012";

           //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 = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

'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.This example creates a new push subscription to a merge publication. Die Anmeldeinformationen für das Windows-Konto, mit denen Sie den Merge-Agent-Auftrag ausführen, werden zur Laufzeit übergeben.The Windows account credentials that you use to run the Merge Agent job are passed at runtime.

// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
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 = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
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

Siehe auchSee also

Anzeigen und Ändern der Eigenschaften von Pushabonnements View and modify push subscription properties
Bewährte Methoden für die Replikationssicherheit Replication security best practices
Erstellen einer Veröffentlichung Create a publication
Grundlegendes zu Replikationsverwaltungsobjekten Replication management objects concepts
Synchronisieren eines Pushabonnements Synchronize a push subscription
Abonnieren von Veröffentlichungen Subscribe to publications
Verwenden von sqlcmd mit SkriptvariablenUse sqlcmd with scripting variables