Ange egenskaper för sammanfogningsreplikering

Gäller för:SQL Server

Det här avsnittet beskriver hur du anger olika egenskaper för sammanslagningsreplikeringen.

Sammanslagningsartikeln är Download-Only

Endast nedladdningsbara artiklar är utformade för program med data som inte uppdateras hos prenumeranter. Mer information finns i Optimera prestanda för sammanslagningsreplikering med Download-Only artiklar.

Considerations

  • Om du anger att en artikel endast laddas ned när prenumerationer har initierats måste alla klientprenumerationer som tog emot artikeln initieras på nytt. Serverprenumerationer behöver inte initieras om. Mer information om effekterna av egenskapsändringar finns i Ändra publikations- och artikelegenskaper.

Använd SQL Server Management Studio

På sidan Artiklar

På sidan Artiklar i guiden Ny publikation väljer du en tabell och markerar sedan kryssrutan Markerad tabell är endast nedladdning.

På fliken Egenskaper i artikelns egenskaper

  1. På sidan Artiklar i guiden Ny publikation eller dialogrutan Publikationsegenskaper – <publikation> väljer du en tabell och klickar sedan på Artikelegenskaper.

  2. Klicka på Ange egenskaper för markerad tabellartikel eller Ange egenskaper för alla tabellartiklar.

  3. I avsnittet Målobjekt på fliken Egenskaper i dialogrutan Artikelegenskaper – <artikel> anger du något av följande värden för synkroniseringsriktningen:

    • Ladda ned till Prenumerant, förhindra ändringar av prenumerant
    • Ladda ned till Prenumerant, tillåt ändringar av prenumerant
  4. Om du är i dialogrutan Publikationsegenskaper – <publikation> klickar du på OK för att spara och stänga dialogrutan.

Använd Transact-SQL

Ny artikel

  1. Kör sp_addmergearticle och ange värdet 1 eller 2 för parametern @subscriber_upload_options. Siffrorna motsvarar följande beteende:

    • 0 – Inga begränsningar (standard). Ändringar som görs hos prenumeranten laddas upp till Publisher.
    • 1 – Ändringar tillåts hos prenumeranten, men de laddas inte upp till Publisher.
    • 2 – Ändringar tillåts inte hos prenumeranten.

    Note

    Om källtabellen för en artikel redan har publicerats i en annan publikation måste värdet @subscriber_upload_options för vara detsamma för båda artiklarna.

Befintlig artikel

  1. För att avgöra om en artikel är endast nedladdning kör du sp_helpmergearticle och verifierar värdet för upload_options för artikeln i resultatuppsättningen.

  2. Om värdet som returneras i steg 1 är 0 kör du sp_changemergearticle och anger värdet subscriber_upload_options för @property, värdet 1 för @force_invalidate_snapshot och @force_reinit_subscription, och värdet 1 eller 2 för @value, vilket motsvarar följande beteende:

    • 1 – Ändringar tillåts hos prenumeranten, men de laddas inte upp till Publisher.

    • 2 – Ändringar tillåts inte hos prenumeranten.

      Note

      Om källtabellen för en artikel redan har publicerats i en annan publikation måste nedladdningsbeteendet vara detsamma för båda artiklarna.

Interaktiv konfliktlösning

Microsoft SQL Server replikering tillhandahåller en interaktiv lösning som gör att du kan lösa konflikter manuellt under synkronisering på begäran i Microsoft Windows Synchronization Manager. När interaktiv lösning har aktiverats löser du konflikter interaktivt under synkroniseringen med hjälp av den interaktiva lösaren. Den interaktiva lösaren är tillgänglig via Microsoft Windows Synchronization Manager. Mer information finns i Synkronisera en prenumeration med Windows Synchronization Manager (Windows Synchronization Manager).

Recommendations

  • Om en synkronisering utförs utanför Windows Synchronization Manager (som en schemalagd synkronisering eller en synkronisering på begäran i SQL Server Management Studio eller Replikeringsövervakaren) löses konflikter automatiskt utan att användaren behöver ingripa, med hjälp av den standardkonfliktslösning som angetts för artikeln. Mer information finns i Interaktiv konfliktlösning.

Använd SQL Server Management Studio

