Sdílet prostřednictvím


sp_addsubscription (Transact-SQL)

platí pro:SQL Serverazure SQL Database

Přidává předplatné publikace a nastavuje status odběratele. Tato uložená procedura se spustí v Publisheru v databázi publikace.

Transact-SQL konvence syntaxe

Syntaxe

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

Název publikace. @publication je sysname, bez výchozího nastavení.

[ @article = ] N'článek'

Článek, na který je publikace předplacena. @article je sysname s výchozím nastavením all. Pokud all, je ke všem článkům v dané publikaci přidáno předplatné. Pouze hodnoty nebo allNULL jsou podporovány pouze pro Oracle Publishers.

[ @subscriber = ] N'subscriber'

Název odběratele. @subscriber je sysname s výchozím nastavením NULL.

Poznámka:

Název serveru lze zadat jako <Hostname>,<PortNumber> výchozí instanci nebo <Hostname>\<InstanceName>,<PortNumber> pro pojmenovanou instanci. Zadejte číslo portu pro vaše připojení, když je SQL Server nasazen v Linuxu nebo Windows s vlastním portem a služba prohlížeče je zakázaná. Použití vlastních čísel portů pro vzdáleného distributora platí pro SQL Server 2019 (15.x) a novější verze.

[ @destination_db = ] N'destination_db'

Název cílové databáze, do které se ukládají replikovaná data. @destination_db je sysname s výchozím nastavením NULL. Když NULL, @destination_db je nastaveno na název databáze publikace. Pro Oracle Publishers je třeba @destination_db specifikovat. Pro předplatitele mimo SQL Server zadejte hodnotu (výchozí cíl) pro @destination_db.

[ @sync_type = ] N'sync_type'

Typ synchronizace předplatného. @sync_type je nvarchar(255) a může mít jednu z následujících hodnot:

Hodnota Description
none 1 Subscriber už má schéma a počáteční data pro publikované tabulky.
automatic (výchozí) Schéma a počáteční data pro publikované tabulky jsou nejprve přenášena předplatiteli.
replication support only 2 Poskytuje automatickou generaci vlastních uložených procedur a spouštěčů článků u odběratele, které podporují aktualizaci odběrů, pokud je to vhodné. Předpokládá, že předplatitel již má schéma a počáteční data pro publikované tabulky. Při konfiguraci peer-to-peer transakční replikační topologie je třeba zajistit, aby data ve všech uzlech topologie byla identická. Pro více informací viz Peer-to-Peer – Transakční replikace.
initialize with backup 2 Schéma a počáteční data pro publikované tabulky jsou získávána ze zálohy publikační databáze. Předpokládá, že předplatitel má přístup k záložní záložní databázi publikace. Umístění zálohy a typ média pro zálohu jsou specifikovány @backupdevicename a @backupdevicetype. Při použití této možnosti není třeba během konfigurace vypnout peer-to-peer transakční replikační topologii.
initialize from lsn Používá se, když přidáváte uzel do peer-to-peer transakční replikační topologie. Používá se k @subscriptionlsn zajištění, že všechny relevantní transakce jsou replikovány na nový uzel. Předpokládá, že předplatitel již má schéma a počáteční data pro publikované tabulky. Pro více informací viz Peer-to-Peer – Transakční replikace.

1 Tato možnost byla zrušena. Používejte pouze podporu replikace.

2 Není podporováno pro předplatné publikací mimo SQL Server.

Poznámka:

Systémové tabulky a data jsou vždy přenášena.

[ @status = ] N'status'

Stav předplatného. @status je sysname s výchozím nastavením NULL. Pokud tento parametr není explicitně nastaven, replikace jej automaticky nastaví na jednu z těchto hodnot.

Hodnota Description
active Předplatné je inicializováno a připraveno přijímat změny. Tato možnost se nastaví, když hodnota @sync_type je nula, inicializace se zálohou nebo pouze podporou replikace.
subscribed Předplatné musí být inicializováno. Tato možnost se nastavuje, když je hodnota @sync_type automatická.

[ @subscription_type = ] N'subscription_type'

Typ předplatného. @subscription_type je nvarchar(4), s výchozím hodnotou push. Může být push nebo pull. Distribuční agenti push předplatného sídlí u distributora a distribuční agenti pull předplatného u předplatitele. @subscription_type může být pull vytvoření pojmenovaného pull předplatného, které je známé vydavateli. Pro více informací viz Přihlásit se k odběru publikací.

Poznámka:

Anonymní odběry nemusí používat tuto uloženou proceduru.

