Freigeben über


Angeben eines Mergeartikelkonfliktlösers

In diesem Thema wird beschrieben, wie Sie einen Mergeartikellöser in SQL Server 2014 mithilfe von SQL Server Management Studio oder Transact-SQL angeben.

In diesem Thema

Vorbereitungen

Empfehlungen

  • Die Mergereplikation unterstützt die folgenden Typen von Artikelkonfliktlösern:

  • Wenn Sie einen anderen als den Standardkonfliktlöser verwenden möchten, müssen Sie den Konfliktlöser auf den Computer kopieren und dort registrieren, auf dem der Merge-Agent ausgeführt wird (ein Geschäftslogikhandler muss auch auf dem Verleger registriert werden). Der Merge-Agent wird auf folgenden Computern ausgeführt:

    • Dem Verteiler für ein Pushabonnement

    • Dem Abonnent für ein Pullabonnement

    • Dem Server mit Microsoft Internetinformationsdienste (IIS) für ein Pullabonnement, das die Websynchronisierung verwendet.

Verwendung von SQL Server Management Studio

Nachdem der Resolver registriert wurde, geben Sie an, dass ein Artikel den Resolver auf der Registerkarte Resolver des Dialogfelds Artikeleigenschaften – <Artikel> verwenden soll, das im Assistenten für neue Veröffentlichung und im Dialogfeld Veröffentlichungseigenschaften – <Veröffentlichung> verfügbar ist. Weitere Informationen zum Verwenden des Assistenten sowie Zugriff auf das Dialogfeld finden Sie unter Erstellen einer Veröffentlichung und Anzeigen und Ändern von Veröffentlichungseigenschaften.

So geben Sie einen Konfliktlöser an

  1. Wählen Sie auf der Seite Artikel des Assistenten für neue Veröffentlichung oder im Dialogfeld Veröffentlichungseigenschaften – <Veröffentlichung> eine Tabelle aus.

  2. Klicken Sie auf Artikeleigenschaftenund anschließend auf Eigenschaften des hervorgehobenen Artikels festlegen.

  3. Klicken Sie auf der Seite Artikeleigenschaften – <Artikel> auf die Registerkarte Resolver .

  4. Wählen Sie Benutzerdefinierten Konfliktlöser verwenden (registriert auf dem Verteiler) aus, und klicken Sie dann in der Liste auf den Konfliktlöser.

  5. Sind für den Konfliktlöser Eingaben erforderlich (z. B. ein Spaltenname), geben Sie sie im Textfeld Geben Sie die vom Konfliktlöser benötigten Informationen ein an.

  6. Klicken Sie auf OK.

  7. Wiederholen Sie diesen Vorgang für jeden Artikel, der einen Konfliktlöser erfordert.

Verwenden von Transact-SQL

So registrieren Sie einen benutzerdefinierten Konfliktlöser

  1. Wenn Sie einen eigenen benutzerdefinierten Konfliktlöser registrieren möchten, erstellen Sie einen der folgenden Typen:

  2. Um zu ermitteln, ob der gewünschte Resolver bereits registriert ist, führen Sie sp_enumcustomresolvers (Transact-SQL) auf dem Verleger für eine beliebige Datenbank aus. Daraufhin werden eine Beschreibung des benutzerdefinierten Konfliktlösers sowie der Klassenbezeichner (CLSID) für jeden auf dem Verteiler registrierten COM-basierten Konfliktlöser bzw. Informationen zur verwalteten Assembly für jeden auf dem Verteiler registrierten Geschäftslogikhandler angezeigt.

  3. Wenn der gewünschte benutzerdefinierte Resolver noch nicht registriert ist, führen Sie sp_registercustomresolver (Transact-SQL) auf dem Verteiler aus. Geben Sie einen Namen für den Resolver für @article_resolver an. Für einen Geschäftslogikhandler ist dies der Anzeigename der Assembly. Geben Sie für COM-basierte Resolver die CLSID der DLL für @resolver_clsid an, und geben Sie für einen Geschäftslogikhandler den Wert true für @is_dotnet_assembly, den Namen der Assembly für @dotnet_assembly_name und den vollqualifizierten Namen der Klasse an, die für @dotnet_class_name überschreibtBusinessLogicModule.

    Hinweis

    Wenn eine Geschäftslogikhandlerassembly nicht im selben Verzeichnis wie die ausführbare Merge-Agent bereitgestellt wird, im selben Verzeichnis wie die Anwendung, die die Merge-Agent synchron startet, oder im globalen Assemblycache (GAC), müssen Sie den vollständigen Pfad mit dem Assemblynamen für @dotnet_assembly_name angeben.

  4. Wenn der Konfliktlöser ein COM-basierter Konfliktlöser ist, gehen Sie wie folgt vor:

    • Kopieren Sie die DLL für den benutzerdefinierten Konfliktlöser auf den Verteiler für Pushabonnements oder auf den Abonnenten von Pullabonnements.

      Hinweis

      Benutzerdefinierte Microsoft-Resolver finden Sie im Verzeichnis C:\Programme\Microsoft SQL Server\120\COM.

    • Verwenden Sie regsvr32.exe, um die benutzerdefinierte Konfliktlöser-DLL im Betriebssystem zu registrieren. Führen Sie beispielsweise folgenden Befehl an der Eingabeaufforderung aus, um den SQL Server -Konfliktlöser Zusatz zu registrieren:

      regsvr32 ssradd.dll  
      
  5. Wenn der Resolver ein Geschäftslogikhandler ist, stellen Sie die Assembly im gleichen Ordner wie die ausführbare Merge-Agent (replmerg.exe), im gleichen Ordner wie eine Anwendung, die die Merge-Agent aufruft, oder in dem Ordner bereit, der für den parameter @dotnet_assembly_name in Schritt 3 angegeben wurde.

    Hinweis

    Der Standardinstallationsspeicherort der Merge-Agent ausführbaren Datei ist C:\Programme\Microsoft SQL Server\120\COM.

