Jak slučovací replikace inicializuje publikace a předplatná

Slučovací replikace musí inicializovat vydavatele i odběratele, aby mezi nimi mohly přetékat data. Tento článek obsahuje informace o krocích, ke kterým dochází během inicializace.

Inicializujte publikaci

Následující seznam podrobně popisuje kroky inicializace publikace, ke kterým dochází při provádění každé uložené procedury uvedené nebo po dokončení Průvodce novou publikací. Další inicializace je provedena po prvním spuštění agenta snímků pro publikaci.

  • sp_replicationdboption

    • Databáze publikace je označena pro replikaci. Databázi nejde odstranit, pokud se neodebere replikace.

    • Systémové tabulky se přidají do databáze publikace (pokud již v databázi neexistuje sloučená publikace). Úplný seznam systémových tabulek najdete v části Systémové tabulky vytvořené v databázích publikace a odběrů v tomto článku.

  • sp_addmergepublication

    • Položky publikace jsou přidávány do systémových tabulek.
  • sp_addpublication_snapshot

    • Do systému agenta SQL Serveru se přidá úloha Snapshot Agenta. Název úlohy je ve formuláři <Publisher>-<PublicationDatabase>-<Publication>-<Integer>.
  • sp_addmergearticle

    • Každý replikovaný objekt je označen pro replikaci. Objekt nelze odstranit, pokud se odpovídající článek neodstraní ze všech publikací.

    • Položky pro každý článek se přidají do systémových tabulek.

Zbývající část inicializace pro databázi publikace probíhá během počátečního spuštění Agentu Snímků pro publikaci. Databáze publikace se během následných spuštění agenta snímků znovu neinicializuje. Pokud použijete Průvodce vytvořením nové publikace, po dokončení průvodce se ve výchozím nastavení vytvoří počáteční snímek. Pokud používáte uložené procedury, musíte spustit úlohu agenta nebo spustit přímo agenta. Další informace o spouštění agentů naleznete v tématu Spuštění a zastavení agenta replikace (SQL Server Management Studio) a koncepty spustitelných souborů agenta replikace.

Při prvním spuštění snímkového agenta pro publikaci:

  • Sloupec pojmenovaný rowguid se přidá do každé publikované tabulky, pokud tabulka již neobsahuje sloupec datového typu uniqueidentifier se sadou vlastností ROWGUIDCOL (v takovém případě se tento sloupec používá). Sloupec rowguid slouží k jedinečné identifikaci každého řádku v každé publikované tabulce. Pokud je tabulka vyřazena z publikace, rowguid sloupec se odebere. Pokud byl ke sledování použit existující sloupec, sloupec se neodebere.

  • Následující objekty jsou vytvořeny v databázi publikace pro každou publikovanou tabulku (všechny objekty jsou vytvořeny ve schématu dbo ):

    • Do publikovaných tabulek se přidají spouště pro vložení, aktualizaci a odstranění, aby bylo možné sledovat změny. Aktivační události jsou pojmenovány ve formuláři MSmerge_ins_<GUID>, MSmerge_upd_<GUID>a MSmerge_del_<GUID>. Hodnota GUID je odvozena od položky pro článek v systémové tabulce sysmergearticles.

    • Uložené procedury se vytvářejí pro zpracování vložení, aktualizací a odstranění publikovaných tabulek a provádění několika dalších operací souvisejících s replikací.

    • Zobrazení se vytvářejí pro správu vkládání, aktualizací, odstraňování a filtrování.

    • Konfliktní tabulky se vytvoří pro ukládání informací o konfliktech. Konfliktní tabulky odpovídají schématu publikovaných tabulek: každá publikovaná tabulka se skriptuje a pak se skript použije k vytvoření konfliktní tabulky v databázi publikace. Konfliktní tabulky jsou pojmenovány ve formuláři dbo.MSmerge_conflict_<Publication>_<Article>.

