Dela via


Avancerad sammanslagningsreplikering – Konfliktidentifiering och lösning

gäller för:SQL Server

När en utgivare och en prenumerant är anslutna och synkronisering sker identifierar sammanslagningsagenten om det finns några konflikter. Om konflikter identifieras använder sammanslagningsagenten en konfliktlösare (som anges när en artikel läggs till i en publikation) för att avgöra vilka data som godkänns och sprids till andra webbplatser.

Sammanslagningsreplikering erbjuder en mängd olika metoder för att identifiera och lösa konflikter. För de flesta program är standardmetoden lämplig:

  • Om en konflikt uppstår mellan en utgivare och en prenumerant, behålls utgivarens ändring och prenumerantens ändring ignoreras.
  • Om en konflikt uppstår mellan två prenumeranter som använder klientprenumerationer (standardtypen för pull-prenumerationer) behålls ändringen från den första prenumeranten som ska synkroniseras med utgivaren och ändringen från den andra prenumeranten ignoreras. Information om hur du anger klient- och serverprenumerationer finns i Ange en kopplingsprenumerationstyp och konfliktlösningsprioritet (SQL Server Management Studio).
  • Om en konflikt uppstår mellan två prenumeranter som använder serverprenumerationer (standardtypen för push-prenumerationer) behålls ändringen från prenumeranten med det högsta prioritetsvärdet och ändringen från den andra prenumeranten ignoreras. Om prioritetsvärdena är lika behålls ändringen från den första prenumeranten som ska synkroniseras med utgivaren.

Anmärkning

Även om en prenumerant synkroniseras med utgivaren uppstår vanligtvis konflikter mellan uppdateringar som görs hos olika prenumeranter, i stället för uppdateringar som görs hos en prenumerant och på Utgivaren.

Hur konfliktidentifiering och lösning fungerar beror på följande alternativ, som beskrivs i det här avsnittet:

  • Oavsett om du anger spårning på kolumnnivå, spårning på radnivå eller logisk spårning på postnivå.

  • Oavsett om du anger den standardprioritetsbaserade lösningsmekanismen eller specificerar en artikellösare. En artikellösare kan vara:

    • En affärslogikhanterare skriven i hanterad kod.
    • En COM-baserad anpassad lösare.
    • En COM-baserad lösning som tillhandahålls av Microsoft.

    Om standardlösningsmekanismen används bestäms beteendet ytterligare av vilken typ av prenumeration som används: klient eller server.

Konfliktidentifiering

Om en dataändring kvalificerar sig som en konflikt eller inte beror på vilken typ av konfliktspårning du har angett för en artikel:

  • Om du väljer konfliktspårning på kolumnnivå anses det vara en konflikt om ändringar görs i samma kolumn på samma rad på mer än en replikeringsnod.
  • Om du väljer spårning på radnivå anses det vara en konflikt om ändringar görs i kolumner på samma rad på mer än en replikeringsnod (kolumnerna som påverkas i motsvarande rader behöver inte vara desamma).
  • Om du väljer spårning på logisk postnivå anses det vara en konflikt om ändringar görs på en rad i samma logiska post på mer än en replikeringsnod (kolumnerna som påverkas i motsvarande rader behöver inte vara desamma).

Mer information finns i Identifiera och lösa konflikter i logiska poster.

Information om hur du anger konfliktspårnings- och lösningsnivå för en artikel finns i Ange egenskaper för sammanslagningsreplikering.

Konfliktlösning

När en konflikt har identifierats startar Sammanslagningsagenten den valda konfliktlösaren och använder lösaren för att fastställa konfliktvinnaren. Den vinnande raden tillämpas på Utgivare och Prenumerant och data från den förlorande raden skrivs till en konflikttabell. Konflikter löses omedelbart efter att lösaren har körts, såvida du inte väljer att lösa konflikterna interaktivt.

Lösa konflikter vid sammanslagningsreplikering

gäller för:SQL Server

När en utgivare och en prenumerant är anslutna och synkronisering sker identifierar sammanslagningsagenten om det finns några konflikter. Om konflikter identifieras använder sammanslagningsagenten en konfliktlösare för att avgöra vilka data som ska accepteras och spridas till andra platser.

Anmärkning

Även om en prenumerant synkroniseras med utgivaren uppstår vanligtvis konflikter mellan uppdateringar som görs hos olika prenumeranter i stället för uppdateringar som görs hos en prenumerant och på Utgivaren.

Sammanslagningsreplikering erbjuder en mängd olika metoder för att identifiera och lösa konflikter. För de flesta program är standardmetoden lämplig:

  • Om en konflikt uppstår mellan en utgivare och en prenumerant, behålls utgivarens ändring och prenumerantens ändring ignoreras.

  • Om en konflikt uppstår mellan två prenumeranter som använder klientprenumerationer (standardtypen för pull-prenumerationer) behålls ändringen från den första prenumeranten som ska synkroniseras med utgivaren och ändringen från den andra prenumeranten ignoreras. Information om hur du anger klient- och serverprenumerationer finns i Ange en kopplingsprenumerationstyp och konfliktlösningsprioritet (SQL Server Management Studio).

  • Om en konflikt uppstår mellan två prenumeranter som använder serverprenumerationer (standardtypen för push-prenumerationer) behålls ändringen från prenumeranten med det högsta prioritetsvärdet och ändringen från den andra prenumeranten ignoreras. Om prioritetsvärdena är lika behålls ändringen från den första prenumeranten som ska synkroniseras med utgivaren.