Aktivera interaktiv konfliktlösning för en artikel

  1. På sidan Artiklar i guiden Ny publikation eller dialogrutan Publikationsegenskaper – <publikation> väljer du en tabell. Mer information om hur du använder guiden och hur du öppnar dialogrutan finns i Skapa en publikation och visa och ändra publikationsegenskaper.
  2. Klicka på Artikelegenskaper och sedan på Ange egenskaper för markerad tabellartikel eller Ange egenskaper för alla tabellartiklar.
  3. På sidan Artikelegenskaper – <artikel> - eller artikelegenskaper – <ArticleType> klickar du på fliken Lösare .
  4. Välj Tillåt prenumerant att lösa konflikter interaktivt under synkronisering på begäran.
  5. Välj OK.
  6. Om du är i dialogrutan Publikationsegenskaper – <publikation> klickar du på OK för att spara och stänga dialogrutan.

Ange att en prenumeration ska använda interaktiv konfliktlösning

  1. I dialogrutan Prenumerationsegenskaper – <prenumerant>: <SubscriptionDatabase> anger du värdet True för alternativet Lös konflikter interaktivt . Mer information om hur du kommer åt den här dialogrutan finns i Visa och ändra egenskaper för push-prenumeration och visa och ändra egenskaper för pull-prenumeration.
  2. Välj OK.

Använd Transact-SQL

Du kan programmatiskt ange att en prenumerant ska använda det här grafiska gränssnittet för att lösa artikelkonflikter när en pull-prenumeration till en sammanslagningspublikation skapas. Endast konflikter i artiklar som stöder det här alternativet visas i den interaktiva lösaren.

Skapa en pull-prenumeration för sammanslagning som använder den interaktiva lösaren

  1. På Publisher i publikationsdatabasen kör du sp_helpmergearticle och anger @publication. Observera värdet för allow_interactive_resolver för varje artikel i resultatuppsättningen som den interaktiva matcharen ska användas för.
    • Om det här värdet är 1 används den interaktiva matcharen.
    • Om det här värdet är 0 måste du först aktivera den interaktiva lösaren för varje artikel. Det gör du genom att köra sp_changemergearticle, ange @publication, @article, ett värde på allow_interactive_resolver för @propertyoch värdet true för @value.
  2. Kör sp_addmergepullsubscription på prenumerationsdatabasens prenumerant. Mer information finns i Skapa en pull-prenumeration.
  3. Kör sp_addmergepullsubscription_agent i prenumerationsdatabasens Prenumerant och ange följande parametrar:
    • @publisher, @publisher_db (den publicerade databasen) och @publication.
    • Värdet true för @enabled_for_syncmgr.
    • Värdet true för @use_interactive_resolver.
    • Säkerhetskontoinformationen som krävs av Merge Agent. Mer information finns i Skapa en pull-prenumeration.
  4. Kör sp_addmergesubscription på Publisher i publikationsdatabasen.

Definiera en artikel som stöder den interaktiva lösaren

  1. Kör sp_addmergearticle på Publisher i publikationsdatabasen. Ange namnet på publikationen som artikeln tillhör för @publication, ett namn på artikeln för @article, databasobjektet som publiceras för @source_objectoch värdet true för @allow_interactive_resolver. Mer information finns i Definiera en artikel.

Konfliktspårning och lösningsnivå för sammanslagningsartiklar

I det här avsnittet beskrivs hur du anger konfliktspårnings- och lösningsnivå för sammanslagningsartiklar i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL.

När en prenumeration på en sammanslagningspublikation synkroniseras söker replikering efter konflikter som orsakas av ändringar i samma data som gjorts både i Publisher och prenumeranten. Du kan ange om konflikter identifieras på radnivå, där eventuella ändringar av raden betraktas som en konflikt eller kolumnnivå, där endast ändringar i samma rad och kolumn betraktas som en konflikt. Konfliktlösning för artiklar utförs på radnivå. Mer information om konfliktidentifiering och lösning när logiska poster används finns i Identifiera och lösa konflikter i logiska poster.

Begränsningar och restriktioner

  • Om du ändrar spårningsnivån efter att prenumerationerna har initierats måste dessa prenumerationer initieras på nytt. Mer information om effekterna av egenskapsändringar finns i Ändra publikations- och artikelegenskaper.
  • Med spårning på rad- och kolumnnivå utförs konfliktlösning alltid på radnivå: den vinnande raden skriver över den förlorande raden. Med sammanslagningsreplikering kan du också ange att konflikter spåras och matchas på den logiska postnivån, men de här alternativen är inte tillgängliga från SQL Server Management Studio. Information om hur du anger dessa alternativ från lagrade procedurer för replikering finns i Definiera en logisk postrelation mellan sammanslagningstabellartiklar.