[ @update_mode = ] N'update_mode'

Typ aktualizace. @update_mode je nvarchar(30) a může být jednou z těchto hodnot.

Hodnota Description
read only (výchozí) Předplatné je jen pro čtení. Změny na Subscriber nejsou odesílány vydavateli.
sync tran Umožňuje podporu okamžité aktualizace předplatného. Oracle Publishers to nepodporuje.
queued tran Umožňuje předplatné pro aktualizace ve frontě. Úpravy dat lze provádět u odběratele, uložit do fronty a následně je předat vydavateli. Oracle Publishers to nepodporuje.
failover Umožňuje okamžité aktualizace předplatného s aktualizací ve frontě jako failover. Úpravy dat lze provádět u předplatitele a ihned je předat vydavateli. Pokud nejsou vydavatel a předplatitel propojeni, lze změnit režim aktualizace tak, aby úpravy dat provedené u předplatitele byly uloženy ve frontě, dokud nejsou předplatitel a vydavatel znovu propojeni. Oracle Publishers to nepodporuje.
queued failover Umožňuje předplatné jako frontové aktualizované předplatné s možností přepnout na režim okamžité aktualizace. Úpravy dat lze provádět u předplatitele a ukládat je do fronty, dokud není navázáno spojení mezi předplatitelem a vydavatelem. Když je navázáno nepřetržité spojení, režim aktualizace lze změnit na okamžité aktualizace. Oracle Publishers to nepodporuje.

Hodnoty sync tran a queued tran nejsou povoleny, pokud publikace, na kterou jste odebíráni, umožňuje DTS.

[ @loopback_detection = ] N'loopback_detection'

Specifikuje, zda distribuční agent posílá transakce, které pocházejí z odběratele, zpět k odběrateli. @loopback_detection je nvarchar(5) a může být jednou z těchto hodnot.

Hodnota Description
true Distribuční agent neposílá transakce vzniklé u Odběratele zpět Odběrateli. Používá se s obousměrnou transakční replikací. Další informace naleznete v tématu Obousměrná transakční replikace.
false Distribuční agent posílá transakce, které vznikly u Odběratele, zpět Předplatiteli.
NULL (výchozí) Automaticky nastaveno na true pro SQL Server Subscriber a false pro uživatele bez SQL Serveru.

[ @frequency_type = ] frequency_type

Frekvence, s jakou plánovat distribuční úkol. @frequency_type je int a může být jednou z těchto hodnot.

Hodnota Description
1 Jednou
2 Na vyžádání
4 Každý den
8 Weekly
16 Monthly
32 Měsíční příbuzný
64 (výchozí) Autostart
128 Opakovaná platba

[ @frequency_interval = ] frequency_interval

Hodnota se vztahuje na frekvenci nastavenou @frequency_type. @frequency_interval je int, s výchozím nastavením NULL.

[ @frequency_relative_interval = ] frequency_relative_interval

Datum distribučního agenta. Tento parametr se používá, když je @frequency_type nastaveno na 32 (měsíční relativní). @frequency_relative_interval je int a může být jednou z těchto hodnot.

Hodnota Description
1 First
2 Second
4 Třetí
8 Čtvrtý
16 Poslední
NULL (výchozí)

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Faktor opakování používaný @frequency_type. @frequency_recurrence_factor je int, s výchozím hodnotou NULL.

[ @frequency_subday = ] frequency_subday

Jak často, v minutách, přeplánovat během definovaného období. @frequency_subday je int a může být jednou z těchto hodnot.

Hodnota Description
1 Jednou
2 Second
4 Minute
8 Hodina
NULL

[ @frequency_subday_interval = ] frequency_subday_interval

Přestávka na @frequency_subday. @frequency_subday_interval je int, s výchozím nastavením NULL.

[ @active_start_time_of_day = ] active_start_time_of_day

Denní doba, kdy je distribuční agent poprvé naplánován, formátovaná jako HHmmss. @active_start_time_of_day je int, s výchozím nastavením NULL.

[ @active_end_time_of_day = ] active_end_time_of_day

Denní doba, kdy distribuční agent přestává být plánován, formátovaná jako HHmmss. @active_end_time_of_day je int, s výchozím hodnotou NULL.

[ @active_start_date = ] active_start_date

Datum, kdy je distribuční agent poprvé naplánován, formátováno jako yyyyMMdd. @active_start_date je int, s výchozím nastavením NULL.

[ @active_end_date = ] active_end_date

