Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Po inicializaci publikace nebo odběru sloučená replikace sleduje a vyčíslí všechny změny dat v publikovaných tabulkách. Změny se sledují prostřednictvím triggerů (které replikace vytvoří pro každou publikovanou tabulku) a systémových tabulek v databázích publikace a předplatného. Tyto systémové tabulky replikace jsou naplněny metadaty, které označují, které změny se mají rozšířit. Při spuštění agenta sloučení během synchronizace se změny vyčíslí agentem a podle potřeby se použijí na vydavatele a odběratele.
Sledování změn
Replikace metodou slučování používá ke sledování změn pro všechny publikované tabulky následující triggery a systémové tabulky:
-
MSmerge_ins_<GUID>: insert trigger (hodnota GUID pro tento trigger a ostatní triggery je odvozena zsysmergearticles) -
MSmerge_upd_<GUID>: aktualizační spouštěč -
MSmerge_del_<GUID>: odstranit spoušť MSmerge_contentsMSmerge_tombstoneMSmerge_genhistory
Sloučení replikace používá následující dodatečné systémové tabulky ke sledování změn ve filtrovaných tabulkách:
MSmerge_partition_groupsMSmerge_current_partition_mappingsMSmerge_past_partition_mappings
Poznámka:
Systémové tabulky uvedené jsou používány všemi sloučenými publikacemi a předplatnými v databázi; Pokud máte například v databázi publikace více než jednu publikaci, MSmerge_contents obsahuje řádky z článků ve všech publikacích.
Sledování změn pro nefiltrované tabulky
Systémové tabulky
Systémové tabulky používané pro nefiltrované a filtrované tabulky obsahují následující metadata:
MSmerge_contentsobsahuje jeden řádek pro každý řádek vložený nebo aktualizovaný v publikované tabulce v databázi.MSmerge_tombstoneobsahuje jeden řádek pro každý řádek odstraněný z publikované tabulky v databázi.MSmerge_genhistoryobsahuje 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í.
Proces sledování změn
Následující proces sledování změn se používá pro všechny nefiltrované tabulky:
Když v publikované tabulce dojde k vložení nebo aktualizaci,
MSmerge_ins_<GUID>neboMSmerge_upd_<GUID>se aktivuje a řádekMSmerge_contentsse vloží do systémové tabulky. SloupecrowguidMSmerge_contentsobsahuje identifikátor GUID pro vložený nebo aktualizovaný řádek, který označuje, že při příští synchronizaci se má ten samý vložený nebo aktualizovaný řádek v tabulce uživatele odeslat na vydavatele nebo odběratele. Pokud dojde k následným aktualizacím řádku v tabulce uživatele, řádek vMSmerge_contentsse aktualizuje, aby odrážel tento stav.Když v publikované tabulce dojde k odstranění, aktivuje se
MSmerge_del_<GUID>trigger a do systémové tabulky se vloží řádekMSmerge_tombstone. SloupecrowguidMSmerge_tombstoneobsahuje identifikátor GUID odstraněného řádku, který označuje, že při příští synchronizaci by se mělo odeslat odstranění vydavateli nebo odběratelům odpovídajícího odstraněného řádku v tabulce uživatele. Pokud se na odstraněný řádek odkazujeMSmerge_contents(protože byl vložen nebo aktualizován od poslední synchronizace), řádek se odstraní zMSmerge_contents.
Sledování změn pro filtrované tabulky
Systémové tabulky
Kromě systémových tabulek popsaných v předchozí části obsahují tři tabulky v databázi publikace metadata pro sledování změn filtrovaných tabulek:
MSmerge_partition_groupsobsahuje jeden řádek pro každý oddíl definovaný v publikaci. Oddíly můžou být:Definováno explicitně pomocí
sp_addmergepartitionnebo na stránce Datové oddíly dialogového okna Vlastnosti publikace.Vytvoří se automaticky, když odběratel synchronizuje, pokud odběratel vyžaduje oddíl, který ještě nemá položku v
MSmerge_partition_groups.
MSmerge_current_partition_mappingsobsahuje jeden řádek pro každou jedinečnou kombinaci řádků vMSmerge_contentsaMSmerge_partition_groups. Pokud například řádek v tabulce uživatele patří do dvou oddílů a řádek se aktualizuje, jeden řádek se vloží takMSmerge_contents, aby odrážel aktualizaci, a dva řádky se vloží doMSmerge_current_partition_mappings, což znamená, že aktualizovaný řádek patří do dvou oddílů.MSmerge_past_partition_mappingsobsahuje jeden řádek pro každý, který již nepatří do dané partice. Řádek se přesune mimo oddíl, pokud:Řádek se odstraní. Pokud je řádek odstraněn z tabulky uživatele, řádek se vloží do
MSmerge_tombstonea jeden nebo více řádků se vloží doMSmerge_past_partition_mappings.Hodnota ve sloupci použitém pro filtrování se změnila. Pokud je například parametrizovaný filtr založený na státě, ve kterém má společnost sídlo, a společnost se přesune, mohou se řádky společnosti (a související řádky v jiných tabulkách) přesunout z oddílu dat jednoho obchodního zástupce do oddílu jiného obchodního zástupce. Pokud je řádek aktualizován tak, že již nepatří do oddílu, řádek je vložen nebo aktualizován v
MSmerge_contentsa jeden nebo více řádků je vloženo doMSmerge_past_partition_mappings.
Poznámka:
Pokud se použijí nepřekryvné oddíly s jedním předplatným na oddíl (hodnota 3 pro parametr @partition_optionssp_addmergearticle), systémové tabulky MSmerge_current_partition_mappings a MSmerge_past_partition_mappings se nepoužívají ke sledování mapování oddílů řádků, protože každý řádek patří pouze do jednoho oddílu a může být změněn pouze u jednoho Odběratele.
Proces sledování změn
Dříve popsaný postup (v části Change Tracking pro nefiltrované tabulky) pro nefiltrované tabulky se používá také pro filtrované tabulky s následujícími dodatky:
Když dojde k vložení dat v publikované tabulce, kromě aktualizace nebo vložení dat do
MSmerge_contentsse pro každý oddíl, do kterého řádek patří, přidá mapování oddílu doMSmerge_current_partition_mappings.Když dojde k aktualizaci publikované tabulky, kromě aktualizace nebo vložení dat do
MSmerge_contents, přidá se mapování oddílů doMSmerge_current_partition_mappingspro každý oddíl, do kterého řádek patří, pokud takové mapování neexistuje. Pokud aktualizace způsobila přesun řádku z jednoho oddílu do druhého, řádek se aktualizujeMSmerge_current_partition_mappingsa druhý se přidá doMSmerge_past_partition_mappings.Když se v publikované tabulce provede odstranění, kromě vložení řádku do
MSmerge_tombstoneje řádek odstraněn zMSmerge_current_partition_mappingsa přidán doMSmerge_past_partition_mappings.
Změna výčtu
Systémové tabulky a procedury
Při spuštění agenta sloučení se změny vyčíslí pomocí několika systémových tabulek a uložených procedur:
MSmerge_genhistoryobsahuje 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í.sysmergesubscriptionsobsahuje informace o předplatných, včetně záznamu o posledních generacích změn, které uzel odeslal a přijal. V databázi publikace obsahuje tato tabulka řádek pro vydavatele a jeden řádek pro každého odběratele. V databázi předplatného tato tabulka obvykle obsahuje řádek pro odběratele a řádek pro Publisher.MSmerge_generation_partition_mappingsslouží pouze pro filtrované tabulky a zaznamenává, zda daná generace obsahuje jakékoli změny relevantní pro daný oddíl. Tato tabulka v databázi publikace obsahuje jeden řádek pro každou jedinečnou kombinaci řádků vMSmerge_genhistoryaMSmerge_partition_groups.sp_MSmakegenerationzavře všechny otevřené generace na začátku procesu enumerace.sp_MSenumchangesvyjmenovává změny pro tabulky (několik souvisejících postupů, které mají názvy začínajícísp_MSenumchanges, je také používáno v tomto procesu).sp_MSgetmetadataurčuje, zda má být změna z jednoho uzlu použita na jiném uzlu jako vložení, aktualizace nebo odstranění.
Proces výčtu změn
Během výčtu změn dochází k následujícímu procesu:
Systémová procedura
sp_MSmakegenerationse nazývá:U nefiltrovaných a filtrovaných tabulek tento postup zavře všechny otevřené generace, na
MSmerge_genhistorykteré odkazuje (uzavřené generace mají hodnotu1nebo2ve sloupcigenstatus).U filtrovaných tabulek tento postup naplní systémovou tabulku
MSmerge_generation_partition_mappings. Pokud generace obsahuje jednu nebo více změn relevantních pro oddíl, je do systémové tabulky vložen řádek. Pokud generování neobsahuje žádné změny relevantní pro daný oddíl, řádek se nevloží doMSmerge_generation_partition_mappingsa změny se nevyčtou pro žádné odběratele, kteří tento oddíl obdrží.
Volá se uložená procedura
sp_MSenumchangesa související procedury. Tyto postupy popisují změny, ke kterým došlo od poslední synchronizace:Postupy nejprve určují generování, při kterém se spustí výčet, na základě sloupců
sentgen(poslední generace odesláno) arecgen(poslední generace přijato) v tabulcesysmergesubscriptions.Například při určování, které změny v generacích musí být vyjmenovány pro daného odběratele, se porovnává
sentgenpro odběratele (uložené v databázi publikace) arecgenpro odběratele (uložené v databázi odběru). Pokud jsou hodnoty stejné (což značí, že poslední generace odeslaná z Publisheru byla úspěšně přijata odběratelem), změny se zobrazí od další generace vMSmerge_genhistory. Pokud hodnoty nejsou stejné, použije se nižší ze dvou hodnot k zajištění odesílání všech požadovaných změn.Postupy pak vytvoří výčet změn:
U nefiltrovaných tabulek jsou všechny změny obsažené v generacích po generaci
sentgenneborecgenvyjmenovány:MSmerge_genhistoryje připojeno kMSmerge_contentsaMSmerge_tombstonek určení, které změny musí být odeslány.U filtrovaných tabulek je
MSmerge_generation_partition_mappingspřipojen k:MSmerge_current_partition_mappingsaMSmerge_contents, a zároveň kMSmerge_past_partition_mappingsaMSmerge_tombstonepro určení, které změny jsou relevantní pro oddíl, který odběratel obdrží.
Uložená procedura
sp_MSgetmetadataje volána k určení, zda se má změna použít jako vložení, aktualizace nebo odstranění. V tomto okamžiku se provádí detekce konfliktů a řešení; Další informace naleznete v tématu Jak slučovací replikace detekuje a řeší konflikty.
Související obsah
- Slučovací replikace
- MSmerge_contents (Transact-SQL)
- MSmerge_current_partition_mappings
- MSmerge_generation_partition_mappings (Transact-SQL)
- MSmerge_genhistory (Transact-SQL)
- MSmerge_partition_groups (Transact-SQL)
- MSmerge_past_partition_mappings (Transact-SQL)
- MSmerge_tombstone (Transact-SQL)
- sys.sp_addmergearticle (Transact-SQL)
- sys.sp_addmergepartition (Transact-SQL)
- sysmergearticles (Transact-SQL)
- sysmergesubscriptions (Transact-SQL)
- Spojovací filtry
- Parametrizované filtry – filtry parametrizovaných řádků