sp_addsubscription (Transact-SQL)

gäller för:SQL ServerAzure SQL Database

Lägger till en prenumeration i en publikation och sätter prenumerantstatusen. Den här lagrade proceduren körs i Publisher i publikationsdatabasen.

Transact-SQL syntaxkonventioner

Syntax

sp_addsubscription
    [ @publication = ] N'publication'
    [ , [ @article = ] N'article' ]
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @destination_db = ] N'destination_db' ]
    [ , [ @sync_type = ] N'sync_type' ]
    [ , [ @status = ] N'status' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @loopback_detection = ] N'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 = ] N'optional_command_line' ]
    [ , [ @reserved = ] N'reserved' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @offloadagent = ] offloadagent ]
    [ , [ @offloadserver = ] N'offloadserver' ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @backupdevicetype = ] N'backupdevicetype' ]
    [ , [ @backupdevicename = ] N'backupdevicename' ]
    [ , [ @mediapassword = ] N'mediapassword' ]
    [ , [ @password = ] N'password' ]
    [ , [ @fileidhint = ] fileidhint ]
    [ , [ @unload = ] unload ]
    [ , [ @subscriptionlsn = ] subscriptionlsn ]
    [ , [ @subscriptionstreams = ] subscriptionstreams ]
    [ , [ @subscriber_type = ] subscriber_type ]
    [ , [ @memory_optimized = ] memory_optimized ]
[ ; ]

Arguments

[ @publication = ] N'publicering'

Namnet på publikationen. @publication är sysname, utan standard.

[ @article = ] Inte en artikel'

Artikeln som publikationen är prenumererad på. @article är sysname, med standardvärdet .all Om all, läggs en prenumeration till alla artiklar i den publikationen. Endast värden av all eller NULL stöds för Oracle Publishers.

[ @subscriber = ] N'prenumerant'

Namnet på prenumeranten. @subscriber är sysname, med standardvärdet .NULL

Anmärkning

Servernamn kan anges som <Hostname>,<PortNumber> för en standardinstans eller <Hostname>\<InstanceName>,<PortNumber> för en namngiven instans. Ange portnumret för anslutningen när SQL Server distribueras i Linux eller Windows med en anpassad port och webbläsartjänsten är inaktiverad. Användningen av anpassade portnummer för fjärrdistributör gäller för SQL Server 2019 (15.x) och senare versioner.

[ @destination_db = ] N'destination_db'

Namnet på destinationsdatabasen där replikerad data ska placeras. @destination_db är sysname, med standardvärdet .NULL När NULL, @destination_db sätts till namnet på publikationsdatabasen. För Oracle Publishers måste @destination_db specificeras. För en icke-SQL Server-prenumerant, ange ett värde (standarddestination) för @destination_db.

[ @sync_type = ] N'sync_type'

Typen av prenumerationssynkronisering. @sync_type är nvarchar(255) och kan vara ett av följande värden:

Värde Description
none 1 Prenumeranten har redan schemat och initialdata för publicerade tabeller.
automatic (standardinställning) Schema och initial data för publicerade tabeller överförs först till prenumeranten.
replication support only 2 Erbjuder automatisk generering hos prenumeranten av anpassade lagrade procedurer och triggers som stödjer uppdatering av prenumerationer, om det är lämpligt. Antar att prenumeranten redan har schemat och initialdata för publicerade tabeller. När du konfigurerar en peer-to-peer transaktionell replikationstopologi, se till att datan på alla noder i topologin är identisk. För mer information, se Peer-to-Peer - Transaktionell replikering.
initialize with backup 2 Schema och initial data för publicerade tabeller hämtas från en backup av publiceringsdatabasen. Antar att prenumeranten har tillgång till en säkerhetskopia av publikationsdatabasen. Platsen för backupen och medietypen för backupen specificeras av @backupdevicename och @backupdevicetype. När detta alternativ används behöver en peer-to-peer-transaktionell replikationstopologi inte vara i quiescing under konfigurationen.
initialize from lsn Används när du lägger till en nod i en peer-to-peer transaktionell replikationstopologi. Används för @subscriptionlsn att säkerställa att alla relevanta transaktioner replikeras till den nya noden. Antar att prenumeranten redan har schemat och initialdata för publicerade tabeller. För mer information, se Peer-to-Peer - Transaktionell replikering.

1 Detta alternativ har avskaffats. Använd istället endast replikationsstöd.

2 Stöds inte för prenumerationer på icke-SQL Server-publikationer.

Anmärkning

Systemtabeller och data överförs alltid.

[ @status = ] Nej status'

Prenumerationsstatusen. @status är sysname, med standardvärdet .NULL När denna parameter inte är explicit inställd, sätter replikationen den automatiskt till ett av dessa värden.