Använd SQL Server Management Studio

Ange rad- eller kolumnnivåspårning för sammanslagningsartiklar på fliken Egenskaper i dialogrutan Artikelegenskaper , som är tillgänglig i guiden Ny publikation och dialogrutan Publikationsegenskaper – <Publikation> . Mer information om hur du använder guiden och hur du öppnar dialogrutan finns i Skapa en publikation och visa och ändra publikationsegenskaper.

Ange spårning på rad- eller kolumnnivå

  1. På sidan Artiklar i guiden Ny publikation eller dialogrutan Publikationsegenskaper – <publikation> väljer du en tabell.
  2. Klicka på Artikelegenskaper och sedan på Ange egenskaper för markerad tabellartikel eller Ange egenskaper för alla tabellartiklar.
  3. På fliken Egenskaper i dialogrutan Artikelegenskaper <,> väljer du något av följande värden för egenskapen Spårningsnivå : Spårning på radnivå eller Spårning på kolumnnivå.
  4. Om du är i dialogrutan Publikationsegenskaper – <publikation> klickar du på OK för att spara och stänga dialogrutan.

Använd Transact-SQL

Så här anger du alternativ för konfliktspårning för en ny sammanslagningsartikel

  1. På Publisher i publikationsdatabasen kör du sp_addmergearticle och anger något av följande värden för @column_tracking:

    • true – Använd spårning på kolumnnivå för artikeln.
    • false – Använd spårning på radnivå, vilket är standardvärdet.

Ändra konfliktspårningsalternativ för en sammanslagningsartikel

  1. Kör sp_helpmergearticle för att fastställa konfliktspårningsalternativen för en sammanslagningsartikel. Observera värdet för alternativet column_tracking i resultatuppsättningen för artikeln. Värdet 1 innebär att spårning på kolumnnivå används och värdet 0 innebär att spårning på radnivå används.

  2. Kör sp_changemergearticle på Publisher i publikationsdatabasen. Ange ett värde för column_tracking för @property och något av följande värden för @value:

    • true – Använd spårning på kolumnnivå för artikeln.
    • false – Använd spårning på radnivå, vilket är standardvärdet.

    Ange värdet 1 för både @force_invalidate_snapshot och @force_reinit_subscription.

Hantera spårningsborttagningar

Note

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen.

Som standard synkroniserar sammanslagningsreplikering DELETE kommandon mellan Publisher och Prenumerant. Med sammanslagningsreplikering kan du behålla rader i prenumerationsdatabasen även när de har tagits bort från publikationen och vice versa. Du kan programmatiskt ange att DELETE kommandon ska ignoreras när du skapar en ny artikel, eller så kan du aktivera den här funktionen vid ett senare tillfälle med hjälp av lagrade replikeringsprocedurer.

Important

Om du aktiverar den här funktionen kommer det att leda till icke-konvergens, vilket innebär att data som finns hos prenumeranten inte korrekt återspeglar data i Publisher. Du måste implementera din egen mekanism för att manuellt ta bort borttagna rader.

Ange att borttagningar ska ignoreras för en ny sammanslagningsartikel

På Publisher i publikationsdatabasen kör du sp_addmergearticle (Transact-SQL). Ange värdet false för @delete_tracking. Mer information finns i Definiera en artikel.

Note

Om källtabellen för en artikel redan har publicerats i en annan publikation måste värdet för delete_tracking vara detsamma för båda artiklarna.

Ange att borttagningar ska ignoreras för en befintlig sammanslagningsartikel

  1. Om du vill ta reda på om felkompensation har aktiverats för en artikel kör du sp_helpmergearticle (Transact-SQL) och noterar värdet för delete_tracking i resultatuppsättningen. Om det här värdet är 0 ignoreras redan borttagningar.

  2. Om värdet från steg 1 är 1 kör du sp_changemergearticle (Transact-SQL) på Publisher i publikationsdatabasen. Ange värdet delete_tracking för för @propertyoch värdet false för @value.

    Note

    Om källtabellen för en artikel redan har publicerats i en annan publikation måste värdet för delete_tracking vara detsamma för båda artiklarna.

Bearbetningsordning

