Eigenschappen voor samenvoegingsreplicatie opgeven

Van toepassing op:SQL Server

In dit onderwerp wordt uitgelegd hoe u verschillende eigenschappen voor de samenvoegreplicatie opgeeft.

Het mergeartikel kan alleen worden gedownload.

Artikelen die alleen worden gedownload, zijn bedoeld voor toepassingen met gegevens die niet worden bijgewerkt bij abonnees. Zie Prestaties van samenvoegreplicatie optimaliseren met artikelen die alleen kunnen worden gedownload voor meer informatie.

Considerations

  • Als u opgeeft dat een artikel alleen wordt gedownload nadat abonnementen zijn geïnitialiseerd, moeten alle clientabonnementen die het artikel hebben ontvangen, opnieuw worden geïnitialiseerd. Serverabonnementen hoeven niet opnieuw te worden geïnitialiseerd. Zie Publicatie- en artikeleigenschappen wijzigen voor meer informatie over de effecten van eigenschappenwijzigingen.

SQL Server Management Studio gebruiken

Op de pagina Artikelen

Selecteer op de pagina Artikelen van de wizard Nieuwe publicatie een tabel en schakel vervolgens het selectievakje Gemarkeerde tabel alleen downloaden in.

Op het tabblad Eigenschappen van de artikel-eigenschappen

  1. Selecteer een tabel op de pagina Artikelen van de wizard Nieuwe publicatie of de publicatie-eigenschappen - <Publicatiedialoogvenster> en klik vervolgens op Artikeleigenschappen.

  2. Klik op Eigenschappen instellen van gemarkeerd tabelartikel of Eigenschappen van alle tabelartikelen instellen.

  3. Geef in de sectie Doelobject van het tabblad Eigenschappen van het dialoogvenster Artikeleigenschappen - <Artikel> een van de volgende waarden op voor synchronisatierichting:

    • Downloaden naar abonnee, abonneewijzigingen verbieden
    • Downloaden naar abonnee, wijzigingen van abonnee toestaan
  4. Als u zich in het dialoogvenster Publicatie-eigenschappen - <Publicatie> bevindt, klikt u op OK om het dialoogvenster op te slaan en te sluiten.

Gebruik Transact-SQL

Nieuw artikel

  1. Voer sp_addmergearticle uit, waarbij u een waarde van 1 of 2 opgeeft voor de parameter @subscriber_upload_options. De getallen komen overeen met het volgende gedrag:

    • 0 - Geen beperkingen (standaard). Wijzigingen die zijn aangebracht bij de abonnee, worden geüpload naar de Publisher.
    • 1 - Wijzigingen zijn toegestaan bij de abonnee, maar worden niet geüpload naar de Publisher.
    • 2 - Wijzigingen zijn niet toegestaan bij de abonnee.

    Note

    Als de brontabel voor een artikel al in een andere publicatie is gepubliceerd, moet de waarde @subscriber_upload_options voor beide artikelen hetzelfde zijn.

Bestaand artikel

  1. Als u wilt bepalen of een artikel alleen voor downloaden is, voert u sp_helpmergearticle uit en controleert u de waarde van upload_options voor het artikel in de resultaatset.

  2. Als de waarde die wordt geretourneerd in stap 1 0 is, voert u sp_changemergearticle uit, geeft u een waarde van subscriber_upload_options op, @propertyeen waarde van 1 voor @force_invalidate_snapshot en @force_reinit_subscription, en een waarde van 1 of 2 waarvoor @valueovereenkomt met het volgende gedrag:

    • 1 - Wijzigingen zijn toegestaan bij de abonnee, maar worden niet geüpload naar de Publisher.

    • 2 - Wijzigingen zijn niet toegestaan bij de abonnee.

      Note

      Als de brontabel voor een artikel al in een andere publicatie is gepubliceerd, moet het gedrag alleen-downloaden hetzelfde zijn voor beide artikelen.

Interactieve conflictoplossing

