Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
När en publikation eller prenumeration har initierats, spårar och räknar sammanslagsreplikeringen upp alla ändringar i data i publicerade tabeller. Ändringar spåras via utlösare (som replikering skapar för varje publicerad tabell) och systemtabeller i publikations- och prenumerationsdatabaserna. Dessa replikeringssystemtabeller fylls med metadata som anger vilka ändringar som ska spridas. När sammanslagningsagenten körs under synkroniseringen räknas ändringarna upp av agenten och tillämpas sedan på utgivaren och prenumeranten efter behov.
Spårning av ändringar
Sammanslagningsreplikering använder följande utlösare och systemtabeller för att spåra ändringar för alla publicerade tabeller:
-
MSmerge_ins_<GUID>: insert trigger (GUID-värdet för den här utlösaren och de andra utlösarna härleds frånsysmergearticles) -
MSmerge_upd_<GUID>: uppdateringsutlösare -
MSmerge_del_<GUID>: ta bort utlösare MSmerge_contentsMSmerge_tombstoneMSmerge_genhistory
Sammanslagningsreplikering använder följande extra systemtabeller för att spåra ändringar för filtrerade tabeller:
MSmerge_partition_groupsMSmerge_current_partition_mappingsMSmerge_past_partition_mappings
Anmärkning
De systemtabeller som anges används av alla sammanslagningspublikationer och prenumerationer i en databas. Om du till exempel har fler än en publikation i en publikationsdatabas, MSmerge_contents innehåller rader från artiklar i alla publikationer.
Ändringsspårning för ofiltrerade tabeller
Systemtabeller
Systemtabellerna som används för ofiltrerade och filtrerade tabeller innehåller följande metadata:
MSmerge_contentsinnehåller en rad för varje rad som infogas eller uppdateras i en publicerad tabell i databasen.MSmerge_tombstoneinnehåller en rad för varje rad som tas bort från en publicerad tabell i databasen.MSmerge_genhistoryinnehåller en rad för varje generation. En generation är en samling ändringar som levereras till en utgivare eller prenumerant. Generationer stängs varje gång sammanslagningsagenten körs. efterföljande ändringar i en databas läggs till i en eller flera öppna generationer.
Ändringsspårningsprocess
Följande ändringsspårningsprocess används för alla ofiltrerade tabeller:
När en infogning eller uppdatering sker i en publicerad tabell, utlöses
MSmerge_ins_<GUID>ellerMSmerge_upd_<GUID>och en rad infogas i systemtabellenMSmerge_contents. KolumnenrowguidMSmerge_contentsinnehåller GUID för den infogade eller uppdaterade raden, vilket indikerar att nästa gång synkroniseringen sker ska motsvarande infogade eller uppdaterade rad i användartabellen skickas till utgivaren eller prenumeranterna. Om efterföljande uppdateringar inträffar på en rad i en användartabell uppdateras raden iMSmerge_contentsför att återspegla det här tillståndet.När en borttagning sker i en publicerad tabell utlöses utlösaren
MSmerge_del_<GUID>och en rad infogas i systemtabellenMSmerge_tombstone. KolumnenrowguidMSmerge_tombstoneinnehåller GUID för den borttagna raden, vilket anger att nästa gång synkroniseringen sker ska en borttagning skickas till utgivaren eller prenumeranterna för motsvarande borttagna rad i användartabellen. Om den borttagna raden refereras till iMSmerge_contents(eftersom den har infogats eller uppdaterats sedan den senaste synkroniseringen) tas raden bort frånMSmerge_contents.
Ändringsspårning för filtrerade tabeller
Systemtabeller
Förutom de systemtabeller som beskrivs i föregående avsnitt innehåller tre tabeller i publikationsdatabasen metadata för att spåra ändringar i filtrerade tabeller:
MSmerge_partition_groupsinnehåller en rad för varje partition som definieras i en publikation. Partitioner kan vara:Definieras explicit med hjälp av
sp_addmergepartitioneller sidan Datapartitioner i dialogrutan Publikationsegenskaper .Skapas automatiskt när en prenumerant synkroniseras om prenumeranten kräver en partition som ännu inte har en post i
MSmerge_partition_groups.
MSmerge_current_partition_mappingsinnehåller en rad för varje unik kombination av rader iMSmerge_contentsochMSmerge_partition_groups. Om till exempel en rad i en användartabell tillhör två partitioner och raden uppdateras infogas en rad iMSmerge_contentsför att återspegla uppdateringen och två rader infogas iMSmerge_current_partition_mappingsför att indikera att den uppdaterade raden tillhör de två partitionerna.MSmerge_past_partition_mappingsinnehåller en rad för varje rad som inte längre hör hemma i en viss partition. En rad flyttas från en partition om:Raden tas bort. Om en rad tas bort från en användartabell infogas en rad i
MSmerge_tombstoneoch en eller flera rader infogas iMSmerge_past_partition_mappings.Värdet i en kolumn som används för filtrering har ändrats. Om till exempel ett parameteriserat filter baseras på tillståndet där ett företag har sitt huvudkontor och företaget flyttas, kan raden för företaget (och relaterade rader i andra tabeller) flytta ut från en säljares partition av data till partitionen för en annan säljare. Om en rad uppdateras så att den inte längre hör hemma i en partition infogas eller uppdateras en rad i
MSmerge_contentsoch en eller flera rader infogas iMSmerge_past_partition_mappings.
Anmärkning
Om icke-överlappande partitioner med en prenumeration per partition (värdet 3 för för parametern @partition_optionssp_addmergearticle) används, används systemtabellerna MSmerge_current_partition_mappings och MSmerge_past_partition_mappings används inte för att spåra radernas partitionsmappningar, eftersom varje rad bara tillhör en partition och bara kan ändras med en prenumerant.
Ändringsspårningsprocess
Processen som beskrevs tidigare (i avsnittet Ändringsspårning för ofiltrerade tabeller) för ofiltrerade tabeller används också för filtrerade tabeller, med följande tillägg:
När en infogning sker i en publicerad tabell läggs en partitionsmappning, förutom att data uppdateras eller infogas i
MSmerge_contents, tillMSmerge_current_partition_mappingsför varje partition som raden tillhör.När en uppdatering sker i en publicerad tabell, förutom att data uppdateras eller infogas i
MSmerge_contents, läggs en partitionsmappning till iMSmerge_current_partition_mappingsom det inte finns någon partitionsmappning för varje partition som raden tillhör. Om uppdateringen resulterade i att en rad flyttades från en partition till en annan, uppdateras en rad iMSmerge_current_partition_mappingsoch en läggs till iMSmerge_past_partition_mappings.När en borttagning sker i en publicerad tabell, förutom att en rad infogas i
MSmerge_tombstone, tas en rad bort frånMSmerge_current_partition_mappingsoch en läggs tillMSmerge_past_partition_mappingsi .
Ändra uppräkning
Systemtabeller och procedurer
När sammanslagningsagenten körs räknas ändringarna upp med hjälp av flera systemtabeller och lagrade procedurer:
MSmerge_genhistoryinnehåller en rad för varje generation. En generation är en samling ändringar som levereras till en utgivare eller prenumerant. Generationer stängs varje gång sammanslagningsagenten körs. efterföljande ändringar i en databas läggs till i en eller flera öppna generationer.sysmergesubscriptionsinnehåller information om prenumerationer, inklusive en registrering av de senaste generationerna av ändringar som en nod har skickat och tagit emot. I publikationsdatabasen innehåller den här tabellen en rad för Publisher och en rad för varje Prenumerant. I en prenumerationsdatabas innehåller den här tabellen vanligtvis en rad för Prenumeranten och en rad för Utgivaren.MSmerge_generation_partition_mappingsanvänds endast för filtrerade tabeller och registrerar om en viss generation innehåller ändringar som är relevanta för en viss partition. Den här tabellen i publikationsdatabasen innehåller en rad för varje unik kombination av rader iMSmerge_genhistoryochMSmerge_partition_groups.sp_MSmakegenerationstänger alla öppna generationer i början av uppräkningsprocessen.sp_MSenumchangesräknar upp ändringar för tabeller (flera relaterade procedurer som har namn som börjar medsp_MSenumchangesanvänds också i den här processen).sp_MSgetmetadataavgör om en ändring från en nod ska tillämpas på en annan nod som en infogning, uppdatering eller borttagning.
Ändra uppräkningsprocess
Följande process inträffar under ändringsuppräkning:
Systemproceduren
sp_MSmakegenerationkallas:För ofiltrerade och filtrerade tabeller stänger den här proceduren alla öppna generationer som refereras i
MSmerge_genhistory(stängda generationer har värdet1eller2i kolumnengenstatus).För filtrerade tabeller fyller den här proceduren i systemtabellen
MSmerge_generation_partition_mappings. Om en generation innehåller en eller flera ändringar som är relevanta för en partition infogas en rad i systemtabellen. Om en generation inte innehåller några ändringar som är relevanta för en viss partition infogas inte en rad iMSmerge_generation_partition_mappingsoch ändringarna räknas inte upp för prenumeranter som tar emot partitionen.
Den lagrade proceduren
sp_MSenumchangesoch relaterade procedurer anropas. De här procedurerna räknar upp de ändringar som har inträffat sedan synkroniseringen senast inträffade:Procedurerna bestämmer först den generation där uppräkningen startar, baserat på kolumnerna
sentgen(senaste generationen skickades) ochrecgen(senaste generationen togs emot) i tabellensysmergesubscriptions.När du till exempel fastställer vilka generationers ändringar som måste räknas upp för en viss Prenumerant jämförs
sentgenför prenumeranten (lagras i publikationsdatabasen) ochrecgenför Prenumeranten (lagras i prenumerationsdatabasen). Om värdena är desamma (vilket anger att den senaste generationen som skickades från utgivaren togs emot av prenumeranten) räknas ändringarna upp från och med nästa generation iMSmerge_genhistory. Om värdena inte är desamma används det lägre av de två värdena för att säkerställa att alla nödvändiga ändringar skickas.Procedurerna räknar sedan upp ändringar:
För ofiltrerade tabeller är alla ändringar som finns i generationer efter genereringen i
sentgenellerrecgenuppräknade:MSmerge_genhistoryanslutna tillMSmerge_contentsochMSmerge_tombstoneför att avgöra vilka ändringar som måste skickas.För filtrerade tabeller har
MSmerge_generation_partition_mappingsanslutits till:MSmerge_current_partition_mappingsochMSmerge_contents; ochMSmerge_past_partition_mappingsochMSmerge_tombstoneför att avgöra vilka ändringar som är relevanta för den partition som prenumeranten tar emot.
Den lagrade proceduren
sp_MSgetmetadataanropas för att avgöra om en ändring ska tillämpas som en infogning, uppdatering eller borttagning. Nu utförs konfliktidentifiering och lösning. Mer information finns i Så här identifierar och löser sammanslagningsreplikering konflikter.
Relaterat innehåll
- Sammanslagen replikering
- 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)
- sp_addmergearticle (Transact-SQL)
- sp_addmergepartition (Transact-SQL)
- sysmergearticles (Transact-SQL)
- sysmergesubscriptions (Transact-SQL)
- Sammanfoga filter
- Parameteriserade filter – Parameteriserade radfilter