Angeben eines Mergeartikelkonfliktlösers
In diesem Thema wird beschrieben, wie ein Konfliktlöser für Mergeartikel in SQL Server 2012 mithilfe von SQL Server Management Studio oder Transact-SQL angegeben wird.
In diesem Thema
Vorbereitungen:
Empfehlungen
So geben Sie einen Mergeartikelkonfliktlöser an mit:
SQL Server Management Studio
Transact-SQL
Vorbereitungen
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 Mergeabonnementtyps und einer Konfliktlösungspriorität (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 Mergereplikation. 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 Mergeartikel nähere Informationen hierzu.
Einen COM-basierten Standardkonfliktlöser, der Bestandteil von Microsoft SQL Server 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
Dem Server mit Microsoft Internetinformationsdienste (IIS) für ein Pullabonnement, das die Websynchronisierung verwendet.
[Top]
Verwendung von SQL Server Management Studio
Nach dem Registrieren des Konfliktlösers geben Sie dessen Verwendung durch einen Artikel im Dialogfeld Artikeleigenschaften - <Artikel> auf der Registerkarte Konfliktlöser an. Dieses Dialogfeld ist im Assistenten für neue Veröffentlichung über das Dialogfeld Veröffentlichungseigenschaften - <Veröffentlichung> verfügbar. Weitere Informationen zum Verwenden des Assistenten sowie zum Zugreifen auf das Dialogfeld finden Sie unter Erstellen einer Veröffentlichung und Anzeigen und Ändern von Veröffentlichungseigenschaften.
So geben Sie einen Konfliktlöser an
Wählen Sie auf der Seite Artikel des Assistenten für neue Veröffentlichung bzw. des Dialogfelds Veröffentlichungseigenschaften - <Veröffentlichung> eine Tabelle aus.
Klicken Sie auf Artikeleigenschaften und anschließend auf Eigenschaften des hervorgehobenen Artikels festlegen.
Klicken Sie auf der Seite Artikeleigenschaften - <Artikel> auf die Registerkarte Konfliktlöser.
Wählen Sie Benutzerdefinierten Konfliktlöser verwenden (registriert auf dem Verteiler) aus, und klicken Sie dann in der Liste auf den Konfliktlöser.
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.
Klicken Sie auf OK.
Wiederholen Sie diesen Vorgang für jeden Artikel, der einen Konfliktlöser erfordert.
[Top]
Verwendung von Transact-SQL
So registrieren Sie einen benutzerdefinierten Konfliktlöser
Wenn Sie einen eigenen benutzerdefinierten Konfliktlöser registrieren möchten, erstellen Sie einen der folgenden Typen:
Einen auf verwaltetem Code basierenden Konfliktlöser als Geschäftslogikhandler. Weitere Informationen finden Sie unter Implementieren eines Geschäftslogikhandlers für einen Mergeartikel.
Konfliktlöser, der auf einer gespeicherten Prozedur und COM basiert. Weitere Informationen finden Sie unter Implementieren eines benutzerdefinierten Konfliktlösers für einen Mergeartikel.
Um zu bestimmen, ob der gewünschte Konfliktlöser 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.
Wenn der gewünschte benutzerdefinierte Konfliktlöser noch nicht registriert ist, führen Sie auf dem Verteiler sp_registercustomresolver (Transact-SQL) aus. Geben Sie den Namen des Konfliktlösers für @article_resolver an. Bei Geschäftslogikhandlern ist dies der Anzeigenamen der Assembly. Geben Sie für COM-basierte Konfliktlöser den Klassenbezeichner (CLSID) der DLL für @resolver_clsid an, und 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, die BusinessLogicModule überschreibt, für @dotnet_class_name an.
Hinweis Sie müssen den vollständigen Pfad mit dem Assemblynamen für @dotnet_assembly_name angeben, 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.
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 Konfliktlöser von Microsoft sind im C:\Programme\Microsoft SQL Server\110\ COM-Verzeichnis enthalten.
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
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 Standardinstallationspfad der ausführbaren Merge-Agent-Datei lautet C:\Programme\Microsoft SQL Server\110\COM.
So geben Sie in der Definition eines Mergeartikels einen benutzerdefinierten Konfliktlöser an
Wenn Sie einen eigenen benutzerdefinierten Konfliktlöser verwenden möchten, erstellen und registrieren Sie den Konfliktlöser wie oben beschrieben.
Führen Sie auf dem Verleger sp_enumcustomresolvers (Transact-SQL) aus, und notieren Sie den Namen des gewünschten benutzerdefinierten Konfliktlösers im value-Feld des Resultsets.
Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank 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 benutzerdefinierte Konfliktlöser finden Sie unter Microsoft COM-basierte Konfliktlöser.
So geben Sie einen benutzerdefinierten Konfliktlöser für einen vorhandenen Mergeartikel an oder ändern diesen
Um zu bestimmen, ob ein benutzerdefinierter Konfliktlöser für einen Artikel definiert wurde, oder um den Namen des Konfliktlösers 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.
Führen Sie auf dem Verleger sp_enumcustomresolvers (Transact-SQL) aus, und notieren Sie den Namen des gewünschten benutzerdefinierten Konfliktlösers im value-Feld des Resultsets.
Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_changemergearticle (Transact-SQL) aus. Geben Sie den Wert article_resolver, einschließlich der vollständigen Pfadangabe für Geschäftslogikhandler, für @property und den Namen des gewünschten benutzerdefinierten Konfliktslösers aus Schritt 2 für @value an.
Um erforderliche Eingaben für den benutzerdefinierten Konfliktlöser zu ändern, führen Sie nochmals sp_changemergearticle (Transact-SQL) aus. Geben Sie den Wert resolver_info für @property und alle erforderlichen Eingaben für den benutzerdefinierten Konfliktlöser für @value an. 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-basierte Konfliktlöser.
So heben Sie die Registrierung eines benutzerdefinierten Konfliktlösers auf
Führen Sie auf dem Verleger sp_enumcustomresolvers (Transact-SQL) aus, und notieren Sie den Namen des zu entfernenden benutzerdefinierten Konfliktlösers im value-Feld des Resultsets.
Führen Sie auf dem Verteiler sp_unregistercustomresolver (Transact-SQL) aus. Geben Sie den vollständigen Namen des benutzerdefinierten Konfliktlösers aus Schritt 1 für **an @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
[Top]
Siehe auch
Konzepte
Erweiterte Konflikterkennung und -lösung bei der Mergereplikation
Implementieren eines Geschäftslogikhandlers für einen Mergeartikel