Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
So legen Sie einen Auflösungsmechanismus für Zusammenführungsartikel fest, indem Sie Folgendes verwenden:
Bevor Sie beginnen
Empfehlungen
Die Zusammenführungsreplikation ermöglicht die folgenden Typen von Artikellösern:
Der Standardlöser. Das Verhalten des Standardlösers hängt davon ab, ob es sich bei dem Abonnement um ein Clientabonnement oder ein Serverabonnement handelt. Weitere Informationen zum Angeben des Abonnementtyps finden Sie unter Angeben eines Zusammenschlussabonnementtyps und einer Konfliktauflösungspriorität (SQL Server Management Studio).
Ein benutzerdefinierter Resolver, den Sie geschrieben haben, kann ein Geschäftslogikhandler (geschrieben in verwaltetem Code) oder ein benutzerdefinierter COM-basierter Resolver sein. Weitere Informationen finden Sie unter Advanced Merge Replication Conflict Detection and Resolution. Wenn Sie benutzerdefinierte Logik implementieren müssen, die für jede replizierte Zeile ausgeführt wird, nicht nur für widersprüchliche Zeilen, siehe Implementieren eines Geschäftslogik-Handlers für einen Zusammenführungsartikel.
Ein combasierter Standard-Resolver, der in Microsoft SQL Server enthalten ist.
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
Wählen Sie auf der Seite " Artikel " des Assistenten für neue Publikation oder im Dialogfeld " Publikationseigenschaften – <Publikation> " eine Tabelle aus.
Klicken Sie auf "Artikeleigenschaften" und dann auf " Eigenschaften des hervorgehobenen Tabellenartikels festlegen".
Klicken Sie auf der Seite "Artikeleigenschaften – <Artikel> " auf die Registerkarte "Resolver ".
Wählen Sie einen benutzerdefinierten Resolver (registriert im Distributor) aus, und klicken Sie dann in der Liste auf den Resolver.
Wenn der Resolver Eingaben erfordert (z. B. einen Spaltennamen), geben Sie ihn in den Eingabeinformationen ein, die vom Resolver-Textfeld benötigt werden.
Klicke auf OK.
Wiederholen Sie diesen Vorgang für jeden Artikel, der einen Resolver erfordert.
Verwenden von Transact-SQL
So registrieren Sie einen benutzerdefinierten Konfliktlöser
Wenn Sie beabsichtigen, Ihren eigenen benutzerdefinierten Konfliktlöser zu registrieren, erstellen Sie einen der folgenden Typen:
Verwalteter codebasierter Resolver als Geschäftslogikhandler. Weitere Informationen finden Sie unter Implementierung eines Geschäftslogikhandlers für einen Zusammenführungsartikel.
Gespeicherter prozedurbasierter Resolver und COM-basierter Resolver. Weitere Informationen finden Sie unter Implementierung eines benutzerdefinierten Konfliktlösers für einen Zusammenführungsartikel.
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.
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.
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
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.
Wenn Sie beabsichtigen, einen benutzerdefinierten Konfliktlöser zu verwenden, erstellen und registrieren Sie den Resolver mithilfe des obigen Verfahrens.
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.
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
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.
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.
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.
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
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.
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