Dela via


Hur sammanslagningsreplikering initierar publikationer och prenumerationer

Sammanslagningsreplikering måste initiera både Utgivaren och Prenumeranten innan data kan flöda mellan dem. Den här artikeln innehåller information om de steg som inträffar under initieringen.

Initiera publikationen

Följande lista beskriver initieringsstegen för en publikation, som inträffar när du kör varje lagrad procedur som anges eller när du har slutfört guiden Ny publikation. Ytterligare initiering sker efter att Snapshot-agenten körs för första gången för en publikation.

  • sp_replicationdboption

    • Publikationsdatabasen är markerad för replikering. Det går inte att ta bort databasen om inte replikeringen tas bort.

    • Systemtabeller läggs till i publikationsdatabasen (om det inte redan finns en sammanslagningspublikation i databasen). En fullständig lista över systemtabeller finns i avsnittet "Systemtabeller som skapats i publikations- och prenumerationsdatabaserna" i den här artikeln.

  • sp_addmergepublication

    • Poster för publikationen läggs till i systemtabellerna.
  • sp_addpublication_snapshot

    • Ett Snapshot Agent-jobb läggs till i SQL Server Agent-systemet. Jobbnamnet är i formuläret <Publisher>-<PublicationDatabase>-<Publication>-<Integer>.
  • sp_addmergearticle

    • Varje replikerat objekt har markerats för replikering. Det går inte att ta bort objektet om inte motsvarande artikel tas bort från alla publikationer.

    • Poster för varje artikel läggs till i systemtabellerna.

Resten av initieringen för publikationsdatabasen sker under den första körningen av Ögonblicksbildsagenten för en publikation. Publikationsdatabasen återinitieras inte under efterföljande körningar av ögonblicksbildsagenten. Om du använder guiden Ny publikation skapas den första ögonblicksbilden som standard när du har slutfört guiden. Om du använder lagrade procedurer måste du köra agentjobbet eller starta agenten direkt. Mer information om hur du kör agenter finns i Starta och stoppa en replikeringsagent (SQL Server Management Studio) och Körbara replikeringsagentbegrepp.

Första gången ögonblicksbildsagenten för en publikation körs:

  • En kolumn med namnet rowguid läggs till i varje publicerad tabell, såvida inte tabellen redan har en kolumn av datatypen uniqueidentifier med egenskapsuppsättningen ROWGUIDCOL (i vilket fall den här kolumnen används). Kolumnen rowguid används för att unikt identifiera varje rad i varje publicerad tabell. Om tabellen tas bort från publikationen rowguid tas kolumnen bort. Om en befintlig kolumn användes för spårning tas inte kolumnen bort.

  • Följande objekt skapas i publikationsdatabasen för varje publicerad tabell (alla objekt skapas i dbo schemat):

    • Infogningsutlösare, uppdateringsutlösare och borttagningsutlösare läggs till i publicerade tabeller för att spåra ändringar. Utlösarna namnges i formuläret MSmerge_ins_<GUID>, MSmerge_upd_<GUID>och MSmerge_del_<GUID>. GUID-värdet härleds från posten för artikeln i systemtabellen sysmergearticles.

    • Lagrade procedurer skapas för att hantera infogningar, uppdateringar och borttagningar i publicerade tabeller och för att utföra flera andra replikeringsrelaterade åtgärder.

    • Vyer skapas för att hantera infogningar, uppdateringar, borttagningar och filtrering.

    • Konflikttabeller skapas för att lagra konfliktinformation. Konflikttabellerna matchar schemat för de publicerade tabellerna: varje publicerad tabell är skriptad och sedan används skriptet för att skapa konflikttabellen i publikationsdatabasen. Konflikttabeller namnges i formatet dbo.MSmerge_conflict_<Publication>_<Article>.

Varje gång ögonblicksbildsagenten körs skapas följande typer av filer (med motsvarande filnamnstillägg) för varje artikel i publikationsdatabasen:

  • Schema (.sch)

  • Begränsningar och index (.dri)

  • Utlösare (.trg)

  • Systemtabelldata (.sys)

  • Konflikttabeller (.cft)

  • Data (.bcp): skapas inte för publikationer med parametriserade filter.

    Om publikationen inte använder några parametriserade filter innehåller ögonblicksbilden data för de publicerade tabellerna i en uppsättning .bcp filer. Om publikationen använder parameteriserade filter (vilket är typiskt för sammanslagningspublikationer) innehåller den första ögonblicksbilden inga data. Data tillhandahålls med hjälp av en ögonblicksbild för en prenumerants partition, vilket beskrivs i nästa avsnitt.

