sp_addsubscription (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL Database

Előfizetést ad egy kiadványhoz és beállítja az Előfizető státuszt. Ezt a tárolt eljárást a publisher a közzétételi adatbázisban hajtja végre.

Transact-SQL szintaxis konvenciók

Szemantika

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

A kiadvány neve. @publicationa sysname, alapértelmezett nélkül.

[ @article = ] N'article'

Az a cikk, amelyhez a kiadvány feliratkozott. @article a sysname, alapértelmezettként all. Ha all, előfizetést adnak hozzá az adott kiadvány összes cikkéhez. Csak az all vagy NULL értékek támogatottak az Oracle Publishers számára.

[ @subscriber = ] N'előfizető

Az előfizető neve. @subscriber a sysname, alapértelmezettként NULL.

Megjegyzés:

A kiszolgáló neve megadható alapértelmezett példányként <Hostname>,<PortNumber> vagy <Hostname>\<InstanceName>,<PortNumber> névvel ellátott példányként. Adja meg a kapcsolat portszámát, ha az SQL Server linuxos vagy windowsos egyéni porton van üzembe helyezve, és a böngészőszolgáltatás le van tiltva. A távoli terjesztő egyéni portszámainak használata az SQL Server 2019 (15.x) és újabb verzióira vonatkozik.

[ @destination_db = ] N'destination_db'

A célállomás adatbázis neve, amelybe a replikált adatokat kell elhelyezni. @destination_db a sysname, alapértelmezetként NULL. Amikor NULL, @destination_db a publikációs adatbázis nevének van beállítva. Az Oracle Publishers esetében @destination_db meg kell határozni. Nem SQL Server előfizető esetén adj meg egy értéket (alapértelmezett célpont) @destination_db-re.

[ @sync_type = ] N'sync_type'

Az előfizetéses szinkronizáció típusa. @sync_typenvarchar(255), és lehet az alábbi értékek egyike:

Érték Description
none 1 Az előfizető már rendelkezik a sémával és a kezdeti adatokkal a közzétett táblákhoz.
automatic (alapértelmezett) A közzétett táblák sémáját és kezdeti adatait először az Előfizetőhöz továbbítják.
replication support only 2 Automatikus előfizetőnél generálja a cikket egyedi tárolt eljárásokról és triggerekről, amelyek szükség esetén támogatják az előfizetések frissítését. Feltételezi, hogy az Előfizető már rendelkezik a sémával és az eredeti adatokkal a közzétett táblákhoz. Peer-to-peer tranzakciós replikációs topológiát konfigurálásakor győződjön meg róla, hogy az összes csomópont adatai azonosak legyenek. További információért lásd: Peer-to-Peer - Transactional Replication.
initialize with backup 2 A közzétett táblázatokhoz vonatkozó séma és kezdeti adatok a publikációs adatbázis biztonsági mentéséből származnak. Feltételezi, hogy az előfizető hozzáfér a kiadvány adatbázisának biztonsági mentéséhez. A biztonsági mentés helyét és a biztonsági mentés médiatípusát @backupdevicename és @backupdevicetype határozza meg. E opció használatakor a peer-to-peer tranzakciós replikációs topológiát nem kell leállítani a konfiguráció során.
initialize from lsn Akkor használjuk, amikor egy csomópontot hozzáadsz egy peer-to-peer tranzakciós replikációs topológiához. Azt arra @subscriptionlsn használom, hogy biztosítsam, minden releváns tranzakció replikált az új csomópontra. Feltételezi, hogy az Előfizető már rendelkezik a sémával és az eredeti adatokkal a közzétett táblákhoz. További információért lásd: Peer-to-Peer - Transactional Replication.

1 Ez az opció már elfogyott. Használj inkább csak replikációs támogatást.

2 Nem támogatott nem SQL Server kiadványokra való előfizetéseknél.

Megjegyzés:

A rendszertáblák és adatok mindig átkerülnek.

[ @status = ] N'status'

Az előfizetési státusz. @status a sysname, alapértelmezettként NULL. Ha ez a paraméter nincs explicit módon beállítva, a replikáció automatikusan beállítja az értékek egyikére.

Érték Description
active Az előfizetés indult és készen áll a változtatások elfogadására. Ez az opció akkor állítható be, ha @sync_type értéke nincs, inicializálható biztonsági mentéssel vagy csak replikációs támogatással.
subscribed Az előfizetést indítani kell. Ez az opció akkor állítható be, ha @sync_type értéke automatikus.

[ @subscription_type = ] N'subscription_type'

Az előfizetés típusa. @subscription_typenvarchar(4), alapértelmezett értéke push. Lehet push vagy pull. A push előfizetések Terjesztési Ügynökei a Forgalmazónál találhatók, a pull előfizetések Terjesztési Ügynökei pedig az Előfizetőnél. @subscription_typepull lehet egy nevelt pull előfizetés létrehozása, amelyet a Kiadó ismer. További információért lásd: Iratkozz fel a Publikációkra.

Megjegyzés:

Az anonim előfizetéseknek nem kell ezt a tárolt eljárást használniuk.

[ @update_mode = ] N'update_mode'

A frissítés típusa. @update_modenvarchar(30), és lehet ezek közül az értékek.

Érték Description
read only (alapértelmezett) Az előfizetés írásvédett. A Feliratkozónál a változásokat nem küldik el a Kiadónak.
sync tran Lehetővé teszi az azonnali frissítési előfizetések támogatását. Nem támogatott az Oracle Publishers esetében.
queued tran Lehetővé teszi az előfizetést a sorban lévő frissítéshez. Az adatmódosítások a Feliratkozó által elvégezhetők, sorban tárolhatók, majd továbbíthatók a Kiadónak. Nem támogatott az Oracle Publishers esetében.
failover Lehetővé teszi az előfizetés azonnali frissítését, sorban lévő frissítéssel a failoverként. Az adatmódosításokat az Előfizetőnél lehet elvégezni, és azonnal továbbítani a Kiadónak. Ha a Kiadó és az Előfizető nincs összekapcsolva, a frissítési mód megváltoztatható úgy, hogy az Előfizetőnél végzett adatmódosítások sorban maradjanak, amíg az Előfizető és a Kiadó újra össze nem kapcsolódnak. Nem támogatott az Oracle Publishers esetében.
queued failover Lehetővé teszi az előfizetést sorban lévő frissítő előfizetésként, azonnali frissítési módra váltva. Az adatmódosítások az Előfizetőnél elvégezhetők és sorban tárolhatók, amíg kapcsolat nem jön létre az Előfizető és a Kiadó között. Ha folyamatos kapcsolat létrejött, a frissítési mód azonnali frissítésre váltható. Nem támogatott az Oracle Publishers esetében.

Az értékek sync tran és queued tran nem engedélyezettek, ha az előfizető kiadvány engedélyezi a DTS-t.

[ @loopback_detection = ] N'loopback_detection'

Megadja, hogy a Forgalmazó Ügynök visszaküldi-e az Előfizetőtől származó tranzakciókat az Előfizetőnek. @loopback_detectionnvarchar(5), és lehet ezek közül az értékek.

Érték Description
true A Terjesztési Ügynök nem küldi vissza az Előfizetőtől származó tranzakciókat az Előfizetőnek. Kétirányú tranzakciós replikációval használják. További információ: Kétirányú tranzakciós replikáció.
false A Disztribúciós Ügynök visszaküldi az Előfizetőtől származó tranzakciókat az Előfizetőnek.
NULL (alapértelmezett) Automatikusan állítják true egy SQL Server előfizető esetén, a nem SQL Server előfizető esetén pedig hamisnak.

[ @frequency_type = ] frequency_type

A kiosztási feladat ütemezésének gyakorisága. @frequency_typeint, és lehet ezek közül az értékek.

Érték Description
1 Egyszer
2 Igény szerint
4 Mindennapi
8 Weekly
16 Monthly
32 Havi rokon
64 (alapértelmezett) Automatikus indítás
128 előfizetés

[ @frequency_interval = ] frequency_interval

Az érték, amelyet a @frequency_type által beállított frekvenciára alkalmazzák. @frequency_intervalint, alapértelmezés NULLszerint .

[ @frequency_relative_interval = ] frequency_relative_interval

A Forgalmazó Ügynök dátuma. Ezt a paramétert akkor használják, amikor @frequency_type (havi relatív állapot) értékre van állítva 32 . @frequency_relative_intervalint, és lehet ezek közé az értékek.

Érték Description
1 First
2 Second
4 Harmadik
8 Negyedik
16 Utolsó
NULL (alapértelmezett)

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

A @frequency_type által használt visszatérési tényező. @frequency_recurrence_factorint, alapértelmezés szerint NULL.

[ @frequency_subday = ] frequency_subday

Hányszor vagy percekben lehet átütemezni a meghatározott időszakban. @frequency_subdayint, és lehet ezek közé az értékek.

Érték Description
1 Egyszer
2 Second
4 Minute
8 Óra
NULL

[ @frequency_subday_interval = ] frequency_subday_interval

A @frequency_subday szünet. @frequency_subday_intervalint, alapértelmezés NULL.

[ @active_start_time_of_day = ] active_start_time_of_day

Az a napszak, amikor a Forgalmazó Ügynök először beütemezik, formázva.HHmmss @active_start_time_of_dayint, alapértelmezettként NULL.

[ @active_end_time_of_day = ] active_end_time_of_day

Az a napszak, amikor a Forgalmazó Ügynök megszűnik az ütemezés, formázva .HHmmss @active_end_time_of_dayint, alapértelmezettként NULL.

[ @active_start_date = ] active_start_date

Az a dátum, amikor a Forgalmazó Ügynök először ütemezik, formázva .yyyyMMdd @active_start_dateint, alapértelmezés NULL.

[ @active_end_date = ] active_end_date

Az a dátum, amikor a Terjesztési Ügynök megszűnik az ütemezés, formázva .yyyyMMdd @active_end_dateint, alapértelmezettként NULL.

[ @optional_command_line = ] N'optional_command_line'

Az opcionális parancssor, amit végrehajthatunk. @optional_command_linenvarchar(4000), alapértelmezett értéke NULL.

[ @reserved = ] N'reserved'

Csak tájékoztatási célokra van meghatározva. Nem támogatott. A jövőbeli kompatibilitás nem garantált.

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Hogy az előfizetés szinkronizálható-e a Windows Synchronization Manager-en keresztül. @enabled_for_syncmgrnvarchar(5), alapértelmezett értékével NULL, ami ugyanaz, mint false. Ha false, az előfizetés nincs regisztrálva a Windows Synchronization Manager-ben. Ha true, az előfizetés regisztrált a Windows Synchronization Manager-ben, és szinkronizálható anélkül, hogy elindítaná az SQL Server Management Studio-t. Nem támogatott az Oracle Publishers esetében.

[ @offloadagent = ] Leterelőügynök

Megadja, hogy az ügynök távolról is aktiválható. @offloadagentbit, alapértelmezettként 0.

Megjegyzés:

Ez a paraméter már elavult, és csak a scriptek visszafelé kompatibilitása érdekében tartják fenn.

[ @offloadserver = ] N'offloadserver'

Megadja a távoli aktiváláshoz használt szerver hálózati nevét. @offloadservera sysname, alapértelmezés NULLszerint .

[ @dts_package_name = ] N'dts_package_name'

Megadja az Adattranszformációs Szolgáltatások (DTS) csomag nevét. @dts_package_namea sysname, alapértelmezettként NULL. Például, ha egy csomagot meg akarunk DTSPub_Packagehatározni, a paraméter .@dts_package_name = N'DTSPub_Package' Ez a paraméter elérhető push előfizetésekhez. A DTS csomag adatainak hozzáadásához a pull előfizetéshez használd sp_addpullsubscription_agent.

[ @dts_package_password = ] N'dts_package_password'

Megadja a csomagon lévő jelszót, ha van ilyen. @dts_package_password a sysname, alapértelmezettként NULL.

Megjegyzés:

Ha @dts_package_name meg van adva, jelszót kell megadnod.

[ @dts_package_location = ] N'dts_package_location'

Megadja a csomag helyét. @dts_package_locationnvarchar(12), alapértelmezett értéke NULL, ami megegyezik .distributor A csomag helye lehet distributor vagy subscriber.

[ @distribution_job_name = ] N'distribution_job_name'

Csak tájékoztatási célokra van meghatározva. Nem támogatott. A jövőbeli kompatibilitás nem garantált.

[ @publisher = ] N'publisher'

Nem SQL Server Publishert jelöl meg. @publisher a sysname, alapértelmezettként NULL.

Megjegyzés:

@publisher nem szabad megadni egy SQL Server Publisher esetében.

[ @backupdevicetype = ] N'backupdevicetype'

Megadja a biztonsági mentési eszköz típusát, amelyet az előfizető biztonsági mentésből való inicializálásakor. @backupdevicetypenvarchar(20), és lehet az alábbi értékek egyike:

Érték Description
logical (alapértelmezett) A biztonsági mentési eszköz logikai eszköz
disk A biztonsági mentési eszköz a lemezmeghajtó
tape A biztonsági mentési eszköz egy szalagos meghajtó
url A biztonsági mentési eszköz egy URL

@backupdevicetype csak akkor használatos, ha @sync_method initialize_with_backup-re van állítva.

[ @backupdevicename = ] N'backupdevicename'

Megadja az eszköz nevét, amelyet az előfizető biztonsági mentésből való inicializáláskor használnak. @backupdevicenamenvarchar(1000), alapértelmezett értéke NULL.

[ @mediapassword = ] N'mediapassword'

Megadja a média jelszavát, ha jelszó a média formázásakor volt beállítva. @mediapassword a sysname, alapértelmezettként NULL.

Megjegyzés:

Ez a funkció az SQL Server egy későbbi verziójában lesz eltávolítva. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását.

[ @password = ] N'password'

Jelszót ad meg a biztonsági mentéshez, ha jelszó beállított a mentés létrehozásakor. @passworda sysname, alapértelmezés szerint NULLa .

[ @fileidhint = ] Fileidint

Azonosítja a visszaállítandó biztonsági halmaz egy ordinal értékét. @fileidhintint, alapértelmezés NULLszerint .

[ @unload = ] Rakodás

Megadja, hogy a szalag biztonsági mentési eszközt a visszainicializálás után kell kitölteni. @unloadbit, alapértelmezettként 1, ami előírja, hogy a szalagot le kell tölteni. @unload csak akkor használatos, ha @backupdevicetype .tape

[ @subscriptionlsn = ] előfizetéslsn

Megadja azt a napló-szekvenciaszámot (LSN), amelynél az előfizetésnek el kell kezdenie a változásokat egy csomópontba egy peer-to-peer tranzakciós replikációs topológiában. @subscriptionlsnbinary(10), alapértelmezett értéke NULL. Olyan @sync_type értékkel használják, initialize from lsn hogy minden releváns tranzakció replikáljon egy új csomópontba. További információért lásd: Peer-to-Peer - Transactional Replication.

[ @subscriptionstreams = ] előfizetéses folyamok

A terjesztési ügynökönként engedélyezett kapcsolatok száma, amely lehetővé teszi a módosítások kötegeinek egyidejű alkalmazását egy előfizetővel, miközben számos tranzakciós jellemző megmarad egyetlen szál használatakor. @subscriptionstreamstinyint, alapértelmezettként NULL. A -től 64 a -ig terjedő értéktartomány 1 is támogatott. Ez a paraméter nem támogatott nem SQL Server előfizetők, Oracle Publishers vagy peer-to-peer előfizetések esetén. Amikor @subscriptionstreams használatban van, további sorokat adnak a msreplication_subscriptions táblázatba (egy sor/stream) egy agent_id beállítással NULL.

Megjegyzés:

Az előfizetési streamek nem működnek a Transact-SQL-hez konfigurált cikkekhez. Előfizetési streamek használatához konfigurálja a cikkeket tárolt eljáráshívások továbbítására.

[ @subscriber_type = ] subscriber_type

A feliratkozó típusa. @subscriber_typeapróság, és lehet ezek közé az értékek.

Érték Description
0 (alapértelmezett) SQL Server Subscriber
1 ODBC adatforrás szerver
2 Microsoft Jet adatbázis
3 OLE DB-szolgáltató

[ @memory_optimized = ] memory_optimized

Jelzi, hogy az előfizetés támogatja a memóriaoptimalizált táblákat. @memory_optimizedbit, alapértelmezett 0 (hamis) értékkel. 1 (true) azt jelenti, hogy az előfizetés támogatja a memóriaoptimalizált táblákat.

Kódértékek visszaadása

0 (sikeres) vagy 1 (hiba).

Megjegyzések

sp_addsubscription Snapshot replikációban és tranzakciós replikációban használják.

Amikor sp_addsubscription a rendszertagalmi fix szerver szerepének egyik tagja hajtja végre push előfizetés létrehozására, a Distribution Agent feladatot implicit módon létrehozzák és az SQL Server Agent szolgáltatási fiók alatt futnak. Javasoljuk, hogy hajtsd végre sp_addpushsubscription_agent és határozd meg egy másik, ügynökspecifikus Windows fiók hitelesítési adatait és @job_login@job_passwordesetén. További információ: Replikációs ügynök biztonsági modellje.

sp_addsubscription megakadályozza az ODBC és OLE DB előfizetők hozzáférését olyan kiadványokhoz, amelyek:

  • A sp_addpublication hívásában az őslakos @sync_method alapján hozták létre.

  • Tartalmazzák azokat a cikkeket, amelyeket a sp_addarticle tárolt eljárással adtak hozzá, és amelynek @pre_creation_cmd paraméterértéke 3 (rövidítés).

  • Próbáld meg @update_mode beállítást .sync tran

  • Legyen egy cikk konfigurálása paraméterezett állítások használatára.

Ezen felül, ha egy kiadványnak a @allow_queued_tran opció true-ra van állítva (ami lehetővé teszi a változások sorát az előfizetőnél addig tartani, amíg a kiadónál be nem kerül), a cikk időbélyeg-oszlopa időbélyegként van kiírva, és az adott oszlop változásait az Előfizetőnek küldik. Az Előfizető generálja és frissíti az időbélyeg oszlop értékét. Egy ODBC vagy OLE DB előfizető esetén sp_addsubscription akkor nem számít, ha megpróbálnak feliratkozni egy olyan kiadébretre, amelynek @allow_queued_tran true-ra van állítva, és olyan cikkekre van beállítva, amelyen időbélyeggel ellátott oszlopok vannak.

Ha egy előfizetés nem használ DTS csomagot, akkor nem tud előfizetni olyan kiadadványra, amely @allow_transformable_subscriptions-re van állítva. Ha a kiadvány táblázatát mind DTS-re, mind nem DTS előfizetésre kell másolni, két külön kiadványt kell létrehozni: egyet minden előfizetéstípushoz.

Amikor kiválasztjuk a sync_typereplication support onlyopciókat, initialize with backup, vagy initialize from lsn, a naplóolvasó ügynöknek futtatása után sp_addsubscriptionfutnia kell, hogy a beállító szkriptek megírják a disztribúciós adatbázisba. A naplóolvasó ügynöknek olyan fiók alatt kell futnia, amely a sysadmin rögzített kiszolgálói szerepkör tagja. Ha a @sync_type opció be van állítva Automatic, nem szükséges speciális naplóolvasó ügynök műveletek.

Permissions

Csak a rendszergazdai rendszertainált fix szerver vagy db_owner fix adatbázis szerepének tagjai hajthatják végre a sp_addsubscriptionjátékot. Pull előfizetéseknél azok a felhasználók, akik bejelentkeznek a kiadvány hozzáférési listájába, végrehajthatják a .sp_addsubscription

Példák

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