So geben Sie in der Definition eines Mergeartikels einen benutzerdefinierten Konfliktlöser an

  1. Wenn Sie einen eigenen benutzerdefinierten Konfliktlöser verwenden möchten, erstellen und registrieren Sie den Konfliktlöser wie oben beschrieben.

  2. Führen Sie auf dem Verleger sp_enumcustomresolvers (Transact-SQL) aus, und notieren Sie sich den Namen des gewünschten benutzerdefinierten Resolvers im Wertfeld des Resultsets.

  3. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addmergearticle (Transact-SQL) aus. Geben Sie den Namen des Resolvers aus Schritt 2 für @article_resolver und alle erforderlichen Eingaben für den benutzerdefinierten Resolver mithilfe des @resolver_info-Parameters an. Bei auf gespeicherten Prozeduren basierenden benutzerdefinierten Resolvern ist @resolver_info der Name der gespeicherten Prozedur. Weitere Informationen zu den für Microsoft erforderlichen Eingaben für Konfliktlöser finden Sie unter Microsoft COM-Based Resolvers (Microsoft COM-basierte Konfliktlöser).

So geben Sie einen benutzerdefinierten Konfliktlöser für einen vorhandenen Mergeartikel an oder ändern diesen

  1. Um festzustellen, ob ein benutzerdefinierter Resolver für einen Artikel definiert wurde, oder um den Namen des Resolvers abzurufen, führen Sie sp_helpmergearticle (Transact-SQL) aus. Wenn ein benutzerdefinierter Konfliktlöser für einen Artikel definiert wurde, wird dessen Namen im Feld article_resolver angezeigt. Alle dem Konfliktlöser übergegebene Eingaben werden im Feld resolver_info des Resultsets angezeigt.

  2. Führen Sie auf dem Verleger sp_enumcustomresolvers (Transact-SQL) aus, und notieren Sie sich den Namen des gewünschten benutzerdefinierten Resolvers im Wertfeld des Resultsets.

  3. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_changemergearticle (Transact-SQL) aus. Geben Sie den Wert article_resolver an, einschließlich des vollständigen Pfads für Geschäftslogikhandler, für @property und den Namen des gewünschten benutzerdefinierten Resolvers aus Schritt 2 für @value.

  4. Um alle erforderlichen Eingaben für den benutzerdefinierten Resolver zu ändern, führen Sie sp_changemergearticle (Transact-SQL) erneut aus. Geben Sie den Wert resolver_info für @property und alle erforderlichen Eingaben für den benutzerdefinierten Resolver für @value an. Bei auf gespeicherten Prozeduren basierenden benutzerdefinierten Resolvern ist @resolver_info der Name der gespeicherten Prozedur. Weitere Informationen zu den erforderlichen Eingaben finden Sie unter Microsoft COM-Based Resolvers (Microsoft COM-basierte Konfliktlöser).

So heben Sie die Registrierung eines benutzerdefinierten Konfliktlösers auf

  1. Führen Sie auf dem Verleger sp_enumcustomresolvers (Transact-SQL) aus, und notieren Sie sich den Namen des zu entfernenden benutzerdefinierten Resolvers im Wertfeld des Resultsets.

  2. Führen Sie sp_unregistercustomresolver (Transact-SQL) auf dem Verteiler aus. Geben Sie den vollständigen Namen des benutzerdefinierten Resolvers aus Schritt 1 für @article_resolver an.

Beispiele (Transact-SQL)

In diesem Beispiel wird ein neuer Artikel erstellt und angegeben, dass der SQL Server -Konfliktlöser "Mittelwerterstellung" zur Berechnung des Mittelwerts der Spalte UnitPrice verwendet werden soll, wenn Konflikte auftreten.

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';

EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_object = @article, 
    @article_resolver = 'Microsoft SQL Server Averaging Conflict Resolver', 
    @resolver_info = 'UnitPrice';
GO

In diesem Beispiel wird ein Artikel dahingehend geändert, dass der SQL Server -Konfliktlöser "Zusatz" zur Berechnung der Summe der Spalte UnitsOnOrder verwendet werden soll, wenn Konflikte auftreten.

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';

EXEC sp_changemergearticle 
    @publication = @publication, 
    @article = @article, 
    @property='article_resolver', 
    @value='Microsoft SQL Server Additive Conflict Resolver';

EXEC sp_changemergearticle 
    @publication = @publication, 
    @article = @article, 
    @property='resolver_info', 
    @value='UnitsOnOrder';
GO

Weitere Informationen

Advanced Merge Replication Conflict Detection and Resolution (Erweiterte Konflikterkennung und -lösung bei der Mergereplikation)
Implementieren eines Geschäftslogikhandlers für einen Mergeartikel