Při každém spuštění agenta snímků se pro každý článek v databázi publikace vytvoří následující typy souborů (s odpovídajícími příponami souborů):

  • Schéma (.sch)

  • Omezení a indexy (.dri)

  • Spouštěče (.trg)

  • Data systémových tabulek (.sys)

  • Konfliktní tabulky (.cft)

  • Data (.bcp): nejsou vytvořena pro publikace s parametrizovanými filtry.

    Pokud publikace nepoužívá žádné parametrizované filtry, snímek obsahuje data publikovaných .bcp tabulek v sadě souborů. Pokud publikace používá parametrizované filtry (což je typické pro slučovací publikace), počáteční snímek neobsahuje žádná data. Data se poskytují pomocí snímku pro oddíl odběratele, který je popsán v další části.

Inicializace předplatného

Každé předplatné se inicializuje, když se spustí agent sloučení předplatného a zkopíruje počáteční snímek do databáze předplatného. Kromě schématu a dat z replikovaných objektů snímek obsahuje systémové tabulky, zobrazení, triggery a uložené procedury, které existují v databázi publikace. Do databáze předplatného se zkopírují také jedna nebo dvě další systémové tabulky. Úplný seznam systémových tabulek najdete v části Systémové tabulky vytvořené v databázích publikace a odběrů v tomto článku. Pokud se předplatné znovu inicializuje, přepíšou se všechny replikované objekty a systémové objekty replikace.

Pokud žádná z tabulek v databázi publikace nepoužívá parametrizované filtry, zkopíruje se do každého odběratele stejný snímek publikace. Pokud se použije jeden nebo více parametrizovaných filtrů, řídí se způsob inicializace každého předplatného následující logikou:

  • Pokud je umístění snímku k dispozici agentu sloučení na příkazovém řádku:

    • Použijte snímek z tohoto umístění.
  • Jinak, pokud byl snímek předgenerovaný:

    • Načtěte umístění snímku z MSmerge_dynamic_snapshots databáze publikace a použijte snímek z tohoto umístění.
  • Jinak pokud publikace umožňuje odběratelům vytvářet snímky:

    • Pokud už byl snímek vygenerován pro jiného odběratele se stejným oddílem, použijte ho u odběratele.

    • Jinak vygenerujte a použijte snímek pro odběratele.

  • Jinak inicializujte Subscriber pomocí příkazů SELECT vůči tabulkám v publikaci. Tento přístup je pomalejší než použití snímku pro oddíl odběratele.

Pokud se přenos snímku v libovolném okamžiku přeruší, automaticky se obnoví a neodejde znovu odeslat žádné soubory, které už byly zcela přeneseny. Jednotka doručení pro agenta snímků je soubor bcp pro každý článek publikace, takže soubory, které jsou částečně doručeny, musí být zcela znovu doručeny. Obnovení snímku ale může výrazně snížit objem přenášených dat a zajistit včasné doručování snímků i v případě, že připojení není spolehlivé. Další informace o vytváření snímků naleznete v tématu Parametrizované filtry – parametrizované filtry řádků.

Umístění snímku

Umístění snímku závisí na cestě určené pro výchozí nebo alternativní umístění snímku; zda publikace používá pro složku snímku cestu UNC nebo sdílenou složku FTP; a zda publikace používá parametrizované filtry. V těchto příkladech předpokládejme, že umístění složky snímku je: \\<MyComputer>\<MyFolder>

  • Pokud publikace používá UNC, první část cesty je: \\<MyComputer>\<MyFolder>\unc\. Pokud používá FTP, \\<MyComputer>\<MyFolder>\ftp\ je.

  • Pokud publikace používá UNC a nepoužívá parametrizované filtry, cesta je\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>

  • Pokud publikace používá UNC a používá parametrizované filtry, umístění je založeno na cestě ke složce snímku a parametrizovaných kritérií filtrování řádků pro publikaci. Pokud je například článek filtrován pomocí HOST_NAME() funkce a hodnota HOST_NAME() oddílu je SalesLaptop, cesta k snímku pro tento oddíl je \\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12, kde 12 je ID používané interně pro oddíl.

Systémové tabulky vytvořené v databázích publikace a odběratelských databázích

V databázi publikace a každé databázi odběru se vytvoří následující tabulky.

