Publikovat datová a databázová objekty

Platí pro: SQL Server Azure SQL Managed Instance

Při vytváření publikace zvolíte tabulky a další databázové objekty, které chcete publikovat. Pomocí replikace můžete publikovat následující databázové objekty.

Databázový objekt Replikace snímků a transakční replikace Slučovací replikace
Tables X X
Dělené tabulky X X
Uložené procedury – definice (Transact-SQL a CLR) X X
Uložené procedury – provádění (Transact-SQL a CLR) X no
Views X X
Indexovaná zobrazení X X
Indexovaná zobrazení jako tabulky X no
Uživatelem definované typy (CLR) X X
Uživatelsky definované funkce (Transact-SQL a CLR) X X
Datové typy aliasů X X
Fulltextové indexy X X
Objekty schématu (omezení, indexy, uživatelské triggery DML, rozšířené vlastnosti a kolace) X X

Vytváření publikací

Pro vytvoření publikace uveďte následující informace:

  • The Distributor.
  • Umístění souborů snímků.
  • Databáze publikací.
  • Typ publikace, která se má vytvořit (snímek, transakční, transakční s aktualizovatelnými odběry nebo slučovací).
  • Data a databázové objekty (články), které se mají zahrnout do publikace.
  • Statické filtry řádků a filtry sloupců pro všechny typy publikací a parametrizované filtry řádků a spojovací filtry pro slučovací publikace.
  • Plán Snapshot Agent.
  • Účty, pod kterými běží následující agenti: Snapshot Agent pro všechny publikace; Log Reader Agent pro všechny transakční publikace; Queue Reader Agent pro transakční publikace umožňující aktualizaci předplatného.
  • Název a popis publikace.

Pro informace o tom, jak pracovat s publikacemi, viz následující články:

Note

Smazání článku nebo publikace neodstraní objekty z odběratele.

Publikační tabulky

Nejčastěji publikovaný objekt je tabulka. Následující odkazy poskytují více informací o publikování tabulek:

Když publikujete tabulku pro replikaci, můžete určit, které objekty schématu zkopírovat do odběratele, například deklarovanou referenční integritu (omezení primárního klíče, referenční omezení, jedinečná omezení), indexy, uživatelské DML triggery (DDL triggery nelze replikovat), rozšířené vlastnosti a koleze. Rozšířené vlastnosti se replikují pouze v počáteční synchronizaci mezi vydavatelem a odběratelem. Pokud po počáteční synchronizaci přidáte nebo upravíte rozšířenou vlastnost, změna se nereplikuje.

Chcete-li zadat možnosti schématu, viz Určení možností schématu nebo SchemaOption.

Dělené tabulky a indexy

Replikace podporuje publikování rozdělených tabulek a indexů. Úroveň podpory závisí na typu replikace, kterou použijete, a na možnostech, které určujete pro publikaci a články spojené s rozdělenými tabulkami. Další informace naleznete v tématu Replikace dělených tabulek a indexů.

Publikování uložených procedur

Všechny typy replikace umožňují replikovat definice uložených procedur: CREATE PROCEDURE příkaz je zkopírován každému odběrateli. V případě uložených procedur CLR (Common Language Runtime) se také zkopíruje přidružené sestavení. Změny procedur jsou replikovány na Subscribers; změny v přidružených sestavách nikoliv.

Kromě replikace definice uložené procedury umožňuje transakční replikace replikovat provádění uložených procedur. Tato funkce je užitečná pro replikaci výsledků uložených procedur orientovaných na údržbu, které ovlivňují velké množství dat. Další informace naleznete v tématu Publikování provádění uložené procedury v transakční replikaci.

Publikování zobrazení

Všechny typy replikace umožňují replikovat zobrazení. Můžete zkopírovat zobrazení a jeho přidružený index (pokud jde o indexované zobrazení) na Odběratele, ale musíte také replikovat základní tabulku.

U indexovaných zobrazení umožňuje transakční replikace také replikovat indexované zobrazení jako tabulku, nikoli zobrazení, takže není nutné replikovat také základní tabulku. To provedete tak, že pro parametr @type procedury sp_addarticle (Transact-SQL) zadáte jednu z možností „indexed view logbased“. Další informace o použití sp_addarticle naleznete v tématu Definice článku.

Publikování uživatelsky definovaných funkcí

Příkazy CREATE FUNCTION pro funkce CLR a funkce Transact-SQL jsou zkopírovány ke každému odběrateli. V případě funkcí CLR se také zkopíruje přidružené sestavení. Změny funkcí jsou replikovány na Subscribers; změny v přidružených sestavách nikoliv.

Publikace uživatelsky definovaných typů a aliasových datových typů

Replikace zachází se sloupci, které používají uživatelem definované typy nebo aliasové datové typy, stejně jako s ostatními sloupci a replikuje je k odběratelům. Proces spustí CREATE TYPE příkaz pro každý replikovaný typ u odběratele před vytvořením tabulky. U uživatelsky definovaných typů replikace také kopíruje příslušnou sestavu ke každému Subscriberovi. Replikace nereplikuje změny uživatelem definovaných typů a alias datových typů na Subscribers.