Microsoft SQL Server replicatie biedt een interactieve resolver, waarmee u conflicten handmatig kunt oplossen tijdens synchronisatie op aanvraag in Microsoft Windows Synchronization Manager. Nadat interactieve resolutie is ingeschakeld, lost u conflicten interactief op tijdens de synchronisatie met behulp van de Interactive Resolver. De Interactive Resolver is beschikbaar via het Microsoft Windows Synchronization Manager. Zie Een abonnement synchroniseren met Windows Synchronization Manager (Windows Synchronization Manager) voor meer informatie.

Recommendations

  • Als een synchronisatie buiten Windows Synchronization Manager wordt uitgevoerd (als geplande synchronisatie of synchronisatie op aanvraag in SQL Server Management Studio of Replicatiemonitor), worden conflicten automatisch opgelost zonder tussenkomst van de gebruiker, met behulp van de standaardconflictoplossing die is opgegeven voor het artikel. Zie Interactive Conflict Resolution voor meer informatie.

SQL Server Management Studio gebruiken

Interactieve conflictoplossing inschakelen voor een artikel

  1. Selecteer een tabel op de pagina Artikelen van de wizard Nieuwe publicatie of in het dialoogvenster Publicatie-eigenschappen - <Publicatie>. Zie Een publicatie maken en publicatie-eigenschappen weergeven en wijzigen voor meer informatie over het gebruik van de wizard en het openen van het dialoogvenster.
  2. Klik op Artikeleigenschappen en klik vervolgens op Eigenschappen van gemarkeerd tabelartikelinstellen of Eigenschappen van alle tabelartikelen instellen.
  3. Klik op het tabblad Resolver op de pagina Artikeleigenschappen - <Artikel> of Artikeleigenschappen - <ArticleType>.
  4. Selecteer Abonnee toestaan om conflicten interactief op te lossen tijdens synchronisatie op aanvraag.
  5. Kies OK.
  6. Als u zich in het dialoogvenster Publicatie-eigenschappen - <Publicatie> bevindt, klikt u op OK om het dialoogvenster op te slaan en te sluiten.

Opgeven dat een abonnement interactieve conflictoplossing moet gebruiken

  1. Geef in het dialoogvenster Abonnementseigenschappen - <Subscriber>: <SubscriptionDatabase> een waarde op van Waar voor de optie Conflicten oplossen interactief . Zie Eigenschappen voor pushabonnementen weergeven en wijzigen voor meer informatie over het openen van dit dialoogvenster en eigenschappen voor pull-abonnementen weergeven en wijzigen.
  2. Kies OK.

Gebruik Transact-SQL

U kunt programmatisch opgeven dat een abonnee deze grafische interface gebruikt om artikelconflicten op te lossen wanneer een pull-abonnement voor een samenvoegpublicatie wordt gemaakt. Alleen conflicten in artikelen die deze optie ondersteunen, worden weergegeven in de interactieve resolver.

Een pull-abonnement voor samenvoegen maken dat gebruikmaakt van de Interactive Resolver

  1. Voer op de Publisher in de publicatiedatabase sp_helpmergearticle uit, waarbij u @publication opgeeft. Noteer de waarde van allow_interactive_resolver voor elk artikel in de resultatenset waarvoor de interactieve resolver wordt gebruikt.
    • Als deze waarde 1 is, wordt de interactieve resolver gebruikt.
    • Als deze waarde 0 is, moet u eerst de interactieve resolver voor elk artikel inschakelen. U doet dit door sp_changemergearticle uit te voeren, waarbij u @publication, @article, een waarde van allow_interactive_resolver voor @property en een waarde van true voor @value opgeeft.
  2. Voer bij de Abonnee op de abonnementsdatabase sp_addmergepullsubscription uit. Zie Een pull-abonnement maken voor meer informatie.
  3. Voer bij Abonnee in de abonnementsdatabase sp_addmergepullsubscription_agent uit, waarbij u de volgende parameters opgeeft:
    • @publisher, @publisher_db (de gepubliceerde database) en @publication.
    • Een waarde van true voor @enabled_for_syncmgr.
    • Een waarde van true voor @use_interactive_resolver.
    • De beveiligingsaccountgegevens die vereist zijn voor de Merge Agent. Zie Een pull-abonnement maken voor meer informatie.
  4. Voer sp_addmergesubscription uit in de Publisher van de publicatiedatabase.

