Angeben eines Mergeartikelkonfliktlösers

Gilt für:SQL Server

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

Empfehlungen

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

    • Den Standardkonfliktlöser. Das Verhalten des Standardkonfliktlösers hängt davon ab, ob es sich um ein Clientabonnement oder ein Serverabonnement handelt. Weitere Informationen zum Angeben des Abonnementtyps finden Sie unter Angeben eines Seriendruckabonnementtyps und einer Konfliktauflösungspriorität (SQL Server Management Studio).For more information about specify subscription type, see Specify a Merge Subscription Type and Conflict Resolution Priority (SQL Server Management Studio).

    • Von Ihnen geschriebene benutzerdefinierte Konfliktlöser. Dabei kann es sich um einen Geschäftslogikhandler (in verwaltetem Code geschrieben) oder einen benutzerdefinierten COM-basierten Konfliktlöser handeln. Weitere Informationen finden Sie unter Erweiterte Konflikterkennung und -lösung bei der Mergereplikationangegeben wird. Wenn Sie benutzerdefinierte Logik implementieren müssen, die für jede replizierte Zeile und nicht nur für Konfliktzeilen ausgeführt werden muss, finden Sie unter Implementieren eines Geschäftslogikhandlers für einen Mergeartikelangegeben wird.

    • Ein combasierter Standard-Resolver, der in Microsoft SQL Server enthalten ist.

  • 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

    • Der Microsoft-Internetinformationsdienste (IIS)-Server 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 Publikation und im Dialogfeld "Publikationseigenschaften - <Publikation>" 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 Publikation oder im Dialogfeld "Publikationseigenschaften – <Publikation> " 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. Klickan 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 festzustellen, ob der gewünschte Resolver bereits registriert ist, führen Sie sp_enumcustomresolvers (Transact-SQL) in publisher in einer beliebigen 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) im Distributor aus. Geben Sie den Namen des Konfliktlösers für @article_resolveran. Bei Geschäftslogikhandlern ist dies der Anzeigenamen 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 überschrieben wirdBusinessLogicModule.

    Hinweis

    Sie müssen den vollständigen Pfad mit dem Assemblynamen für @dotnet_assembly_nameangeben, falls die Geschäftslogikhandler-Assembly nicht im gleichen Verzeichnis wie die ausführbare Datei für den Merge-Agent, im gleichen Verzeichnis wie die Anwendung, mit der der Merge-Agent synchron gestartet wird, oder im globalen Assemblycache (GAC) bereitgestellt wird.

  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\nnn\COM".

    • Verwenden Sie regsvr32.exe, um die benutzerdefinierte Konfliktlöser-DLL im Betriebssystem zu registrieren. Wenn Sie beispielsweise folgendes an der Eingabeaufforderung ausführen, wird der SQL Server Additive Conflict Resolver registriert:

      regsvr32 ssradd.dll  
      
  5. Wenn es sich beim Konfliktlöser um einen Geschäftslogikhandler handelt, stellen Sie die Assembly im gleichen Ordner wie die ausführbare Datei des Merge-Agents (replmerg.exe), im gleichen Ordner wie eine Anwendung, die den Merge-Agent aufruft, oder in dem in Schritt für den @dotnet_assembly_name -Parameter angegebenen Ordner bereit.

    Hinweis

    Der Standardinstallationsspeicherort der ausführbaren datei Merge-Agent lautet "C:\Programme\Microsoft SQL Server\nnn\COM".

Angeben eines benutzerdefinierten Konfliktlösers beim Definieren eines Mergeartikels

  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 im Publisher sp_enumcustomresolvers (Transact-SQL) aus, und notieren Sie sich den Namen des gewünschten benutzerdefinierten Resolvers im Wertfeld des Resultsets.

  3. Führen Sie im Publisher in der Publikationsdatenbank sp_addmergearticle (Transact-SQL) aus. Geben Sie den Namen des Konfliktlösers aus Schritt 2 für @article_resolver und gegebenenfalls alle für den benutzerdefinierten Konfliktlöser erforderlichen Eingaben im Parameter @resolver_info an. Bei benutzerdefinierten Konfliktlösern, die auf einer gespeicherten Prozedur basieren, entspricht @resolver_info dem Namen der gespeicherten Prozedur. Weitere Informationen zu erforderlichen Eingaben für von Microsoft bereitgestellte Resolver finden Sie unter Microsoft COM-basierte Resolver.

Angeben oder Ändern eines benutzerdefinierten Konfliktlösers für einen vorhandenen Mergeartikel

  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 im Publisher sp_enumcustomresolvers (Transact-SQL) aus, und notieren Sie sich den Namen des gewünschten benutzerdefinierten Resolvers im Wertfeld des Resultsets.

  3. Führen Sie im Publisher in der Publikationsdatenbank sp_changemergearticle (Transact-SQL) aus. Geben Sie den Wert article_resolver, einschließlich der vollständigen Pfadangabe für Geschäftslogikhandler, für @propertyund den Namen des gewünschten benutzerdefinierten Konfliktslösers aus Schritt 2 für @valuean.

  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 Konfliktlöser für @valuean. Bei benutzerdefinierten Konfliktlösern, die auf einer gespeicherten Prozedur basieren, entspricht @resolver_info dem Namen der gespeicherten Prozedur. Weitere Informationen zu den erforderlichen Eingaben finden Sie unter Microsoft COM-Based Resolvers (Microsoft COM-basierte Konfliktlöser).

Aufheben der Registrierung eines benutzerdefinierten Konfliktlösers

  1. Führen Sie im Publisher sp_enumcustomresolvers (Transact-SQL) aus, und notieren Sie sich den Namen des benutzerdefinierten Resolvers, der im Wertfeld des Resultsets entfernt werden soll.

  2. Führen Sie sp_unregistercustomresolver (Transact-SQL) beim Distributor aus. Geben Sie den vollständigen Namen des benutzerdefinierten Konfliktlösers aus Schritt 1 für an @article_resolveran.

Beispiele (Transact-SQL)

In diesem Beispiel wird ein neuer Artikel erstellt und angegeben, dass der SQL Server Averaging Conflict Resolver verwendet wird, um den Mittelwert der Spalte "UnitPrice " zu berechnen, 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 so geändert, dass der SQL Server Additive Conflict Resolver verwendet wird, um die Summe der Spalte "UnitsOnOrder " zu berechnen, 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

Erweiterte Konflikterkennung und -lösung der Mergereplikation
Implementieren eines Geschäftslogikhandlers für einen Mergeartikel