Pokud definujete typ v databázi, ale při vytváření publikace na něj neodkazujete ve sloupcích, replikace typ nekopíruje do Subscribers. Pokud později vytvoříte sloupec tohoto typu v databázi a chcete jej replikovat, musíte nejprve ručně zkopírovat typ (a příslušnou sestavu uživatelsky definovaného typu) ke každému odběrateli.

Publikace fulltextových indexů

Příkaz CREATE FULLTEXT INDEX se zkopíruje do každého odběratele a celý textový index se vytvoří u odběratele. Změny provedené ve fulltextových indexech pomocí ALTER FULLTEXT INDEX se nereplikují.

Provádění změn schématu u publikovaných objektů

Replikace podporuje širokou škálu změn schématu publikovaných objektů. Když provedete jakoukoli z následujících změn schématu na příslušném publikovaném objektu v SQL Server Publisher, replikace tuto změnu ve výchozím nastavení propaguje na všechny SQL Server odběratele:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

Další informace naleznete v tématu provedení změn schématu v publikovaných databázích.

Úvahy při vydávání

Při publikování databázových objektů mějte na paměti následující faktory:

  • Uživatelé mohou přistupovat k databázi během vytváření publikace a počátečního snímku, je však nejlepší vytvářet publikace v době nižší aktivity na publikačním serveru.

  • Databázi nelze přejmenovat poté, co v ní vytvoříte publikaci. Pro přejmenování databáze musíte nejprve odstranit replikaci z databáze.

  • Pokud publikujete databázový objekt, který závisí na jednom nebo více dalších databázových objektech, musíte publikovat všechny odkazované objekty. Pokud například publikujete zobrazení, které závisí na tabulce, musíte tabulku publikovat také.

    Note

    Pokud přidáte článek do publikace pro sloučení a existující článek závisí na novém článku, musíte zadat pořadí zpracování pro oba články pomocí parametru @processing_ordersp_addmergearticle a sp_changemergearticle. Zvažte následující scénář: publikujete tabulku, ale nepublikujete funkci, na kterou tabulka odkazuje. Pokud funkci nezveřejníte, tabulka nebude vytvořena u odběratele. Při přidání funkce do publikace: zadejte hodnotu 1 pro @processing_order parametr sp_addmergearticle; a zadejte hodnotu 2 pro parametr @processing_ordersp_changemergearticle a zadejte název tabulky pro parametr @article. Toto pořadí zpracování zajišťuje, že funkci vytvoříte na straně odběratele dříve než tabulku, která na ní závisí. Pro každý článek můžete použít různá čísla, pokud je číslo funkce nižší než číslo tabulky.

  • Názvy publikací nesmí obsahovat následující znaky: % * [ ] | : " ? \ / <>.

Omezení při publikování objektů

  • Maximální počet článků a sloupků, které můžete publikovat, se liší podle typu publikace. Další informace najdete v části Replikační objekty v části Maximální specifikace kapacity pro SQL Server.

  • Nemůžete publikovat uložené procedury, pohledy, triggery a uživatelem definované funkce, které jsou definovány jako S ŠIFROVÁNÍM jako součást replikace SQL Server.

  • Můžete replikovat kolekce schémat XML, ale po pořízení počátečního snímku se změny již nereplikují.

  • Tabulky publikované pro transakční replikaci musí mít primární klíč. Pokud je tabulka v publikaci transakční replikace, nemůžete zakázat žádné indexy spojené s sloupci primárního klíče. Replikace vyžaduje tyto indexy. Chcete-li zakázat index, musíte nejprve odstranit tabulku z publikace.

  • Svázané výchozí hodnoty vytvořené pomocí sp_bindefault (Transact-SQL) se nereplikují (svázané výchozí hodnoty jsou zastaralé a nahrazují je výchozí hodnoty vytvořené pomocí klíčového slova DEFAULT příkazů ALTER TABLE nebo CREATE TABLE).

  • Funkce obsahující nápovědu NOEXPAND pro indexované pohledy nelze publikovat ve stejné publikaci jako tabulky a indexované pohledy, na které tyto funkce odkazují, a to kvůli pořadí, v jakém je agent distribuce doručuje. Chcete-li tento problém obejít, zahrňte vytvoření tabulky a indexovaného zobrazení do první publikace a do druhé publikace přidejte funkce obsahující hint NOEXPAND pro indexovaná zobrazení; tu publikujte až po dokončení první publikace. Nebo vytvořte skripty pro tyto funkce a předáte skript pomocí @post_snapshot_script parametru sp_addpublication.

Schémata a vlastnictví objektů

