Kommentar
Å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.
Gäller för:SQL Server
Det här avsnittet beskriver hur du anger olika egenskaper för sammanslagningsreplikeringen.
Artikeln för sammanslagning kan endast laddas ned
Artiklar som endast laddas ned är avsedda för applikationer med data som inte uppdateras på prenumeranter. Mer information finns i Optimera prestandan för sammanslagningsreplikering med artiklar endast för nedladdning.
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 Artikelegenskaper
På sidan Artiklar i guiden Ny publikation eller dialogrutan Publikationsegenskaper – <publikation> väljer du en tabell och klickar sedan på Artikelegenskaper.
Klicka på Ange egenskaper för markerad tabellartikel eller Ange egenskaper för alla tabellartiklar.
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 prenumeranten, förhindra att prenumeranten gör ändringar
- Ladda ned till abonnent, tillåt abonnentändringar
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
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_optionsför vara detsamma för båda artiklarna.
Befintlig artikel
För att avgöra om en artikel endast är för nedladdning kör du sp_helpmergearticle och kontrollerar värdet för upload_options för artikeln i resultatuppsättningen.
Om värdet som returneras i steg 1 är 0, kör sp_changemergearticle och ange värdet subscriber_upload_options för
@property, värdet 1 för@force_invalidate_snapshotoch@force_reinit_subscription, samt 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
- 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.
- Klicka på Artikelegenskaper och sedan på Ange egenskaper för markerad tabellartikel eller Ange egenskaper för alla tabellartiklar.
- På sidan Artikelegenskaper – <artikel> - eller artikelegenskaper – <ArticleType> klickar du på fliken Lösare .
- Välj Tillåt prenumerant att lösa konflikter interaktivt under synkronisering på begäran.
- Välj OK.
- 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
- 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.
- 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
- Kör sp_helpmergearticle på Publisher i publikationsdatabasen med
@publication. Observera värdet på allow_interactive_resolver för varje artikel i resultatmängden för vilken Interactive Resolver ska användas.- Om detta värde är 1, används den interaktiva matchningsmodulen.
- 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 och ange
@publication,@article, värdet allow_interactive_resolver för@propertyoch värdet true för@value.
- På prenumeranten i prenumerationsdatabasen kör du sp_addmergepullsubscription. Mer information finns i Skapa en pull-prenumeration.
- På prenumeranten i prenumerationsdatabasen kör du sp_addmergepullsubscription_agent och anger följande parametrar:
-
@publisher,@publisher_db(den publicerade databasen) och@publication. - Ett värde på true för
@enabled_for_syncmgr. - Ett värde på true för
@use_interactive_resolver. - Säkerhetskontoinformationen som krävs av Merge Agent. Mer information finns i Skapa en pull-prenumeration.
-
- Kör sp_addmergesubscription på Publisher i publikationsdatabasen.
Definiera en artikel som stöder den interaktiva lösaren
- Kör sp_addmergearticle hos Publishern i publiceringsdatabasen. 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 sker 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 även ange att konflikter ska spåras och lösas på nivån för logiska poster, men de här alternativen är inte tillgängliga i 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å
- På sidan Artiklar i guiden Ny publikation eller dialogrutan Publikationsegenskaper – <publikation> väljer du en tabell.
- Klicka på Artikelegenskaper och sedan på Ange egenskaper för markerad tabellartikel eller Ange egenskaper för alla tabellartiklar.
- 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å.
- 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
Hos utgivaren i publiceringsdatabasen kör du sp_addmergearticle och ange 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
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.
Kör sp_changemergearticle på Publisher i publikationsdatabasen. Ange ett värde för column_tracking för
@propertyoch 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_snapshotoch@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 DELETEkommandon mellan utgivaren och prenumeranten. 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
Hos 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
Om du vill ta reda på om felkompensation är aktiverad för en artikel, kör sp_helpmergearticle (Transact-SQL) och notera värdet för delete_tracking i resultatuppsättningen. Om det här värdet är 0 ignoreras redan borttagningar.
Om värdet från steg 1 är 1, kör du sp_changemergearticle (Transact-SQL) på utgivaren i publikationsdatabasen. Ange värdet
delete_trackingfö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 synkronisering förhindrar sammanslagningsreplikering överträdelser av främmande nycklar genom att infoga nya rader i SalesOrderHeader innan motsvarande 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 triggrar när bearbetningsordningen för artiklar fastställs, eftersom den inte kan avgöra vilken effekt en trigger får förrän den har aktiverats. 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. Sammanslagningsreplikering vänder automatiskt ordningen för borttagningarna. Sammanslagningsreplikeringen misslyckas inte om artikelordning inte används, eftersom sammanfogningsagenten fortsätter att bearbeta artiklarna om en begränsningsöverträdelse inträffar. Den försöker sedan igen med de åtgärder som misslyckades när övriga 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
Hos Publisher i publikationsdatabasen kör 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_order10, 20 och 30 i stället för 1, 2 respektive 3.
Befintlig artikel
- 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.
- Kör sp_changemergearticle (Transact-SQL)på Publisher i publikationsdatabasen. Ange värdet processing_order för
@propertyoch ett heltalsvärde som representerar bearbetningsordningen för@value.