Datum, kdy distribuční agent přestane být plánován, formátováno jako yyyyMMdd. @active_end_date je int, s výchozím nastavením NULL.

[ @optional_command_line = ] N'optional_command_line'

Volitelné příkazové řádky pro spustění. @optional_command_line je nvarchar(4000), s výchozím hodnotou NULL.

[ @reserved = ] N'rezervováno'

Určeno pouze pro informační účely. Není podporováno. Budoucí kompatibilita není zaručena.

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Zda lze předplatné synchronizovat přes Windows Synchronization Manager. @enabled_for_syncmgr je nvarchar(5), s výchozím , NULLcož je stejné jako false. Pokud false, předplatné není registrováno ve Windows Synchronization Manager. Pokud true, předplatné je registrováno ve Windows Synchronization Manager a lze ho synchronizovat bez nutnosti spouštět SQL Server Management Studio. Oracle Publishers to nepodporuje.

[ @offloadagent = ] offloadagent

Specifikuje, že agent může být aktivován na dálku. @offloadagent je bit, s výchozím hodnotou 0.

Poznámka:

Tento parametr byl zrušen a je udržován pouze kvůli zpětné kompatibilitě skriptů.

[ @offloadserver = ] N'offloadserver

Specifikuje síťové jméno serveru, který má být použit pro vzdálenou aktivaci. @offloadserver je sysname s výchozím nastavením NULL.

[ @dts_package_name = ] N'dts_package_name'

Specifikuje název balíčku Data Transformation Services (DTS). @dts_package_name je sysname s výchozím nastavením NULL. Například pro specifikaci balíčku , DTSPub_Packageparametrem by byl @dts_package_name = N'DTSPub_Package'. Tento parametr je dostupný pro push předplatné. Pro přidání informací o DTS balíčku do pull předplatného použijte sp_addpullsubscription_agent.

[ @dts_package_password = ] N'dts_package_password'

Na balení je uvedeno heslo, pokud nějaké je. @dts_package_password je sysname s výchozím nastavením NULL.

Poznámka:

Pokud je uvedeno , musíte zadat heslo@dts_package_name je uvedeno.

[ @dts_package_location = ] N'dts_package_location'

Specifikuje umístění balíčku. @dts_package_location je nvarchar(12), s výchozím , NULLcož je stejné jako distributor. Umístění balíčku může být distributor nebo subscriber.

[ @distribution_job_name = ] N'distribution_job_name'

Určeno pouze pro informační účely. Není podporováno. Budoucí kompatibilita není zaručena.

[ @publisher = ] N'publisher'

Specifikuje vydavatele mimo SQL Server. @publisher je sysname s výchozím nastavením NULL.

Poznámka:

@publisher by nemělo být specifikováno pro SQL Server Publisher.

[ @backupdevicetype = ] N'backupdevicetype'

Specifikuje typ záložního zařízení použitého při inicializaci účastníka ze zálohy. @backupdevicetype je nvarchar(20) a může být jednou z těchto hodnot:

Hodnota Description
logical (výchozí) Záložní zařízení je logické zařízení
disk Záložním zařízením je disková jednotka
tape Záložním zařízením je pásková mechanika
url Záložním zařízením je URL

@backupdevicetype se používá pouze tehdy, když je @sync_method nastaveno na initialize_with_backup.

[ @backupdevicename = ] N'backupdevicename'

Specifikuje název zařízení použitého při inicializaci účastníka ze zálohy. @backupdevicename je nvarchar(1000), s výchozím hodnotou NULL.

[ @mediapassword = ] N'mediapassword'

Specifikuje heslo pro sadu médií, pokud bylo heslo nastaveno při formátování média. @mediapassword je sysname s výchozím nastavením NULL.

Poznámka:

Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají.

[ @password = ] N'password'

Specifikuje heslo pro zálohu, pokud bylo heslo nastaveno při vytváření zálohy. @password je sysname, s výchozím nastavením NULL.

[ @fileidhint = ] fileidhint

Identifikuje ordinální hodnotu zálohovací množiny, která má být obnovena. @fileidhint je int, s výchozím nastavením NULL.

[ @unload = ] vykládat

Specifikuje, zda by mělo být zařízení pro zálohování pásky po dokončení inicializace zpět odpojeno. @unload je bit, s výchozím nastavením 1, což určuje, že páska by měla být vyložena. @unload se používá pouze tehdy, když @backupdevicetype je .tape

[ @subscriptionlsn = ] subscriptionlsn