Een artikel definiëren dat ondersteuning biedt voor de Interactieve Resolver

  1. Voer sp_addmergearticle uit in de Publisher op de publicatiedatabase. Geef de naam op van de publicatie waartoe het artikel behoort voor @publication, een naam voor het artikel voor @article, het databaseobject dat wordt gepubliceerd voor @source_object, en een waarde van true voor @allow_interactive_resolver. Zie Een artikel definiëren voor meer informatie.

Bijhouden van conflicten en oplossingsniveau voor samengevoegde artikelen

In dit onderwerp wordt beschreven hoe u het niveau voor conflictcontrole en -oplossing voor samenvoegingsartikelen in SQL Server kunt opgeven met SQL Server Management Studio of Transact-SQL.

Wanneer een abonnement op een samenvoegpublicatie wordt gesynchroniseerd, controleert replicatie op conflicten die worden veroorzaakt door wijzigingen in dezelfde gegevens die zijn aangebracht in zowel de Publisher als de abonnee. U kunt opgeven of er conflicten worden gedetecteerd op rijniveau, waarbij elke wijziging in de rij wordt beschouwd als een conflict of kolomniveau, waarbij alleen wijzigingen in dezelfde rij en kolom als conflict worden beschouwd. Het oplossen van conflicten voor artikelen vindt plaats op rijniveau. Zie Conflicten in logische records detecteren en oplossen voor meer informatie over conflictdetectie en -oplossing wanneer logische records worden gebruikt.

Beperkingen en beperkingen

  • Als u het traceringsniveau wijzigt nadat abonnementen zijn geïnitialiseerd, moeten deze abonnementen opnieuw worden geïnitialiseerd. Zie Publicatie- en artikeleigenschappen wijzigen voor meer informatie over de effecten van eigenschappenwijzigingen.
  • Bij het bijhouden van rij- en kolomniveau wordt conflictoplossing altijd uitgevoerd op rijniveau: de winnende rij overschrijft de verliezende rij. Met samenvoegreplicatie kunt u ook opgeven dat conflicten worden bijgehouden en opgelost op het niveau van de logische record, maar deze opties zijn niet beschikbaar vanuit SQL Server Management Studio. Zie Een logische recordrelatie tussen samenvoegtabelartikelen definiëren voor informatie over het instellen van deze opties van opgeslagen procedures voor replicatie.

SQL Server Management Studio gebruiken

Geef tracering op rij- of kolomniveau op voor samenvoegingsartikelen op het tabblad Eigenschappen van het dialoogvenster Artikeleigenschappen, dat beschikbaar is in de wizard Nieuwe publicatie en het dialoogvenster Publicatie-eigenschappen - <Publicatie>. Zie Publicatie maken en Publicatie-eigenschappen weergeven en wijzigen voor meer informatie over het gebruik van de wizard en het openen van het dialoogvenster.

Tracering op rij- of kolomniveau opgeven

  1. Selecteer een tabel op de pagina Artikelen van de wizard Nieuwe publicatie of in het dialoogvenster Publicatie-eigenschappen - <Publicatie>.
  2. Klik op Artikeleigenschappen en klik vervolgens op Eigenschappen van gemarkeerd tabelartikelinstellen of Eigenschappen van alle tabelartikelen instellen.
  3. Selecteer op het tabblad Eigenschappen van het dialoogvenster Artikeleigenschappen <Artikel> een van de volgende waarden voor de eigenschap Traceringsniveau: Tracering op rijniveau of Tracering op kolomniveau.
  4. Als u zich in het dialoogvenster Publicatie-eigenschappen - <Publicatie> bevindt, klikt u op OK om het dialoogvenster op te slaan en te sluiten.

Gebruik Transact-SQL

Opties voor conflicttracking opgeven voor een nieuw samenvoegartikel

  1. Voer in de Publisher van de publicatiedatabase sp_addmergearticle uit en geef een van de volgende waarden op voor@column_tracking:

    • true : gebruik tracering op kolomniveau voor het artikel.
    • false - Gebruik tracering op rijniveau, wat de standaardinstelling is.