Värde Description
active Prenumerationen är initierad och redo att acceptera ändringar. Detta alternativ ställs in när värdet på @sync_type är noll, initialisera med backup eller endast replikeringsstöd.
subscribed Prenumerationen måste initieras. Detta alternativ sätts när värdet på @sync_type är automatiskt.

[ @subscription_type = ] N'subscription_type'

Typen av prenumeration. @subscription_type är nvarchar(4), med en standard på push. Det kan vara push eller pull. Distributionsagenterna för push-prenumerationer finns hos distributören, och distributionsagenterna för pull-prenumerationer finns hos abonnenten. @subscription_type kan vara pull att skapa en namngiven pull-prenumeration som är känd av utgivaren. För mer information, se Prenumerera på publikationer.

Anmärkning

Anonyma prenumerationer behöver inte använda denna lagrade procedur.

[ @update_mode = ] N'update_mode'

Typ av uppdatering. @update_mode är nvarchar(30) och kan vara ett av dessa värden.

Värde Description
read only (standardinställning) Prenumerationen är endast läsbar. Ändringarna hos prenumeranten skickas inte till utgivaren.
sync tran Möjliggör stöd för omedelbar uppdatering av prenumerationer. Stöds inte för Oracle Publishers.
queued tran Möjliggör prenumeration för köad uppdatering. Dataändringar kan göras hos prenumeranten, lagras i en kö och sedan spridas till utgivaren. Stöds inte för Oracle Publishers.
failover Möjliggör prenumerationen för omedelbar uppdatering med köad uppdatering som failover. Dataändringar kan göras hos prenumeranten och omedelbart spridas till utgivaren. Om Utgivaren och Prenumeranten inte är anslutna kan uppdateringsläget ändras så att dataändringar som görs hos Prenumeranten lagras i en kö tills Prenumerant och Utgivare återansluts. Stöds inte för Oracle Publishers.
queued failover Möjliggör prenumerationen som en köad uppdateringsprenumeration med möjlighet att byta till omedelbart uppdateringsläge. Dataändringar kan göras hos prenumeranten och lagras i en kö tills en anslutning etableras mellan prenumeranten och utgivaren. När en kontinuerlig anslutning etableras kan uppdateringsläget ändras till omedelbar uppdatering. Stöds inte för Oracle Publishers.

Värdena sync tran och queued tran är inte tillåtna om publikationen som prenumereras på tillåter DTS.

[ @loopback_detection = ] N'loopback_detection'

Specificerar om distributionsagenten skickar transaktioner som startade hos prenumeranten tillbaka till prenumeranten. @loopback_detection är nvarchar(5) och kan vara ett av dessa värden.

Värde Description
true Distributionsagenten skickar inte transaktioner som startat hos abonnenten tillbaka till abonnenten. Används med bidirektionell transaktionell replikation. Mer information finns i Dubbelriktad transaktionsreplikering.
false Distributionsagenten skickar transaktioner som startade hos prenumeranten tillbaka till prenumeranten.
NULL (standardinställning) Automatiskt satt till true för en SQL Server-prenumerant och false för en icke-SQL Server-prenumerant.

[ @frequency_type = ] frequency_type

Frekvensen för att schemalägga distributionsuppgiften. @frequency_type är int, och kan vara ett av dessa värden.

Värde Description
1 En gång
2 På begäran
4 Varje dag
8 Weekly
16 Monthly
32 Månadssläkting
64 (standardinställning) Autostart
128 Återkommande

[ @frequency_interval = ] frequency_interval

Värdet som gäller för frekvensen som sätts av @frequency_type. @frequency_interval är int, med standardvärdet .NULL

[ @frequency_relative_interval = ] frequency_relative_interval

Datumet för distributionsagenten. Denna parameter används när @frequency_type sätts till 32 (månatlig relativ). @frequency_relative_interval är int, och kan vara ett av dessa värden.

Värde Description
1 Först
2 Second
4 Tredje
8 Fjärde
16 Sist
NULL (standardinställning)

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Upprepningsfaktorn som används av @frequency_type. @frequency_recurrence_factor är int, med standardvärdet .NULL

[ @frequency_subday = ] frequency_subday

Hur ofta, i några minuter, ska ombokas under den definierade perioden. @frequency_subday är int, och kan vara ett av dessa värden.

Värde Description
1 En gång
2 Second
4 Minut
8 Timme
NULL

[ @frequency_subday_interval = ] frequency_subday_interval

Pausen för @frequency_subday. @frequency_subday_interval är int, med standardvärdet .NULL

[ @active_start_time_of_day = ] active_start_time_of_day

Den tid på dygnet då distributionsagenten först schemaläggs är formaterad som HHmmss. @active_start_time_of_day är int, med standardvärdet .NULL