Starta en prenumeration

Varje abonnemang initieras när sammanslagningsagenten för abonnemanget körs och kopierar den initiala ögonblicksbilden till abonnemangsdatabasen. Förutom schemat och data från replikerade objekt innehåller ögonblicksbilden de systemtabeller, vyer, utlösare och lagrade procedurer som finns i publikationsdatabasen. En eller två extra systemtabeller kopieras också till prenumerationsdatabasen. En fullständig lista över systemtabeller finns i avsnittet Systemtabeller som skapats i publikations- och prenumerationsdatabaserna i den här artikeln. Om en prenumeration initieras igen skrivs alla replikerade objekt och replikeringssystemobjekt över.

Om ingen av tabellerna i publikationsdatabasen använder parameteriserade filter kopieras samma ögonblicksbild av publikationen till varje prenumerant. Om ett eller flera parameteriserade filter används styrs sättet som varje prenumeration initieras på av följande logik:

  • Om platsen för ögonblicksbilden tillhandahålls till Mergeagenten via kommandoradet:

    • Använd ögonblicksbilden från den här platsen.
  • Om däremot ögonblicksbilden var förgenererad:

    • Hämta platsen för ögonblicksbilden från MSmerge_dynamic_snapshots i publikationsdatabasen och tillämpa ögonblicksbilden från den platsen.
  • Annars om publikationen tillåter prenumeranter att initiera ögonblicksbilder:

    • Om en ögonblicksbild redan har genererats för en annan prenumerant med samma partition tillämpar du ögonblicksbilden på Prenumeranten.

    • Om inte, generera och tillämpa en ögonblicksbild på Prenumeranten.

  • Initiera annars prenumeranten med hjälp av SELECT instruktioner mot tabellerna i publikationen. Den här metoden går långsammare än att använda en ögonblicksbild för prenumerantens partition.

Om överföringen av ögonblicksbilder avbryts vid något tillfälle återupptas den automatiskt och skickar inte om några filer som redan har överförts helt. Enheten för leverans av Snapshot Agent är bcp-filen för varje publikationens artikel, så filer som delvis levereras måste levereras i sin helhet. Att återuppta ögonblicksbilden kan dock avsevärt minska mängden data som överförs och säkerställa leverans av ögonblicksbilder i tid även om anslutningen är otillförlitlig. Mer information om hur du skapar ögonblicksbilder finns i Parameteriserade filter – Parameteriserade radfilter.

Plats för ögonblicksbild

Platsen för ögonblicksbilden är beroende av: sökvägen som angetts för standardplatsen eller den alternativa ögonblicksbilden; om publikationen använder en UNC-sökväg eller FTP-resurs för ögonblicksbildmappen. och om publikationen använder parametriserade filter. I de här exemplen antar du att platsen för ögonblicksbildmappen är: : \\<MyComputer>\<MyFolder>

  • Om publikationen använder UNC är den första delen av sökvägen: \\<MyComputer>\<MyFolder>\unc\. Om den använder FTP, är det \\<MyComputer>\<MyFolder>\ftp\.

  • Om publikationen använder UNC och inte använder parameteriserade filter är sökvägen\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>

  • Om publikationen använder UNC och använder parametriserade filter baseras platsen på sökvägen för ögonblicksbildmappen och de parametriserade radfiltreringsvillkoren för publikationen. Om artikeln till exempel filtreras med HOST_NAME() funktionen och värdet för partitionen är SalesLaptop, är \\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12 sökvägen till ögonblicksbilden för partitionen, där 12 är det ID som används internt för partitionen.

Systemtabeller som skapats i publikations- och prenumerationsdatabaserna

Följande tabeller skapas i publikationsdatabasen och varje prenumerationsdatabas.