Opties voor het bijhouden van conflicten wijzigen voor een samenvoegartikel

  1. Voer sp_helpmergearticle uit om de opties voor conflicttracking voor een samenvoegingsartikel te bepalen. Noteer de waarde van de optie column_tracking in de resultatenset voor het artikel. Een waarde van 1 betekent dat bijhouden op kolomniveau wordt gebruikt en een waarde van 0 betekent dat bijhouden op rijniveau wordt gebruikt.

  2. Voer sp_changemergearticle uit op de publicatiedatabase bij de Publisher. Geef een waarde op van column_tracking voor @property en een van de volgende waarden voor @value:

    • true : gebruik tracering op kolomniveau voor het artikel.
    • false : gebruik tracering op rijniveau. Dit is de standaardinstelling.

    Geef een waarde van 1 op voor beide @force_invalidate_snapshot en @force_reinit_subscription.

Bijhouden van verwijderingen beheren

Note

Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie.

Standaard synchroniseert DELETE samenvoegreplicatie opdrachten tussen de Publisher en Abonnee. Met samenvoegreplicatie kunt u rijen in de abonnementsdatabase behouden, zelfs wanneer ze uit de publicatie zijn verwijderd en omgekeerd. U kunt programmatisch opgeven dat DELETE opdrachten worden genegeerd bij het maken van een nieuw artikel of u kunt deze functionaliteit op een later tijdstip inschakelen met behulp van opgeslagen replicatieprocedures.

Important

Het inschakelen van deze functionaliteit resulteert in niet-convergentie, wat betekent dat gegevens die aanwezig zijn bij de abonnee niet nauwkeurig overeenkomen met gegevens in de Publisher. U moet uw eigen mechanisme implementeren voor het handmatig verwijderen van verwijderde rijen.

Opgeven dat verwijderingen worden genegeerd voor een nieuw samenvoegartikel

Voer sp_addmergearticle (Transact-SQL) uit in de Publisher van de publicatiedatabase. Geef voor @delete_tracking de waarde false op. Zie Een artikel definiëren voor meer informatie.

Note

Als de brontabel voor een artikel al in een andere publicatie is gepubliceerd, moet de waarde van delete_tracking hetzelfde zijn voor beide artikelen.

Opgeven dat verwijderingen worden genegeerd voor een bestaand samenvoegartikel

  1. Als u wilt bepalen of foutcompensatie is ingeschakeld voor een artikel, voert u sp_helpmergearticle (Transact-SQL) uit en noteert u de waarde van delete_tracking in de resultatenset. Als deze waarde 0 is, worden verwijderingen al genegeerd.

  2. Als de waarde uit stap 1 1 is, voert u sp_changemergearticle (Transact-SQL) uit in de Publisher op de publicatiedatabase. Geef voor @property een waarde op van delete_tracking, en voor @value een waarde van false.

    Note

    Als de brontabel voor een artikel al in een andere publicatie is gepubliceerd, moet de waarde van delete_tracking hetzelfde zijn voor beide artikelen.

Verwerkingsorder

Met samenvoegreplicatie kunt u de volgorde opgeven waarin artikelen worden verwerkt door de Merge Agent tijdens het synchronisatieproces. U kunt programmatisch een order aan elk artikel toewijzen wanneer u een artikel maakt met behulp van opgeslagen replicatieprocedures. Artikelen worden verwerkt in volgorde van laagste naar hoogste waarde. Als twee artikelen dezelfde waarde hebben, worden ze gelijktijdig verwerkt.

Hoe de verwerkingsvolgorde wordt bepaald

Tijdens de samenvoegsynchronisatie worden artikelen standaard verwerkt in de volgorde die vereist is voor de afhankelijkheden tussen objecten, inclusief de declaratieve referentiële integriteitsbeperkingen (DRI) die zijn gedefinieerd in de basistabellen. Verwerking omvat het inventariseren van de wijzigingen in een tabel en het toepassen van deze wijzigingen. Als er geen DRI aanwezig is, maar joinfilters of logische records bestaan tussen tabelartikelen, worden de artikelen verwerkt in de volgorde die is vereist voor de filters en logische records. Artikelen die niet zijn gerelateerd aan een ander artikel via DRI, joinfilters, logische records of andere afhankelijkheden worden verwerkt volgens de bijnaam van het artikel in de systeemtabel sysmergearticles (Transact-SQL).