[ @active_end_time_of_day = ] active_end_time_of_day

Den tid på dygnet då distributionsagenten slutar schemalis, formaterad som HHmmss. @active_end_time_of_day är int, med standardvärdet .NULL

[ @active_start_date = ] active_start_date

Datumet då distributionsagenten först schemaläggs ut, formaterad som yyyyMMdd. @active_start_date är int, med standardvärdet .NULL

[ @active_end_date = ] active_end_date

Datumet då distributionsagenten slutar schemalis, formaterad som yyyyMMdd. @active_end_date är int, med standardvärdet .NULL

[ @optional_command_line = ] N'optional_command_line'

Den valfria kommandoprompten att köra. @optional_command_line är nvarchar(4000), med standardvärdet .NULL

[ @reserved = ] Inte reserverat'

Identifieras endast i informationssyfte. Stöds inte. Framtida kompatibilitet garanteras inte.

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Om prenumerationen kan synkroniseras via Windows Synchronization Manager. @enabled_for_syncmgr är nvarchar(5), med standardvärdet , NULLvilket är samma som false. Om false, är prenumerationen inte registrerad i Windows Synchronization Manager. Om true, är prenumerationen registrerad i Windows Synchronization Manager och kan synkroniseras utan att starta SQL Server Management Studio. Stöds inte för Oracle Publishers.

[ @offloadagent = ] avlastningsmedel

Specificerar att agenten kan aktiveras på distans. @offloadagent är bit, med standardvärdet .0

Anmärkning

Denna parameter har tagits ur bruk och behålls endast för att säkerställa bakåtkompatibilitet mellan skript.

[ @offloadserver = ] N'avlasta server'

Specificerar nätverksnamnet på servern som ska användas för fjärraktivering. @offloadserver är sysname, med standardvärdet .NULL

[ @dts_package_name = ] N'dts_package_name'

Specificerar namnet på Data Transformation Services (DTS)-paketet. @dts_package_name är sysname, med standardvärdet .NULL Till exempel, för att specificera ett paket av DTSPub_Package, skulle parametern vara @dts_package_name = N'DTSPub_Package'. Denna parameter är tillgänglig för push-prenumerationer. För att lägga till DTS-paketinformation i en pull-prenumeration, använd sp_addpullsubscription_agent.

[ @dts_package_password = ] N'dts_package_password'

Anger lösenordet på paketet, om det finns något. @dts_package_password är sysname, med standardvärdet .NULL

Anmärkning

Du måste ange ett lösenord om @dts_package_name är angivet.

[ @dts_package_location = ] N'dts_package_location'

Specificerar paketets plats. @dts_package_location är nvarchar(12), med en standard på NULL, vilket är samma som distributor. Platsen för paketet kan vara distributor eller subscriber.

[ @distribution_job_name = ] N'distribution_job_name'

Identifieras endast i informationssyfte. Stöds inte. Framtida kompatibilitet garanteras inte.

[ @publisher = ] N'publisher'

Specificerar en icke-SQL Server Publisher. @publisher är sysname, med standardvärdet .NULL

Anmärkning

@publisher bör inte specificeras för en SQL Server Publisher.

[ @backupdevicetype = ] N'backupdevicetype'

Specificerar vilken typ av backup-enhet som används vid initiering av en abonnent från en backup. @backupdevicetype är nvarchar(20) och kan vara ett av dessa värden:

Värde Description
logical (standardinställning) Backup-enheten är en logisk enhet
disk Backup-enheten är disken
tape Backupenheten är en bandenhet
url Backup-enheten är en URL

@backupdevicetype används endast när @sync_method är inställd på initialize_with_backup.

[ @backupdevicename = ] N'backupdevicename'

Specificerar namnet på enheten som används vid initiering av en Abonnent från en backup. @backupdevicename är nvarchar(1000), med en standard på NULL.

[ @mediapassword = ] N'mediapassword'

Specificerar ett lösenord för medieuppsättningen om ett lösenord sattes när mediet formaterades. @mediapassword är sysname, med standardvärdet .NULL

Anmärkning

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen.

[ @password = ] N'password'

Specificerar ett lösenord för säkerhetskopian om ett lösenord sattes när säkerhetskopian skapades. @password är sysname med standardvärdet NULL.

[ @fileidhint = ] fileidhint

Identifierar ett ordinalt värde för säkerhetskopian som ska återställas. @fileidhint är int, med standardvärdet .NULL

[ @unload = ] lossa

Specificerar om en bandbackup-enhet ska lastas ur efter att initieringen bakifrån är klar. @unload är bit, med standardvärdet , 1vilket anger att bandet ska avlastas. @unload används endast när @backupdevicetype är tape.

