Publikování dat a databázových objektů

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í

Chcete-li vytvořit publikaci, zadejte 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 se budou spouštět následující agenti: Snapshot Agent pro všechny publikace; agent Log Reader pro všechny transakční publikace; Agent čtenáře fronty pro transakční publikace, které umožňují aktualizaci odběrů.
  • Název a popis publikace.

Informace o tom, jak pracovat s publikacemi, najdete v následujících tématech:

Note

Odstranění článku nebo publikace neodstraní objekty u Odběratele.

Publikování tabulek

Nejčastěji publikovaný objekt je tabulka. Následující odkazy obsahují další informace o oblastech souvisejících s tabulkami publikování:

Při publikování tabulky pro replikaci můžete určit, které objekty schématu se mají zkopírovat do odběratele, například deklarovanou referenční integritu (omezení primárního klíče, referenční omezení, jedinečná omezení), indexy, triggery DML uživatele (triggery DDL nelze replikovat), rozšířené vlastnosti a kolaci. 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í dělených tabulek a indexů. Úroveň podpory závisí na použitém typu replikace a na možnostech, které zadáte pro publikaci, a na článcích přidružených k děleným tabulkám. 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: zkopíruje se CREATE PROCEDURE do každého odběratele. V případě uložených procedur CLR (Common Language Runtime) se také zkopíruje přidružené sestavení. Změny postupů se replikují odběratelům; změny přidružených sestavení nejsou.

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

Zobrazení publikování

Všechny typy replikace umožňují replikovat zobrazení. Zobrazení (a jeho doprovodný index, pokud se jedná o indexované zobrazení) lze zkopírovat do odběratele, ale základní tabulka se musí také replikovat.

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.

Publikace 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 odběratelům; změny přidružených sestavení nikoli.

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

Sloupce, které používají uživatelsky definované typy nebo aliasové datové typy, se replikují odběratelům stejně jako ostatní sloupce. Příkaz CREATE TYPE pro každý replikovaný typ se na straně odběratele spustí před vytvořením tabulky. V případě uživatelem definovaných typů se přidružené sestavení zkopíruje také ke každému odběrateli. Změny uživatelem definovaných typů a datových typů aliasů se do odběratelů nereplikují.

Pokud je typ definován v databázi, ale není odkazován v žádném sloupci při vytvoření publikace, typ se nezkopíruje do odběratele. Pokud následně vytvoříte sloupec tohoto typu v databázi a chcete ho replikovat, musíte nejprve ručně zkopírovat typ (a přidružené sestavení pro uživatelem definovaný typ) každému odběrateli.

Publikování 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ž u příslušného publikovaného objektu v SQL Server Publisher provedete některou z následujících změn schématu, tato změna se ve výchozím nastavení rozšíří pro všechny předplatitele SQL Server:

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

Důležité informace o publikování

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

  • Databáze je přístupná uživatelům během vytváření publikace a počátečního snímku, ale doporučuje se vytvářet publikace v době nižší aktivity na Publisher.

  • Po vytvoření publikace nelze databázi přejmenovat. Pokud ho chcete přejmenovat, musíte nejprve odebrat replikaci z databáze.

  • Pokud publikujete databázový objekt, který závisí na jednom nebo více jiný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 sloučené publikace a existující článek závisí na novém článku, musíte určit pořadí zpracování pro oba články pomocí @processing_orderparametru sp_addmergearticle a sp_changemergearticle. Představte si následující scénář: publikujete tabulku, ale nepublikujete funkci, na kterou tabulka odkazuje. Pokud funkci nepublikujete, nelze tabulku vytvořit 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í pro objekty publikování

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

  • Uložené procedury, zobrazení, triggery a uživatelem definované funkce, které jsou definovány jako WITH ENCRYPTION, nelze publikovat jako součást replikace SQL Server.

  • Kolekce schémat XML je možné replikovat, ale změny se po počátečním snímku 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 přidružené ke sloupcům primárního klíče. Tyto indexy jsou vyžadovány replikací. Chcete-li zakázat index, musíte nejprve odstranit tabulku z publikace.

  • Vázané výchozí hodnoty vytvořené pomocí sp_bindefault (Transact-SQL) se nereplikují (vázané výchozí hodnoty jsou zastaralé; místo nich se upřednostňují výchozí hodnoty vytvořené pomocí klíčového slova DEFAULTALTER TABLE nebo CREATE TABLE).

  • Funkce obsahující nápovědu NOEXPAND pro indexovaná zobrazení nelze publikovat ve stejné publikaci jako odkazované tabulky a indexovaná zobrazení, a to z důvodu pořadí, ve kterém je distribuční agent dodává. 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ík objektu lze změnit pomocí dialogového okna Vlastnosti článku – <Článek> a následující uložené procedury: 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 předplatiteli, na kterém běží předchozí verze SQL Server, omezujete se na funkce této verze, a to jak z hlediska funkcí specifických pro replikaci, tak i funkcí produktu jako celku.

  • Publikace slučování používají úroveň kompatibility, která určuje, jaké funkce lze v publikaci použít, a umožňuje podporu odběratelů používajících předchozí verze SQL Serveru.

Publikování tabulek ve více než jedné publikaci

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

  • Pokud je článek publikován v transakční publikaci a slučovací publikace, ujistěte se, že je vlastnost @published_in_tran_pub nastavena na HODNOTU TRUE pro slučovací článek. Další informace o nastavení vlastností naleznete v tématu Zobrazení a úprava vlastností publikace a zobrazení a úpravy vlastností článku.

    Vlastnost @published_in_tran_pub byste také měli nastavit, pokud je článek součástí transakčního předplatného a je součástí slučovací publikace. V takovém případě mějte na paměti, že ve výchozím nastavení transakční replikace očekává, že tabulky odběratele budou považovány za jen pro čtení; Pokud slučovací replikace provádí změny dat v tabulce v transakčním předplatném, může dojít k nekovergenci dat. Chcete-li se této možnosti vyhnout, doporučujeme každou takovou tabulku ve sloučené publikaci nastavit jako určenou pouze ke stažení. Tím zabráníte odběrateli slučování v odesílání změn dat do tabulky. Další informace naleznete v tématu Optimalizace výkonu slučovací replikace pomocí článků pouze ke stažení.

  • Článek nelze publikovat ani ve slučovací publikaci, ani v transakční publikaci s odběry s aktualizací ve frontě.

  • Články zahrnuté v transakčních publikacích, které podporují aktualizaci předplatných, nelze znovu publikovat.

  • Pokud je článek publikovaný ve více než jedné transakční publikaci, která podporuje aktualizace odběrů ve frontě, musí mít následující vlastnosti stejnou hodnotu článku ve všech publikacích:

    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 je článek publikován ve více než jedné slučovací publikaci, musí mít následující vlastnosti stejnou hodnotu článku 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 identit @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é vytvoření jejího odběru do jediné tabulky v odběratelské databázi (běžně označované jako scénář roll-up). Roll-up se často používá k agregaci podmnožin dat z více umístění do jedné tabulky na centrálním Odběrateli. Filtrované sloučené publikace nepodporují scénář centrálního odběratele. Pro slučovací replikaci se zahrnutí obvykle implementuje prostřednictvím jedné publikace s parametrizovanými filtry řádků. Další informace najdete v tématu Parametrizované filtry řádků.