Overweeg een publicatie met de tabellen SalesOrderHeader en SalesOrderDetail met een primaire-sleutelkolom SalesOrderID in de tabel SalesOrderHeader en een bijbehorende refererende-sleutelkolom SalesOrderID in de tabel SalesOrderDetail . Tijdens de synchronisatie voorkomt samenvoegreplicatie schendingen van refererende sleutels door nieuwe rijen in SalesOrderHeader in te voegen voordat gekoppelde rijen in SalesOrderDetail worden ingevoegd. Op dezelfde manier worden rijen uit SalesOrderDetail verwijderd voordat de bijbehorende rij wordt verwijderd uit SalesOrderHeader.

In sommige toepassingen wordt referentiële integriteit echter afgedwongen via databasetriggers of op toepassingsniveau in plaats van via DRI. Gezien de hierboven beschreven publicatie kan de tabel SalesOrderDetail in plaats van DRI een invoegtrigger hebben die ervoor zorgt dat de bijbehorende rij in de tabel SalesOrderHeader bestaat voordat een invoegbewerking wordt toegestaan. SalesOrderHeader kan een verwijdertrigger hebben die ervoor zorgt dat er geen gekoppelde rijen in SalesOrderDetail zijn voordat u een verwijdering toestaat. Samenvoegreplicatie houdt geen rekening met triggers bij het bepalen van de verwerkingsvolgorde van artikelen, omdat samenvoegreplicatie niet kan bepalen wat het resultaat van een trigger zal zijn voordat die is geactiveerd. Op dezelfde manier kan replicatie geen rekening houden met beperkingen die zijn gedefinieerd op toepassingsniveau.

Wanneer referentiële integriteit wordt gehandhaafd via triggers of op toepassingsniveau, moet u de volgorde opgeven waarin de artikelen moeten worden verwerkt. In het voorbeeld met triggers geeft u op dat de tabel SalesOrderHeader moet worden verwerkt vóór SalesOrderDetail, omdat artikelvolgorde is gebaseerd op de invoegvolgorde. Met samenvoegreplicatie wordt de volgorde voor verwijderingen automatisch omgekeerd. Samenvoegreplicatie mislukt niet zonder de volgorde van artikelen, omdat de Merge Agent artikelen blijft verwerken als er een schending van een beperking optreedt; vervolgens probeert deze agent alle bewerkingen die zijn mislukt opnieuw nadat andere artikelen zijn verwerkt. Het opgeven van een artikelvolgorde voorkomt gewoon nieuwe pogingen en de aanvullende verwerking die eraan is gekoppeld. Als u een onjuiste volgorde opgeeft (bijvoorbeeld een die resulteert in detailrecords die vóór headerrecords worden verwerkt), wordt de samenvoegreplicatie opnieuw verwerkt totdat deze is voltooid.

Nieuw artikel

  1. Voer sp_addmergearticle (Transact-SQL) uit in de Publisher van de publicatiedatabase. Geef een geheel getal op dat de verwerkingsvolgorde voor het artikel vertegenwoordigt @processing_order. Zie Een artikel definiëren voor meer informatie.

    Note

    Bij het maken van geordende artikelen moet u hiaten laten tussen de waarden van de artikelvolgorde. Hierdoor kunt u in de toekomst eenvoudiger nieuwe waarden instellen. Als u bijvoorbeeld drie artikelen hebt waarvoor u een vaste verwerkingsvolgorde moet opgeven, stelt u de waarde in op respectievelijk 10, 20 en 30 in plaats van @processing_order 1, 2 en 3.

Bestaand artikel

  1. Als u de verwerkingsvolgorde van een artikel wilt bepalen, voert u sp_helpmergearticle (Transact-SQL) uit en noteert u de waarde van processing_order in de resultatenset.
  2. Voer sp_changemergearticle (Transact-SQL) uit in de Publisher van de publicatiedatabase. Geef een waarde op van processing_order voor @property en een geheel getal dat de verwerkingsvolgorde vertegenwoordigt.@value