[ @subscriptionlsn = ] subscriptionlsn

Specificerar det loggsekvensnummer (LSN) vid vilket en prenumeration ska börja leverera ändringar till en nod i en peer-to-peer-transaktionell replikationstopologi. @subscriptionlsn är binär(10), med standardvärdet .NULL Används med ett @sync_type värde av initialize from lsn för att säkerställa att alla relevanta transaktioner replikeras till en ny nod. För mer information, se Peer-to-Peer - Transaktionell replikering.

[ @subscriptionstreams = ] prenumerationsströmmar

Antalet anslutningar som tillåts per distributionsagent för att tillämpa batchar med ändringar parallellt med en prenumerant, samtidigt som många av de transaktionsegenskaper som finns vid användning av en enda tråd bibehålls. @subscriptionstreams är tinyint, med standardvärdet .NULL Ett värdeintervall från 1 till 64 stöds. Denna parameter stöds inte för icke-SQL Server-prenumeranter, Oracle Publishers eller peer-to-peer-prenumerationer. När @subscriptionstreams används läggs ytterligare rader till i msreplication_subscriptions tabellen (en rad per ström) med en agent_id inställning till NULL.

Anmärkning

Prenumerationsströmmar fungerar inte för artiklar som har konfigurerats för att leverera Transact-SQL. Om du vill använda prenumerationsströmmar konfigurerar du artiklar för att leverera lagrade proceduranrop i stället.

[ @subscriber_type = ] subscriber_type

Typen av prenumerant. @subscriber_type är pyttelitet och kan vara ett av dessa värden.

Värde Description
0 (standardinställning) SQL Server-prenumerant
1 ODBC datakällaserver
2 Microsoft Jet-databas
3 OLE DB-provider

[ @memory_optimized = ] memory_optimized

Indikerar att prenumerationen stöder minnesoptimerade tabeller. @memory_optimized är bit, med standarden ( 0 false). 1 (True) betyder att prenumerationen stöder minnesoptimerade tabeller.

Returnera kodvärden

0 (lyckades) eller 1 (fel).

Anmärkningar

sp_addsubscription används vid snapshot-replikering och transaktionell replikation.

När sp_addsubscription den körs av en medlem i sysadmin-fixedserverrollen för att skapa en push-prenumeration, skapas och körs Distribution Agent-jobbet implicit under SQL Server Agent-tjänstekontot. Vi rekommenderar att du kör sp_addpushsubscription_agent och specificerar inloggningsuppgifterna för ett annat, agentspecifikt Windows-konto för @job_login och @job_password. Mer information finns i Säkerhetsmodell för replikeringsagent.

sp_addsubscription förhindrar ODBC- och OLE DB-prenumeranter tillgång till publikationer som:

  • Skapades med den inhemska @sync_method i kallelsen till sp_addpublication.

  • Innehåller artiklar som lades till i publikationen med den sp_addarticle lagrade proceduren som hade ett @pre_creation_cmd parametervärde på 3 (trunkera).

  • Försök att ställa @update_mode till sync tran.

  • Ha en artikel konfigurerad att använda parametriserade satser.

Dessutom, om en publikation har @allow_queued_tran-alternativet satt på true (vilket möjliggör kö av ändringar hos prenumeranten tills de kan tillämpas hos utgivaren), skrivs tidsstämpelkolumnen i en artikel ut som tidsstämpel, och ändringar i den kolumnen skickas till prenumeranten. Prenumeranten genererar och uppdaterar tidsstämpelns kolumnvärde. För en ODBC- eller OLE DB-prenumerant misslyckas sp_addsubscription om ett försök görs att prenumerera på en publikation som har @allow_queued_tran satt till sanna och artiklar med tidsstämpelkolumner i.

Om en prenumeration inte använder ett DTS-paket kan den inte prenumerera på en publikation som är inställd på @allow_transformable_subscriptions. Om tabellen från publikationen behöver replikeras till både en DTS-prenumeration och en icke-DTS-prenumeration måste två separata publikationer skapas: en för varje typ av prenumeration.

När man väljer de sync_type alternativen replication support only, initialize with backup, eller initialize from lsn, måste loggläsaragenten köras efter att ha kört sp_addsubscription, så att setup-skripten skrivs till distributionsdatabasen. Loggläsaragenten måste köras under ett konto som är medlem i den fasta sysadmin-serverrollen . När @sync_type-alternativet är satt till Automatickrävs inga särskilda loggläsaragentåtgärder.

Permissions

Endast medlemmar av sysadmin-fasta serverrollen eller db_owner fasta databasrollen kan köra sp_addsubscription. För pull-prenumerationer kan användare med inloggningar i publiceringsåtkomstlistan köra sp_addsubscription.

Examples

-- 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