Tabell Beskrivning
MSdynamicsnapshotjobs Innehåller information om ögonblicksbildsjobb för publikationer med parametriserade filter.
MSdynamicsnapshotviews Spårar alla tillfälliga ögonblicksbildsvyer som skapats av Ögonblicksbildsagenten. Det används av systemet för att rensa vyer i händelse av en onormal avstängning av SQL Server-agenten eller ögonblicksbildsagenten.
MSmerge_altsyncpartners Spårar sambandet mellan de aktuella synkroniseringspartnerna och en Utgivare.
MSmerge_articlehistory Spårar ändringar som gjorts i artiklar under en synkroniseringssession för sammanslagningsagenten, med en rad för varje artikel som ändringar har gjorts i.
MSmerge_conflicts_info Spårar konflikter som uppstår när du synkroniserar en prenumeration till en sammanslagningspublikation.
MSmerge_contents Innehåller en rad för varje rad som ändrats i den aktuella databasen sedan den publicerades. Den här tabellen används av sammanslagningsprocessen för att fastställa de rader som har ändrats.
MSmerge_current_partition_mappings Innehåller en rad för varje partition som en viss ändrad rad tillhör.
MSmerge_dynamic_snapshots Spårar ögonblicksbildens plats för varje partition definierad för en sammanslagningspublikation.
MSmerge_errorlineage Innehåller rader som har tagits bort hos prenumeranten, men vars borttagning inte sprids till utgivaren.
MSmerge_generation_partition_mappings Spårar om en viss generation innehåller ändringar som är relevanta för en viss partition.
MSmerge_genhistory Innehå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.
MSmerge_history Innehåller historikrader med detaljerade beskrivningar av resultaten från tidigare jobbsessioner för sammanslagningsagenten.
MSmerge_identity_range Spårar de numeriska intervall som tilldelats identitetskolumner för prenumerationer till publikationer där replikeringen automatiskt hanterar intervalltilldelningar.
MSmerge_metadataaction_request Innehåller en rad för varje kompenserande åtgärd som krävs. En kompenserande åtgärd används för att återställa en ändring på en nod om ändringen misslyckades på en annan nod.
MSmerge_partition_groups Innehåller en rad för varje förberäknad partition i en viss databas.
MSmerge_past_partition_mappings Innehåller en rad för varje partition som en viss ändrad rad tidigare tillhörde, men inte längre tillhör.
MSmerge_replinfo Innehåller en rad för varje prenumeration. Den här tabellen spårar intern information om skickade och mottagna generationer.
MSmerge_sessions Innehåller historik-rader med resultaten av tidigare sammanslagningsagent-jobbsessioner.
MSmerge_settingshistory Innehåller en historik över ändringar som gjorts i artikel- och publikationsegenskaper, med en rad för varje ändring som görs.
MSmerge_tombstone Innehåller information om borttagna rader och tillåter att borttagningar sprids till andra prenumeranter.
MSrepl_errors Innehåller detaljerad information om eventuella agentfel.
sysmergearticles Innehåller en rad för varje sammanslagningsartikel.
sysmergepartitioninfo Innehåller information om partitioner för varje artikel, med en rad för varje artikel.
sysmergepartitioninfoview Innehåller partitioneringsinformation för tabellartiklar.
sysmergepublications Innehåller en rad för varje sammanslagningspublikation.
sysmergeschemaarticles Spårar endast schemaartiklar, till exempel lagrade procedurer.
sysmergeschemachange Innehåller information om publicerade artiklar som genereras av Ögonblicksbildsagenten.
sysmergesubscriptions Innehåller en rad för varje prenumerant.
sysmergesubsetfilters Innehåller kopplingsfilterinformation för partitionerade artiklar.

Dessutom skapas MSsnapshotdeliveryprogress-tabellen i varje prenumerationsdatabas och MSsubscription_properties-tabellen skapas i varje prenumerationsdatabas som använder en pullprenumeration.

Tabell Beskrivning
MSsnapshotdeliveryprogress Spårar filer som framgångsrikt levererats till användaren när en ögonblicksbild appliceras. Dessa data används för att återuppta leveransen av filer om sammanslagningsagenten inte kan leverera alla filer under sessionen.
MSsubscription_properties Innehåller den parameterinformation som krävs för att köra replikeringsagenter hos prenumeranten