Freigeben über


Festlegen eines Artikel-Zusammenführungs-Resolvers

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

In diesem Themenbereich

Bevor Sie beginnen

Empfehlungen

  • Die Zusammenführungsreplikation ermöglicht die folgenden Typen von Artikellösern:

  • Um einen anderen Resolver als den Standardlöser zu verwenden, müssen Sie den Resolver auf den Computer kopieren, auf dem der Zusammenführungs-Agent ausgeführt und registriert wird (wenn Sie einen Geschäftslogikhandler verwenden, muss er auch bei Publisher registriert werden). Der Merge-Agent läuft um:

    • Der Distributor für ein Pushabonnement

    • Der Abonnent für ein Pull-Abonnement

    • Der Iis-Server (Microsoft Internet Information Services) 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 zur Verwendung des Assistenten und zum Zugreifen auf das Dialogfeld finden Sie unter Erstellen einer Publikation und Ansicht und Ändern der Publikationseigenschaften.

So geben Sie einen Resolver 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 "Artikeleigenschaften" und dann auf " Eigenschaften des hervorgehobenen Tabellenartikels festlegen".

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

  4. Wählen Sie einen benutzerdefinierten Resolver (registriert im Distributor) aus, und klicken Sie dann in der Liste auf den Resolver.

  5. Wenn der Resolver Eingaben erfordert (z. B. einen Spaltennamen), geben Sie ihn in den Eingabeinformationen ein, die vom Resolver-Textfeld benötigt werden.

  6. Klicke auf OK.

  7. Wiederholen Sie diesen Vorgang für jeden Artikel, der einen Resolver erfordert.

Verwenden von Transact-SQL

So registrieren Sie einen benutzerdefinierten Konfliktlöser

  1. Wenn Sie beabsichtigen, Ihren eigenen benutzerdefinierten Konfliktlöser zu registrieren, erstellen Sie einen der folgenden Typen:

  2. Um festzustellen, ob der gewünschte Resolver bereits registriert ist, führen Sie sp_enumcustomresolvers (Transact-SQL) bei Publisher in einer beliebigen Datenbank aus. Dadurch wird eine Beschreibung des benutzerdefinierten Resolvers sowie der Klassenbezeichner (CLSID) für jeden COM-basierten Resolver angezeigt, der beim Distributor registriert ist, oder Informationen zur verwalteten Assembly für jeden Unternehmenslogikhandler, der beim Distributor registriert ist.

  3. Wenn der gewünschte benutzerdefinierte Resolver noch nicht registriert ist, führen Sie sp_registercustomresolver (Transact-SQL) beim Distributor 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 einen Wert für true@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

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

  4. Wenn es sich bei dem Resolver um einen COM-basierten Resolver handelt:

    • Kopieren Sie die benutzerdefinierte Resolver-DLL für Pushabonnements in den Distributor oder für Pullabonnements zum Abonnenten.

      Hinweis

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

    • Verwenden Sie regsvr32.exe, um die benutzerdefinierte Resolver-DLL beim Betriebssystem zu registrieren. Wenn Sie beispielsweise folgendes an der Eingabeaufforderung eingeben, wird der SQL Server Additive Conflict Resolver registriert:

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

    Hinweis

    Der Standardinstallationsspeicherort der ausführbaren Datei des Merge-Agents lautet "C:\Programme\Microsoft SQL Server\120\COM".

Geben Sie einen benutzerdefinierten Resolver an, wenn Sie einen Zusammenführungsartikel definieren.

  1. Wenn Sie beabsichtigen, einen benutzerdefinierten Konfliktlöser zu verwenden, erstellen und registrieren Sie den Resolver mithilfe des obigen Verfahrens.

  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 Resolvers aus Schritt 2 für @article_resolver und alle erforderlichen Eingaben für den benutzerdefinierten Resolver mithilfe des @resolver_info-Parameters an. Bei gespeicherten prozedurbasierten benutzerdefinierten Resolvern ist @resolver_info der Name der gespeicherten Prozedur. Weitere Informationen zu erforderlichen Eingaben für von Microsoft bereitgestellte Resolver finden Sie unter Microsoft COM-Based Resolver.

So geben oder ändern Sie einen benutzerdefinierten Resolver für einen vorhandenen Zusammenführungsartikel

  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 für den Artikel ein benutzerdefinierter Resolver definiert ist, wird der Name im Feld article_resolver angezeigt. Alle eingaben, die dem Resolver bereitgestellt werden, 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 beim Publisher auf der Publikationsdatenbank sp_changemergearticle (Transact-SQL) aus. Geben Sie einen Wert von 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 einen Wert von resolver_info für @property und alle erforderlichen Eingaben für den benutzerdefinierten Resolver für @value an. Bei gespeicherten prozedurbasierten benutzerdefinierten Resolvern ist @resolver_info der Name der gespeicherten Prozedur. Weitere Informationen zu erforderlichen Eingaben finden Sie unter Microsoft COM-Based Resolvers.

So heben Sie die Registrierung eines benutzerdefinierten Konfliktlösers auf

  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 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 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

Siehe auch

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