Tabulka Popis
MSdynamicsnapshotjobs Obsahuje informace o úlohách snímků pro publikace s parametrizovanými filtry.
MSdynamicsnapshotviews Sleduje všechna dočasná zobrazení snímků vytvořená agentem snímků. Systém ho používá k čištění zobrazení v případě neobvyklého vypnutí agenta SQL Serveru nebo agenta snímku.
MSmerge_altsyncpartners Sleduje přiřazení aktuálních synchronizačních partnerů pro Publisher.
MSmerge_articlehistory Sleduje změny provedené v článcích během synchronizace agenta sloučení, přičemž pro každý článek, ve kterém došlo ke změnám, je vytvořen jeden řádek.
MSmerge_conflicts_info Sleduje konflikty, ke kterým dochází při synchronizaci odběru na slučovací publikaci.
MSmerge_contents Obsahuje jeden řádek pro každý řádek upravený v aktuální databázi od jeho publikování. Tato tabulka je používána procesem sloučení k určení řádků, které se změnily.
MSmerge_current_partition_mappings Obsahuje jeden řádek pro každou partici, do které daný změněný řádek patří.
MSmerge_dynamic_snapshots Sleduje umístění snímku pro každý oddíl definovaný pro sloučenou publikaci.
MSmerge_errorlineage Obsahuje řádky, které byly odstraněny u odběratele, ale jejichž odstranění není přenášeno k vydavateli.
MSmerge_generation_partition_mappings Sleduje, jestli dané generování obsahuje jakékoli změny relevantní pro daný oddíl.
MSmerge_genhistory Obsahuje jeden řádek pro každou generaci. Generace je soubor změn, které se odesílají vydavateli nebo odběrateli. Generace jsou uzavřeny při každém spuštění agenta sloučení; následné změny v databázi se přidají do jedné nebo více otevřených generací.
MSmerge_history Obsahuje řádky historie s podrobnými popisy výsledků předchozích relací Merge Agent úloh.
MSmerge_identity_range Sleduje číselné rozsahy přiřazené sloupcům identit pro předplatná publikacím, pro které replikace automaticky spravuje přiřazení rozsahů.
MSmerge_metadataaction_request Obsahuje jeden řádek pro každou kompenzační akci, která je nutná. Kompenzační akce se používá k vrácení změny v jednom uzlu, pokud se změna nezdařila v jiném uzlu.
MSmerge_partition_groups Obsahuje jeden řádek pro každý předpočítaný oddíl v dané databázi.
MSmerge_past_partition_mappings Obsahuje jeden řádek pro každý oddíl, ke kterému změněný řádek dříve patřil, ale už nepatří.
MSmerge_replinfo Obsahuje jeden řádek pro každé předplatné. Tato tabulka sleduje interní informace o odeslaných a přijatých generacích.
MSmerge_sessions Obsahuje řádky historie s výsledky předchozích relací úloh služby agenta sloučení.
MSmerge_settingshistory Obsahuje historii změn provedených ve vlastnostech článku a publikace s jedním řádkem pro každou provedenou změnu.
MSmerge_tombstone Obsahuje informace o odstraněných řádcích a umožňuje šíření odstranění jiným odběratelům.
MSrepl_errors Obsahuje podrobné informace o všech selháních agenta.
sysmergearticles Obsahuje jeden řádek pro každý sloučený článek.
sysmergepartitioninfo Obsahuje informace o oddílech pro každý článek s jedním řádkem pro každý článek.
sysmergepartitioninfoview Obsahuje informace o dělení článků tabulky.
sysmergepublications Obsahuje jeden řádek pro každou sloučenou publikaci.
sysmergeschemaarticles Sleduje články pouze se schématy, jako jsou uložené procedury.
sysmergeschemachange Obsahuje informace o publikovaných článcích generovaných agentem snímků.
Sysmergesubscriptions Obsahuje jeden řádek pro každého odběratele.
SysMergeSubsetFilters Obsahuje informace o joinovacím filtru pro rozdělené články.

Kromě toho se MSsnapshotdeliveryprogress tabulka vytvoří v každé databázi předplatného a MSsubscription_properties tabulka se vytvoří v každé databázi předplatného, která používá pull odběr.

Tabulka Popis
MSsnapshotdeliveryprogress Sleduje soubory, které byly úspěšně doručeny odběrateli při použití snímku. Tato data slouží k obnovení doručování souborů v případě, že agent sloučení nedoručí všechny soubory během relace.
MSsubscription_properties Obsahuje informace o parametrech potřebné ke spuštění agentů replikace u odběratele.