Mer information om konfliktidentifiering och lösning för sammanslagningsreplikering finns i Advanced Merge Replication Conflict Detection and Resolution (Avancerad sammanslagning av replikeringskonfliktidentifiering och lösning).

Lösningstyper

Vid sammanslagningsreplikering sker konfliktlösning på artikelnivå. För publikationer som består av flera artiklar kan du ha olika konfliktlösare som betjänar olika artiklar, eller samma konfliktlösare som betjänar en artikel, flera artiklar eller alla artiklar som består av en publikation.

Om du planerar att använda standardprioritetsbaserad konfliktlösare behöver du inte ange lösenegenskapen för en artikel. Om du vill använda en artikellösare i stället för standardlösningen måste du ange egenskapen resolver för den artikel som ska använda den genom att välja en tillgänglig lösning i Publisher. All specifik information som behöver skickas till lösaren kan även specificeras i egenskapen för information för lösaren.

Sammanslagningsreplikering erbjuder fyra typer av konfliktlösare:

  • Standardprioritetsbaserad konfliktlösare

    Standardlösningsmekanismen fungerar annorlunda, beroende på om en prenumeration är en klientprenumeration eller en serverprenumeration. Du tilldelar prioritetsvärden till enskilda prenumeranter som använder serverprenumerationer. Ändringar som görs på noden med högst prioritet vinner eventuella konflikter. För klientprenumerationer vinner den första ändringen som skrivs till utgivaren konflikten.

    När en prenumeration har skapats kan den inte ändras från en typ till en annan.

  • En affärslogikhanterare

    Med ramverket för affärslogikhanterare kan du skriva en hanterad kodsammansättning som anropas under synkroniseringsprocessen för sammanslagning. Sammansättningen innehåller affärslogik som kan svara på konflikter och ett antal andra villkor under synkroniseringen. Mer information finns i Köra affärslogik under sammanslagningssynkronisering.

  • En COM-baserad anpassad lösning

    Sammanslagningsreplikering tillhandahåller ett API för att skriva lösare som COM-objekt i språk som Microsoft Visual C++ eller Microsoft Visual Basic. Mer information finns i COM-Based anpassade resolver.

  • En COM-baserad lösning som tillhandahålls av Microsoft

    Microsoft SQL Server innehåller ett antal COM-baserade lösare. Mer information finns i Microsoft COM-Based Resolveers.

Information om hur du väljer lämplig typ av lösning finns i Välj en lösen.

Anmärkning

Vissa artikellösare skrivs för att endast hantera konflikter för vissa åtgärder. En lösare kan till exempel hantera uppdateringar, men inte insättningar eller borttagningar. Standardprioritetsbaserad konfliktlösare hanterar eventuella konflikter som inte hanteras av artikellösaren.

För att ange en kopplingsprenumerationstyp och konfliktlösningsprioritet, se

Interaktiv lösning

Replikering tillhandahåller ett interaktivt användargränssnitt för konfliktlösning som kan användas tillsammans med antingen den standardprioritetsbaserade konflikthanteraren eller en artikellösare. När du utför synkronisering på begäran via Microsoft Windows Synchronization Manager visar den Interaktiva Lösaren konfliktdata under körning och låter dig välja hur konflikterna ska lösas. Mer information om hur du aktiverar interaktiv lösning och startar den interaktiva lösaren finns i Interaktiv konfliktlösning.

Visa konflikter

Det enklaste sättet att visa konflikter är att använda Replikeringskonfliktvisaren, som är tillgänglig från SQL Server Management Studio (SQL Server innehåller också lagrade procedurer som gör att konflikttabellerna kan efterfrågas.). Konfliktvisningsprogrammet och den interaktiva lösaren är liknande verktyg, men med den interaktiva lösaren kan du lösa konflikter när synkroniseringen inträffar, medan konfliktvisningsprogrammet är utformat för att visa konflikter när de har lösts. Om konfliktmetadata fortfarande är tillgängliga i systemtabellerna (konfliktmetadata behålls som standard i 14 dagar) kan du åsidosätta konfliktlösningsresultaten i Konfliktvisaren, men om direkta åtgärder krävs regelbundet bör du överväga att använda den interaktiva lösaren.

Anmärkning

Konflikter som omfattar logiska poster visas inte i Konfliktvisaren. Om du vill visa information om dessa konflikter använder du lagrade replikeringsprocedurer. Mer information finns i Visa konfliktinformation för sammanslagningspublikationer (replikering Transact-SQL programmering).

Konfliktvisningsprogrammet visar information från tre systemtabeller:

  • Replikering skapar en konflikttabell för varje tabell i en sammanslagningsartikel med ett namn i formuläret MSmerge_conflict_<PublicationName>_<ArticleName>.

    Konflikttabeller har samma struktur som de tabeller som de baseras på. En rad i en av dessa tabeller består av den förlorande versionen av en konfliktrad (den vinnande versionen av raden finns i den faktiska användartabellen).

  • Tabellen MSmerge_conflicts_info innehåller information om varje konflikt, inklusive konflikttypen.

  • Tabellen sysmergearticles identifierar vilka användartabeller som har konflikttabeller och innehåller information om konflikttabellerna.

Som standard lagras konfliktinformation:

  • För utgivaren och prenumeranten om publikationskompatibilitetsnivån är 90RTM eller högre.

  • I Publisher om publikationens kompatibilitetsnivå är lägre än 80RTM.

  • I Publisher om prenumeranter kör SQL Server Compact. Konfliktdata kan inte lagras på SQL Server Compact-prenumeranter.

Så här visar du konflikter