Specifikuje logární sekvenční číslo (LSN), při kterém by předplatné mělo začít doručovat změny uzlu v peer-to-peer transakční replikační topologii. @subscriptionlsn je binární(10), s výchozím nastavením NULL. Používá se s @sync_type hodnotou k initialize from lsn zajištění, že všechny relevantní transakce jsou replikovány na nový uzel. Pro více informací viz Peer-to-Peer – Transakční replikace.

[ @subscriptionstreams = ] subscriptionstreams

Počet připojení povolených pro každého distribučního agenta k použití dávek změn paralelně pro odběratele a zachování mnoha transakčních charakteristik, které jsou přítomné při použití jednoho vlákna. @subscriptionstreams je tinyint, s výchozím nastavením NULL. Podporuje se rozsah hodnot od 1 do 64 . Tento parametr není podporován pro ne-SQL Server předplatitele, Oracle Publishers ani peer-to-peer předplatné. Kdykoli se použije @subscriptionstreams , do tabulky msreplication_subscriptions se přidávají další řádky (jeden řádek na proud) s množinou agent_id na NULL.

Poznámka:

Streamy předplatného nefungují pro články nakonfigurované tak, aby doručovaly transact-SQL. Pokud chcete používat streamy předplatného, nakonfigurujte články tak, aby místo toho doručily volání uložených procedur.

[ @subscriber_type = ] subscriber_type

Typ předplatitele. @subscriber_type je malý a může být jednou z těchto hodnot.

Hodnota Description
0 (výchozí) SQL Server Subscriber
1 ODBC zdrojový server dat
2 Databáze Microsoft Jet
3 zprostředkovatel OLE DB

[ @memory_optimized = ] memory_optimized

Označuje, že předplatné podporuje tabulky optimalizované pro paměť. @memory_optimized je bit, s výchozím nastavením ( 0 false). 1 (true) znamená, že předplatné podporuje tabulky optimalizované pro paměť.

Hodnoty návratového kódu

0 (úspěch) nebo 1 (selhání).

Poznámky

sp_addsubscription se používá při replikaci snapshotů a transakční replikaci.

Když sp_addsubscription je spuštěna členem role pevného serveru správce systému za účelem vytvoření push předplatného, úloha Distribučního agenta je implicitně vytvořena a spustena pod účtem služby SQL Server Agent. Doporučujeme spustit sp_addpushsubscription_agent a zadat přihlašovací údaje jiného, agentu specifického Windows účtu pro @job_login a @job_password. Další informace naleznete v tématu Model zabezpečení agenta replikace.

sp_addsubscription brání předplatitelům ODBC a OLE DB přístup k publikacím, které:

  • Byly vytvořeny s domorodým @sync_method ve výzvě k sp_addpublication.

  • Obsahovat články přidány do publikace pomocí sp_addarticle uložené procedury, která měla hodnotu parametru @pre_creation_cmd 3 (zkrátit).

  • Pokuste se nastavit @update_mode na sync tran.

  • Mějte článek nastavený tak, aby používal parametrizované výroky.

Navíc, pokud má publikace možnost @allow_queued_tran nastavenou na true (což umožňuje frontu změn u odběratele, dokud je nelze aplikovat u vydavatele), sloupec časového razítka v článku je vypsán jako časové razítko a změny v tomto sloupci jsou odesílány odběrateli. Odběratel generuje a aktualizuje hodnotu sloupce časového razítka. Pro předplatitele ODBC nebo OLE DB selže, sp_addsubscription pokud se pokusí odebrat publikaci, která má nastavené @allow_queued_tran na true a články s časovými značkami.

Pokud předplatné nepoužívá DTS balíček, nemůže se přihlásit k publikaci, která je nastavena na @allow_transformable_subscriptions. Pokud je třeba tabulku z publikace replikovat jak pro DTS předplatné, tak pro ne-DTS předplatné, je třeba vytvořit dvě samostatné publikace: jednu pro každý typ předplatného.

Při výběru sync_type možností replication support only, initialize with backup, initialize from lsnnebo , musí po spuštění sp_addsubscriptionspustit agent čtečky logů, aby byly nastavovací skripty zapsány do distribuční databáze. Agent čtenáře protokolu musí být spuštěný pod účtem, který je členem pevné role serveru správce systému . Když je volba @sync_type nastavena na Automatic, nejsou potřeba žádné speciální akce agenta čtečky logů.

Povolení

Pouze členové role pevného serveru správce systému nebo role pevné databáze db_owner mohou vykonávat sp_addsubscription. Pro pull odběry mohou uživatelé s přihlaškováním v seznamu přístupu k publikaci spustit 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