sp_addsubscription (Transact-SQL)
Fügt einer Veröffentlichung ein Abonnement hinzu und legt den Status des Abonnenten fest. Diese gespeicherte Prozedur wird beim Verleger mit der Veröffentlichungsdatenbank ausgeführt.
Syntax
sp_addsubscription [ @publication = ] 'publication'
[ , [ @article = ] 'article']
[ , [ @subscriber = ] 'subscriber' ]
[ , [ @destination_db = ] 'destination_db' ]
[ , [ @sync_type = ] 'sync_type' ]
[ , [ @status = ] 'status'
[ , [ @subscription_type = ] 'subscription_type' ]
[ , [ @update_mode = ] 'update_mode' ]
[ , [ @loopback_detection = ] 'loopback_detection' ]
[ , [ @frequency_type = ] frequency_type ]
[ , [ @frequency_interval = ] frequency_interval ]
[ , [ @frequency_relative_interval = ] frequency_relative_interval ]
[ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
[ , [ @frequency_subday = ] frequency_subday ]
[ , [ @frequency_subday_interval = ] frequency_subday_interval ]
[ , [ @active_start_time_of_day = ] active_start_time_of_day ]
[ , [ @active_end_time_of_day = ] active_end_time_of_day ]
[ , [ @active_start_date = ] active_start_date ]
[ , [ @active_end_date = ] active_end_date ]
[ , [ @optional_command_line = ] 'optional_command_line' ]
[ , [ @reserved = ] 'reserved' ]
[ , [ @enabled_for_syncmgr= ] 'enabled_for_syncmgr' ]
[ , [ @offloadagent= ] remote_agent_activation]
[ , [ @offloadserver= ] 'remote_agent_server_name' ]
[ , [ @dts_package_name= ] 'dts_package_name' ]
[ , [ @dts_package_password= ] 'dts_package_password' ]
[ , [ @dts_package_location= ] 'dts_package_location' ]
[ , [ @distribution_job_name= ] 'distribution_job_name' ]
[ , [ @publisher = ] 'publisher' ]
[ , [ @backupdevicetype = ] 'backupdevicetype' ]
[ , [ @backupdevicename = ] 'backupdevicename' ]
[ , [ @mediapassword = ] 'mediapassword' ]
[ , [ @password = ] 'password' ]
[ , [ @fileidhint = ] fileidhint ]
[ , [ @unload = ] unload ]
[ , [ @subscriptionlsn = ] subscriptionlsn ]
[ , [ @subscriptionstreams = ] subscriptionstreams ]
[ , [ @subscriber_type = ] subscriber_type ]
Argumente
[ @publication=\] 'publication'
Der Name der Veröffentlichung. publication ist ein Wert vom Datentyp sysname und weist keinen Standardwert auf.[ @article=\] 'article'
Der Name des Artikels, für den die Veröffentlichung abonniert wird. article ist ein Wert vom Datentyp sysname, der Standardwert ist all. Wird all angegeben, wird allen Artikeln dieser Veröffentlichung ein Abonnement hinzugefügt. Nur die Werte all oder NULL werden für Oracle-Verleger unterstützt.[ @subscriber=\] 'subscriber'
Der Name des Abonnenten. subscriber ist vom Datentyp sysname und hat den Standardwert NULL.[ @destination\_db=\] 'destination_db'
Der Name der Zieldatenbank, in der die replizierten Daten gespeichert werden sollen. destination_db ist vom Datentyp sysname, der Standardwert ist NULL. Mit NULL wird destination_db auf den Namen der Veröffentlichungsdatenbank festgelegt. Für Oracle-Verleger muss destination_db angegeben werden. Geben Sie für einen Nicht-SQL Server-Abonnenten den Wert (Standardziel) für destination_db an.[ @sync\_type=\] 'sync_type'
Der Synchronisierungstyp des Abonnements. sync_type ist vom Datentyp nvarchar(255). Die folgenden Werte sind möglich:Wert
Beschreibung
none
Der Abonnent besitzt bereits das Schema und die Ausgangsdaten für veröffentlichte Tabellen.
HinweisDiese Option wurde als veraltet markiert. Verwenden Sie stattdessen replication support only.automatic (Standard)
Das Schema und die Ausgangsdaten für veröffentlichte Tabellen werden zunächst an den Abonnenten übertragen.
replication support only
Stellt auf dem Abonnenten das automatische Generieren von benutzerdefinierten gespeicherten Prozeduren für Artikel und Trigger bereit, die ggf. das Aktualisieren von Abonnements unterstützen. Setzt voraus, dass der Abonnent bereits über das Schema und die Anfangsdaten für veröffentlichte Tabellen verfügt. Stellen Sie beim Konfigurieren einer Peer-to-Peer-Transaktionsreplikationstopologie sicher, dass die Daten in allen Knoten der Topologie identisch sind. Weitere Informationen finden Sie unter Vorgehensweise: Konfigurieren der Peer-to-Peer-Transaktionsreplikation (Replikationsprogrammierung mit Transact-SQL).
Diese Option wird für Abonnements von Nicht-SQL Server-Veröffentlichungen nicht unterstützt.
initialize with backup
Das Schema und die Ausgangsdaten für veröffentlichte Tabellen werden von einer Sicherung der Veröffentlichungsdatenbank abgerufen. Es wird davon ausgegangen, dass der Abonnent über Zugriff auf eine Sicherung der Veröffentlichungsdatenbank verfügt. Der Speicherort der Sicherung und der Medientyp der Sicherung werden mit backupdevicename und backupdevicetype angegeben. Wenn Sie diese Option verwenden, muss eine Peer-to-Peer-Transaktionsreplikationstopologie während der Konfiguration nicht deaktiviert werden.
Diese Option wird für Abonnements von Nicht-SQL Server-Veröffentlichungen nicht unterstützt.
initialize from lsn
Wird verwendet, wenn Sie einer Peer-to-Peer-Transaktionsreplikationstopologie einen Knoten hinzufügen. Wird mit @subscriptionlsn verwendet, um sicherzustellen, dass alle relevanten Transaktionen auf den neuen Knoten repliziert werden. Setzt voraus, dass der Abonnent bereits über das Schema und die Anfangsdaten für veröffentlichte Tabellen verfügt. Weitere Informationen finden Sie unter Vorgehensweise: Konfigurieren der Peer-to-Peer-Transaktionsreplikation (Replikationsprogrammierung mit Transact-SQL).
Hinweis Systemtabellen und Daten werden immer übertragen.
[ @status=\] 'status'
Der Status des Abonnements. status ist vom Datentyp sysname; der Standardwert ist NULL. Wenn dieser Parameter nicht explizit festgelegt wird, wird er von der Replikation automatisch auf einen der folgenden Werte festgelegt.Wert
Beschreibung
Aktiv
Das Abonnement wird initialisiert und ist bereit, Änderungen anzunehmen. Diese Option wird festgelegt, wenn sync_type den Wert none, initialize with backup oder replication support only aufweist.
subscribed
Das Abonnement muss initialisiert werden. Diese Option wird festgelegt, wenn sync_type den Wert automatic aufweist.
[ @subscription\_type=\] 'subscription_type'
Der Abonnementtyp. subscription_type ist vom Datentyp subscription_type, der Standardwert ist push. Mögliche Werte sind push und pull. Die Verteilungs-Agents von Pushabonnements befinden sich auf dem Verteiler und die Verteilungs-Agents von Pullabonnements auf dem Abonnenten. subscription_type kann ein Wert vom Typ pull sein, um ein benanntes Pullabonnement zu erstellen, das dem Verleger bekannt ist. Weitere Informationen finden Sie unter Abonnieren von Veröffentlichungen.Hinweis Für anonyme Abonnements ist diese gespeicherte Prozedur nicht erforderlich.
[ @update\_mode=\] 'update_mode'
Der Aktualisierungstyp. update_mode ist vom Datentyp nvarchar(30). Die folgenden Werte sind möglich:Wert
Beschreibung
read only (Standard)
Das Abonnement ist schreibgeschützt. Änderungen am Abonnenten werden nicht an den Verleger gesendet.
sync tran
Aktiviert die Unterstützung für das sofortige Aktualisieren von Abonnements. Diese Option wird für Oracle-Verleger nicht unterstützt.
queued tran
Aktiviert das verzögerte Aktualisieren über eine Warteschlange für das Abonnement. Daten können auf dem Abonnenten geändert werden; die Änderungen werden in einer Warteschlange gespeichert und an den Verleger weitergegeben. Diese Option wird für Oracle-Verleger nicht unterstützt.
failover
Aktiviert das sofortige Aktualisieren für das Abonnement, wobei als Failover das verzögerte Aktualisieren über eine Warteschlange verwendet wird. Daten können auf dem Abonnenten geändert werden; die Änderungen werden sofort an den Verleger weitergegeben. Wenn der Verleger und der Abonnent nicht verbunden sind, kann der Aktualisierungsmodus geändert werden, damit Datenänderungen auf dem Abonnenten in einer Warteschlange gespeichert werden, bis Abonnent und Verleger erneut verbunden sind. Diese Option wird für Oracle-Verleger nicht unterstützt.
queued failover
Ermöglicht das Abonnement als Aktualisierung über eine Warteschlange, mit der Möglichkeit des Wechsels zum sofortigen Aktualisierungsmodus. Daten können auf dem Abonnenten geändert und in einer Warteschlange gespeichert werden, bis eine Verbindung zwischen dem Abonnenten und dem Verleger hergestellt wird. Wenn eine kontinuierliche Verbindung hergestellt wird, kann der Aktualisierungsmodus in den sofortigen Aktualisierungsmodus geändert werden. Diese Option wird für Oracle-Verleger nicht unterstützt.
Beachten Sie, dass die Werte sync tran und queued tran nicht zulässig sind, wenn die abonnierte Veröffentlichung DTS zulässt.
[ @loopback\_detection=\] 'loopback_detection'
Gibt an, ob der Verteilungs-Agent Transaktionen des Abonnenten an den Abonnenten zurücksendet. loopback_detection ist ein Wert vom Datentyp nvarchar(5). Die folgenden Werte sind möglich.Wert
Beschreibung
true
Der Verteilungs-Agent sendet Transaktionen des Abonnenten nicht an den Abonnenten zurück. Diese Option wird für die bidirektionale Transaktionsreplikation verwendet. Weitere Informationen finden Sie unter Bidirektionale Transaktionsreplikation.
false
Der Verteilungs-Agent sendet Transaktionen des Abonnenten an den Abonnenten zurück.
NULL (Standard)
Wird für einen SQL Server-Abonnenten automatisch auf true und für einen Nicht-SQL Server-Abonnenten auf false festgelegt.
[ @frequency\_type=\] frequency_type
Die Häufigkeit für die Zeitplanung des Verteilungstasks. frequency_type ist vom Datentyp int. Die folgenden Werte sind möglich.Wert
Beschreibung
1
Einmal
2
Nur bei Bedarf
4
Täglich
8
Wöchentlich
16
Monatlich
32
Monatlich, relativ
64 (Standard)
Autostart
128
Wiederholt
[ @frequency\_interval=\] frequency_interval
Der Wert, der auf die durch frequency_type festgelegte Häufigkeit angewendet werden soll. frequency_interval ist vom Datentyp int und hat den Standardwert NULL.[ @frequency\_relative\_interval=\] frequency_relative_interval
Das Datum des Verteilungs-Agents. Dieser Parameter wird verwendet, wenn frequency_type auf 32 (monatlich, relativ) festgelegt wird. frequency_relative_interval ist vom Datentyp int. Die folgenden Werte sind möglich:Wert
Beschreibung
1
Erster
2
Zweiter
4
Dritter
8
Vierter
16
Letzter
NULL (Standard)
[ @frequency\_recurrence\_factor=\] frequency_recurrence_factor
Der von frequency_type verwendete Wiederholungsfaktor. frequency_recurrence_factor ist vom Datentyp int und hat den Standardwert NULL.[ @frequency\_subday=\] frequency_subday
Die Häufigkeit (in Minuten) für die erneute geplante Ausführung während des definierten Zeitraums. frequency_subday ist vom Datentyp int und kann einen der folgenden Werte haben.Wert
Beschreibung
1
Einmal
2
Zweiter
4
Minute
8
Stunde
NULL
[ @frequency\_subday\_interval=\] frequency_subday_interval
Das Intervall für frequency_subday. frequency_subday_interval ist vom Datentyp int und hat den Standardwert NULL.[ @active\_start\_time\_of\_day=\] active_start_time_of_day
Die Tageszeit, zu der der Verteilungs-Agent zum ersten Mal geplant ist. Dabei wird das Format HHMMSS verwendet. active_start_time_of_day ist vom Datentyp int und hat den Standardwert NULL[ @active\_end\_time\_of\_day=\] active_end_time_of_day
Die Tageszeit, ab der der Verteilungs-Agent nicht mehr geplant ist. Dabei wird das Format HHMMSS verwendet. active_end_time_of_day ist vom Datentyp int und hat den Standardwert NULL.[ @active\_start\_date=\] active_start_date
Das Datum, an dem der Verteilungs-Agent zum ersten Mal geplant ist. Dabei wird das Format YYYYMMDD verwendet. active_start_date ist vom Datentyp int und hat den Standardwert NULL.[ @active\_end\_date=\] active_end_date
Das Datum, ab dem der Verteilungs-Agent nicht mehr geplant ist. Dabei wird das Format YYYYMMDD verwendet. active_end_date ist vom Datentyp int und hat den Standardwert NULL.[ @optional\_command\_line=\] 'optional_command_line'
Die optional auszuführende Befehlszeile. optional_command_line ist ein Wert vom Datentyp nvarchar(4000); der Standardwert ist NULL.[ @reserved=\] 'reserved'
Nur für Informationszwecke identifiziert. Nicht unterstützt. Zukünftige Kompatibilität wird nicht sichergestellt.[ @enabled\_for\_syncmgr=\] 'enabled_for_syncmgr'
Gibt an, ob das Abonnement mit der Synchronisierungsverwaltung von Microsoft Windows synchronisiert werden kann. enabled_for_syncmgr ist vom Datentyp nvarchar(5), der Standardwert ist FALSE. Mit FALSE wird das Abonnement nicht bei der Windows-Synchronisierungsverwaltung registriert. Mit TRUE wird das Abonnement bei der Windows-Synchronisierungsverwaltung registriert und kann synchronisiert werden, ohne SQL Server Management Studio zu starten. Diese Option wird für Oracle-Verleger nicht unterstützt.[ @offloadagent= ] 'remote_agent_activation'
Gibt an, dass für den Agent eine Remoteaktivierung möglich ist. remote_agent_activation ist ein Wert vom Datentyp bit, der Standardwert ist 0.Hinweis Dieser Parameter wurde als veraltet markiert und wird nur aus Gründen der Abwärtskompatibilität von Skripts bereitgestellt.
[ @offloadserver= ] 'remote_agent_server_name'
Gibt den Netzwerknamen des Servers an, der für die Remoteaktivierung verwendet werden soll. remote_agent_server_name ist vom Datentyp sysname, der Standardwert ist NULL.[ @dts\_package\_name= ] 'dts_package_name'
Gibt den Namen des DTS-Pakets (Data Transformation Services) an. dts_package_name ist ein Wert vom Datentyp sysname und hat den Standardwert NULL. Um z. B. ein Paket namens DTSPub_Package anzugeben, wird der Parameter @dts\_package\_name = N'DTSPub_Package' verwendet. Dieser Parameter ist für Pushabonnements verfügbar. Verwenden Sie sp_addpullsubscription_agent, um einem Pullabonnement DTS-Paketinformationen hinzuzufügen.[ @dts\_package\_password= ] 'dts_package_password'
Gibt gegebenenfalls das Kennwort des Pakets an. dts_package_password ist vom Datentyp sysname, der Standardwert ist NULL.Hinweis Sie müssen ein Kennwort angeben, wenn dts_package_name angegeben wird.
[ @dts\_package\_location= ] 'dts_package_location'
Gibt den Speicherort für das Paket an. dts_package_location ist vom Datentyp nvarchar(12) und hat den Standardwert DISTRIBUTOR. Der Speicherort des Pakets kann distributor oder subscriber sein.[ @distribution\_job\_name= ] 'distribution_job_name'
Nur für Informationszwecke identifiziert. Nicht unterstützt. Zukünftige Kompatibilität wird nicht sichergestellt.[ @publisher= ] 'publisher'
Gibt einen Nicht-MicrosoftSQL Server-Verleger an. publisher ist vom Datentyp sysname und hat den Standardwert NULL.Hinweis publisher sollte nicht für einen SQL Server-Verleger angegeben werden.
[ @backupdevicetype= ] 'backupdevicetype'
Gibt den Sicherungsmedientyp an, der beim Initialisieren eines Abonnenten von einer Sicherung verwendet wird. backupdevicetype ist vom Datentyp nvarchar(20). Die folgenden Werte sind möglich:Wert
Beschreibung
logical (Standard)
Das Sicherungsmedium ist ein logisches Medium.
disk
Das Sicherungsmedium ist ein Laufwerk.
tape
Das Sicherungsmedium ist ein Bandlaufwerk.
backupdevicetype wird nur verwendet, wenn sync_method auf initialize_with_backup festgelegt ist.
[ @backupdevicename= ] 'backupdevicename'
Gibt den Namen des Sicherungsmediums an, das beim Initialisieren eines Abonnenten von einer Sicherung verwendet wird. backupdevicename ist ein Wert vom Datentyp nvarchar(1000), der Standardwert ist NULL.[ @mediapassword= ] 'mediapassword'
Gibt ein Kennwort für den Mediensatz an, falls beim Formatieren des Mediums ein Kennwort festgelegt wurde. mediapassword ist vom Datentyp sysname, der Standardwert ist NULL.Hinweis Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.
[ @password= ] 'password'
Gibt ein Kennwort für die Sicherung an, falls beim Erstellen der Sicherung ein Kennwort festgelegt wurde. passwordist vom Datentyp sysname, der Standardwert ist NULL.[ @fileidhint= ] fileidhint
Identifiziert einen Ordnungswert des wiederherzustellenden Sicherungssatzes. fileidhint ist ein Wert vom Datentyp int, der Standardwert ist NULL.[ @unload= ] unload
Gibt an, ob ein Datensicherungsmedium nach Abschluss der Initialisierung von der Sicherung entladen werden soll. unload ist ein Wert vom Datentyp bit, der Standardwert lautet 1. 1 gibt an, dass das Band entladen werden soll. unload wird nur verwendet, wenn backupdevicetype gleich tape ist.[ @subscriptionlsn= ] subscriptionlsn
Gibt die Protokollfolgenummer (LSN, Log Sequence Number) an, bei der ein Abonnement beginnen soll, Änderungen an einen Knoten in einer Peer-to-Peer-Transaktionsreplikationstopologie zu übermitteln. Wird mit dem Wert initialize from lsn für @sync_type verwendet, um sicherzustellen, dass alle relevanten Transaktionen auf einem neuen Knoten repliziert werden. Weitere Informationen finden Sie unter Vorgehensweise: Konfigurieren der Peer-to-Peer-Transaktionsreplikation (Replikationsprogrammierung mit Transact-SQL).[ @subscriptionstreams = ] subscriptionstreams
Die Anzahl zulässiger Verbindungen pro Verteilungs-Agent, um Änderungsbatches parallel auf einen Abonnenten anzuwenden, während viele Transaktionsmerkmale beibehalten werden, die bei Verwendung eines einzigen Threads vorhanden sind. subscriptionstreams ist ein Wert vom Datentyp tinyint, der Standardwert ist NULL. Mögliche Werte zwischen 1 und 64 werden unterstützt. Dieser Parameter wird für Nicht-SQL Server-Abonnenten, Oracle-Verleger oder Peer-to-Peer-Abonnements nicht unterstützt.[ @subscriber\_type=\] subscriber_type
Der Abonnententyp. subscriber_type ist vom Datentyp tinyint. Die folgenden Werte sind möglich:Wert
Beschreibung
0 (Standard)
SQL Server-Abonnent
1
ODBC-Datenquellenserver
2
Microsoft Jet-Datenbank
3
OLE DB-Anbieter (OLE DB provider)
Rückgabecodewerte
0 (Erfolg) oder 1 (Fehler)
Hinweise
sp_addsubscription wird bei der Snapshot- und Transaktionsreplikation verwendet.
Wenn sp_addsubscription von einem Mitglied der festen Serverrolle sysadmin ausgeführt wird, um ein Pushabonnement zu erstellen, wird der Auftrag des Verteilungs-Agents implizit erstellt und unter dem Konto des SQL Server-Agent-Diensts ausgeführt. Sie sollten sp_addpushsubscription_agent ausführen und die Anmeldeinformationen eines anderen, agentspezifischen Windows-Kontos für @job_login und @job_password angeben. Weitere Informationen finden Sie unter Sicherheitsmodell des Replikations-Agents.
sp_addsubscription hindert ODBC- und OLE DB-Abonnenten am Zugriff auf folgende Veröffentlichungen:
Veröffentlichungen, die durch einen Aufruf von sp_addpublication mit dem Wert native für sync_method erstellt wurden.
Veröffentlichungen, die Artikel enthalten, welche der Veröffentlichung mit der gespeicherten Prozedur sp_addarticle und dem Wert 3 (Abschneiden) für den pre_creation_cmd-Parameter hinzugefügt wurden.
Veröffentlichungen, die versuchen, update_mode auf sync tran festzulegen.
Veröffentlichungen, bei denen ein Artikel für die Verwendung parametrisierter Anweisungen konfiguriert ist.
Wenn für eine Veröffentlichung die Option allow_queued_tran auf true festgelegt ist (wodurch Änderungen auf dem Abonnenten in eine Warteschlange platziert werden, bis sie auf dem Verleger angewendet werden können), wird die timestamp-Spalte in einem Artikel als timestamp ausgegeben, und Änderungen an dieser Spalte werden an den Abonnenten gesendet. Der Abonnent generiert und aktualisiert den Wert der timestamp-Spalte. Für einen ODBC- oder OLE DB-Abonnenten meldet sp_addsubscription einen Fehler beim Abonnieren einer Veröffentlichung, für die allow_queued_tran auf true festgelegt ist und die Artikel mit timestamp-Spalten enthält.
Wenn ein Abonnement kein DTS-Paket verwendet, kann es keine Veröffentlichung abonnieren, für die allow_transformable_subscriptions festgelegt ist. Wenn die Tabelle der Veröffentlichung für ein DTS-Abonnement und ein Nicht-DTS-Abonnement repliziert werden muss, müssen zwei separate Veröffentlichungen erstellt werden: eine für jeden Abonnementtyp.
Beispiel
-- 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'AdventureWorksReplica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks]
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
Berechtigungen
Nur Mitglieder der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner können sp_addsubscription ausführen. Für Pullabonnements können Benutzer, deren Anmeldename in der Veröffentlichungszugriffsliste eingetragen ist, sp_addsubscription ausführen.
Siehe auch