Med sammanslagningsreplikering kan du ange i vilken ordning artiklarna bearbetas av Merge Agent under synkroniseringsprocessen. Du kan tilldela en order till varje artikel programmatiskt när du skapar en artikel med hjälp av replikerings lagrade procedurer. Artiklar bearbetas i ordning från lägsta till högsta värde. Om två artiklar har samma värde bearbetas de samtidigt.

Hur bearbetningsordningen bestäms

Under sammanslagningssynkroniseringen bearbetas artiklar som standard i den ordning som krävs av beroendena mellan objekt, inklusive de deklarativa referensintegritetsbegränsningarna (DRI) som definierats i bastabellerna. Bearbetning innebär att räkna upp ändringarna i en tabell och sedan tillämpa ändringarna. Om det inte finns någon DRI men kopplingsfilter eller logiska poster finns mellan tabellartiklar bearbetas artiklarna i den ordning som krävs av filtren och de logiska posterna. Artiklar som inte är relaterade till någon annan artikel via DRI, kopplingsfilter, logiska poster eller andra beroenden bearbetas enligt artikelns smeknamn i systemtabellen sysmergearticles (Transact-SQL).

Överväg en publikation som innehåller tabellerna SalesOrderHeader och SalesOrderDetail med primärnyckelkolumnen SalesOrderID i tabellen SalesOrderHeader och motsvarande sekundärnyckelkolumn SalesOrderID i tabellen SalesOrderDetail . Under synkroniseringen förhindrar sammanslagningsreplikering överträdelser av sekundärnyckeln genom att infoga nya rader i SalesOrderHeader innan associerade rader infogas i SalesOrderDetail. På samma sätt tas rader bort från SalesOrderDetail innan den associerade raden tas bort från SalesOrderHeader.

I vissa program tillämpas dock referensintegritet via databasutlösare eller på programnivå i stället för via DRI. Med den publikation som beskrivs ovan, i stället för DRI, kan tabellen SalesOrderDetail ha en infogningsutlösare som säkerställer att den associerade raden i tabellen SalesOrderHeader finns innan en infogning tillåts. SalesOrderHeader kan ha en borttagningsutlösare som säkerställer att det inte finns några associerade rader i SalesOrderDetail innan en borttagning tillåts. Sammanslagningsreplikering tar inte hänsyn till utlösare när du bestämmer bearbetningsordningen för artiklar eftersom den inte kan avgöra vad resultatet av utlösaren kommer att bli förrän den har utlösts. På samma sätt kan replikering inte ta hänsyn till begränsningar som definierats på programnivå.

När referensintegriteten upprätthålls via utlösare eller på programnivå bör du ange i vilken ordning artiklarna ska bearbetas. I exemplet med utlösare anger du att tabellen SalesOrderHeader ska bearbetas före SalesOrderDetail, eftersom artikelordning baseras på infogningsordning. Sammanslagningsreplikeringen återställer automatiskt ordningen för borttagningar. Sammanslagningsreplikeringen misslyckas inte utan artikelordning, eftersom Merge Agent fortsätter att bearbeta artiklar om en begränsningsöverträdelse inträffar. Den försöker sedan utföra åtgärder som misslyckades efter att andra artiklar har bearbetats. Om du anger artikelordning undviker du bara återförsök och ytterligare bearbetning som är associerad med dem. Om du anger en felaktig ordning (till exempel en som resulterar i att detaljerade poster bearbetas före rubrikposter) försöker sammanslagningsreplikeringen bearbetas igen tills den lyckas.

Ny artikel

  1. På Publisher i publikationsdatabasen kör du sp_addmergearticle (Transact-SQL). Ange ett heltalsvärde som representerar bearbetningsordningen för artikeln för @processing_order. Mer information finns i Definiera en artikel.

    Note

    När du skapar ordnade artiklar bör du lämna luckor mellan artikelordningsvärdena. Detta gör det enklare att ange nya värden i framtiden. Om du till exempel har tre artiklar som du behöver ange en fast bearbetningsordning för anger du värdet @processing_order 10, 20 och 30 i stället för 1, 2 respektive 3.

Befintlig artikel

  1. Om du vill fastställa bearbetningsordningen för en artikel kör du sp_helpmergearticle (Transact-SQL) och noterar värdet för processing_order i resultatuppsättningen.
  2. Kör sp_changemergearticle (Transact-SQL)på Publisher i publikationsdatabasen. Ange värdet processing_order för @property och ett heltalsvärde som representerar bearbetningsordningen för @value.