Replikace má v Průvodci pro novou publikaci následující standardní chování s ohledem na schémata a vlastnictví objektu:

  • Pro články v publikacích typu sloučení s úrovní kompatibility 90 nebo vyšší, snímkové publikace a transakční publikace mají ve výchozím nastavení stejný vlastník objektu u odběratele jako u odpovídajícího objektu u Publishera. Pokud schémata, která vlastní objekty neexistují u odběratele, vytvoří se automaticky.

  • U článků ve slučovacích publikacích s úrovní kompatibility nižší než 90: Ve výchozím nastavení je vlastník prázdný a je zadán jako dbo při vytváření objektu odběratele.

  • Pro články v publikacích Oracle: ve výchozím nastavení je vlastník zadán jako dbo.

  • Pro články v publikacích, které používají snímky režimu znaků (které jsou určeny pro předplatitele, které nejsou SQL Serverem, a pro předplatitele SQL Serveru Compact): Ve výchozím nastavení je vlastník prázdný. Vlastník je ve výchozím nastavení nastaven na vlastníka přidruženého k účtu používanému distribučním agentem nebo agentem pro sloučení k připojení k odběrateli.

Vlastníka objektu můžete změnit prostřednictvím dialogového okna Vlastnosti článku – <Článek> a pomocí následujících uložených procedur: sp_addarticle, sp_addmergearticle, sp_changearticle a sp_changemergearticle. Další informace naleznete v tématu Zobrazení a úprava vlastností publikace, definování článku a zobrazení a úprava vlastností článku.

Publikování dat odběratelům s předchozími verzemi SQL Server

  • Pokud publikujete na předplatitele s předchozí verzí SQL Server, jste omezeni na funkčnost této verze. Toto omezení platí jak pro funkce specifické pro replikaci, tak pro celkovou funkčnost produktu.

  • Publikace slučování používají úroveň kompatibility, která určuje, jaké funkce můžete v publikaci použít, a umožňuje podporovat odběratele, kteří používají starší verze SQL Serveru.

Publikační tabulky ve více než jedné publikaci

Replikace podporuje publikování článků ve více publikacích, včetně opětovného publikování dat, s následujícími omezeními:

  • Pokud publikujete článek jak v transakční publikaci, tak ve slučovací publikaci, nastavte pro slučovaný článek vlastnost @published_in_tran_pub na hodnotu TRUE. Další informace o nastavení vlastností naleznete v tématu Zobrazení a úprava vlastností publikace a zobrazení a úpravy vlastností článku.

    Nastavte vlastnost @published_in_tran_pub , pokud je článek součástí transakčního předplatného a je zahrnut v publikaci pro sloučení. Ve výchozím nastavení transakční replikace očekává, že tabulky u odběratele budou pouze pro čtení. Pokud replikace sloučením změní data v tabulce v transakčním předplatném, může dojít k nekonvergenci dat. Aby se tomuto problému předešlo, uveďte jakoukoli tabulku pouze ke stažení v publikaci sloučení. Toto nastavení zabraňuje předplatitelům sloučení nahrávat změny dat do tabulky. Další informace naleznete v tématu Optimalizace výkonu slučovací replikace pomocí článků pouze ke stažení.

  • Článek nemůžete publikovat současně v publikaci slučování i v transakční publikaci s odběry aktualizovanými ve frontě.

  • Nemůžete znovu publikovat články obsažené v transakčních publikacích, které podporují aktualizaci předplatného.

  • Pokud publikujete článek ve více než jednom transakčním publiku, které podporuje předplatná s aktualizací ve frontě, musí mít článek stejnou hodnotu pro následující vlastnosti napříč všemi publikacemi:

    Vlastnictví Parametr procedury sp_addarticle
    Správa rozsahu identifikátorů @auto_identity_range (zastaralé) a @identityrangemangementoption
    Rozsah identit vydavatele @pub_identity_range
    Rozsah identit @identity_range
    Prahová hodnota rozsahu identit @threshold

    Další informace o těchto parametrech najdete v tématu sp_addarticle (Transact-SQL).

  • Pokud publikujete článek ve více než jednom sloučení, musí mít článek stejnou hodnotu pro následující vlastnosti ve všech publikacích:

    Vlastnictví Parameter v sp_addmergearticle
    Sledování sloupců @column_tracking
    Možnosti schématu @schema_option
    Filtrování sloupců @vertical_partition
    Možnosti nahrání odběratele @subscriber_upload_options
    Sledování podmíněného odstranění @delete_tracking
    Kompenzace chyb @compensate_for_errors
    Správa rozsahu identifikátorů @auto_identity_range (zastaralé) a @identityrangemangementoption
    Rozsah identit vydavatele @pub_identity_range
    Rozsah identit @identity_range
    Prahová hodnota rozsahu identit @threshold
    Možnosti oddílu @partition_options
    Streamování sloupců typu blob @stream_blob_columns
    Typ filtru @filter_type (parametr v sp_addmergefilter)

    Další informace o těchto parametrech najdete v tématech sp_addmergearticle (Transact-SQL) a sp_addmergefilter (Transact-SQL).

  • Transakční replikace a nefiltrovaná slučovací replikace podporují publikování tabulky v několika publikacích a následný odběr v rámci jedné tabulky v odběrové databázi (běžně označováno jako scénář sloučení). Rollup se často používá k agregaci podmnožin dat z více míst v jedné tabulce u centrálního Subscribera. Filtrované publikace slučování nepodporují scénář centrálního odběratele. Pro replikaci při slučování je rollup obvykle implementován prostřednictvím jedné publikace s parametrizovanými řádkovými filtry. Další informace najdete v tématu Parametrizované filtry řádků.