Especificar un solucionador de artículos de mezcla
En este tema se describe cómo especificar un solucionador de artículos de combinación en SQL Server 2014 mediante SQL Server Management Studio o Transact-SQL.
En este tema
Antes de empezar:
Para especificar un solucionador de artículos de mezcla con:
Antes de empezar
Recomendaciones
La replicación de mezcla admite los siguientes tipos de solucionadores de artículos:
El solucionador predeterminado. El comportamiento del solucionador predeterminado depende de si se trata de una suscripción de cliente o de servidor. Para obtener más información sobre cómo especificar el tipo de suscripción, vea Especificar un tipo de suscripción de mezcla y una prioridad de resolución de conflictos (SQL Server Management Studio).
Un solucionador personalizado, escrito por el usuario, que puede ser un controlador de lógica de negocios (escrito en código administrado) o un solucionador personalizado basado en COM. Para más información, consulte Replicación de mezcla avanzada: detección y resolución de conflictos. Si necesita implementar lógica personalizada que se ejecute para cada fila replicada, no solo para filas con conflictos, vea Implementar un controlador de lógica de negocios para un artículo de mezcla.
Un solucionador estándar basado en COM, incluido en Microsoft SQL Server.
Para utilizar un solucionador distinto del predeterminado, debe copiarlo en el equipo en el que se ejecuta el Agente de mezcla y registrarlo (si utiliza un controlador de lógica de negocios, también debe registrarlo en el publicador). El Agente de mezcla se ejecuta en:
El distribuidor, para una suscripción de inserción.
El suscriptor, para una suscripción de extracción.
El servidor con Microsoft Internet Information Services (IIS), para una suscripción de extracción que utilice la sincronización web.
Uso de SQL Server Management Studio
Una vez registrado el solucionador, especifique que un artículo debe usar el solucionador en la pestaña Resolver del cuadro de diálogo Propiedades del artículo : <artículo> , que está disponible en el Asistente para nueva publicación y en el cuadro de diálogo Propiedades de la publicación - <Publicación> . Para obtener más información sobre el uso del asistente y el acceso al cuadro de diálogo, consulte Create a Publication (Crear una publicación) y Ver y modificar propiedades de publicación.
Para especificar un solucionador
En la página Artículos del Asistente para nueva publicación o en el cuadro de diálogo Propiedades de la publicación : <publicación> , seleccione una tabla.
Haga clic en Propiedades del artículoy, a continuación, haga clic en Establecer propiedades del artículo de tabla resaltado.
En la página Propiedades del artículo : <artículo> , haga clic en la pestaña Resolver .
Seleccione Usar un solucionador personalizado (registrado en el distribuidor) y después, en la lista, haga clic en el solucionador.
Si el solucionador requiere una entrada (por ejemplo, un nombre de columna), especifíquela en el cuadro de texto Especifique la información necesaria para el solucionador .
Haga clic en OK.
Repita este proceso para cada artículo que necesite un solucionador.
Usar Transact-SQL
Para registrar un solucionador de conflictos personalizado
Si piensa registrar su propio solucionador de conflictos personalizado, cree uno de los tipos siguientes:
Solucionador basado en código administrado como un controlador de lógica de negocios. Para más información, consulte Implementar un controlador de lógica de negocios para un artículo de mezcla.
Solucionador basado en procedimientos almacenados y solucionador basado en COM. Para más información, consulte Implementación de un solucionador de conflictos personalizado para un artículo de mezcla.
Para determinar si el solucionador deseado ya está registrado, ejecute sp_enumcustomresolvers (Transact-SQL) en el publicador en cualquier base de datos. Esto muestra una descripción del solucionador personalizado así como del identificador de clase (CLSID) de cada solucionador basado en COM registrado en el distribuidor o información sobre el ensamblado administrado de cada controlador de lógica de negocios registrado en el distribuidor.
Si el solucionador personalizado deseado aún no está registrado, ejecute sp_registercustomresolver (Transact-SQL) en el distribuidor. Especifique un nombre para el solucionador para @article_resolver; para un controlador de lógica de negocios, este es el nombre descriptivo del ensamblado. En el caso de los solucionadores basados en COM, especifique el CLSID del archivo DLL para @resolver_clsid y, para un controlador de lógica de negocios, especifique un valor de
true
para @is_dotnet_assembly, el nombre del ensamblado para @dotnet_assembly_name y el nombre completo de la clase que invalida BusinessLogicModule para @dotnet_class_name.Nota
Si un ensamblado de controlador de lógica de negocios no se implementa en el mismo directorio que el ejecutable de Agente de mezcla, en el mismo directorio que la aplicación que inicia el Agente de mezcla de forma sincrónica o en la caché global de ensamblados (GAC), debe especificar la ruta de acceso completa con el nombre del ensamblado para @dotnet_assembly_name.
Si el solucionador es un solucionador basado en COM:
Copie la DLL del solucionador personalizado en el distribuidor para la suscripción de inserción o en el suscriptor para las suscripciones de extracción.
Nota
Los solucionadores personalizados de Microsoft se pueden encontrar en el directorio C:\Archivos de programa\Microsoft SQL Server\120\COM.
Utilice regsvr32.exe para registrar la DLL del solucionador personalizado con el sistema operativo. Por ejemplo, al ejecutar lo siguiente desde el símbolo del sistema se registra el solucionador de conflictos de suma de SQL Server :
regsvr32 ssradd.dll
Si el solucionador es un controlador de lógica de negocios, implemente el ensamblado en la misma carpeta que el ejecutable de Agente de mezcla (replmerg.exe), en la misma carpeta que una aplicación que invoca el Agente de mezcla o en la carpeta especificada para el parámetro @dotnet_assembly_name en el paso 3.
Nota
La ubicación de instalación predeterminada del archivo ejecutable de Agente de mezcla es C:\Archivos de programa\Microsoft SQL Server\120\COM.
Para especificar un solucionador personalizado al definir un artículo de mezcla
Si tiene previsto utilizar un solucionador de conflictos personalizado, cree y registre el solucionador mediante el procedimiento anterior.
En el publicador, ejecute sp_enumcustomresolvers (Transact-SQL) y anote el nombre del solucionador personalizado deseado en el campo de valor del conjunto de resultados.
En el publicador de la base de datos de publicación, ejecute sp_addmergearticle (Transact-SQL). Especifique el nombre del solucionador del paso 2 para @article_resolver y cualquier entrada necesaria para el solucionador personalizado mediante el parámetro @resolver_info . En el caso de los solucionadores personalizados basados en procedimientos almacenados, @resolver_info es el nombre del procedimiento almacenado. Para más información sobre la entrada requerida por solucionadores de Microsoft, vea Solucionadores basados en Microsoft COM.
Para especificar o cambiar un solucionador personalizado para un artículo de mezcla existente
Para determinar si se ha definido un solucionador personalizado para un artículo o para obtener el nombre del solucionador, ejecute sp_helpmergearticle (Transact-SQL). Si hay un solucionador personalizado definido para el artículo, su nombre se mostrará en el campo article_resolver . Cualquier entrada proporcionada al solucionador se mostrará en el campo resolver_info del conjunto de resultados.
En el publicador, ejecute sp_enumcustomresolvers (Transact-SQL) y anote el nombre del solucionador personalizado deseado en el campo de valor del conjunto de resultados.
En el publicador de la base de datos de publicación, ejecute sp_changemergearticle (Transact-SQL). Especifique un valor de article_resolver, incluida la ruta de acceso completa para los controladores de lógica de negocios, para @property y el nombre del solucionador personalizado deseado del paso 2 para @value.
Para cambiar cualquier entrada necesaria para el solucionador personalizado, vuelva a ejecutar sp_changemergearticle (Transact-SQL). Especifique un valor de resolver_info para @property y cualquier entrada necesaria para el solucionador personalizado para @value. En el caso de los solucionadores personalizados basados en procedimientos almacenados, @resolver_info es el nombre del procedimiento almacenado. Para más información sobre la entrada requerida, vea Solucionadores basados en Microsoft COM.
Para eliminar del registro un solucionador de conflictos personalizado
En el publicador, ejecute sp_enumcustomresolvers (Transact-SQL) y anote el nombre del solucionador personalizado que se va a quitar en el campo de valor del conjunto de resultados.
Ejecute sp_unregistercustomresolver (Transact-SQL) en el distribuidor. Especifique el nombre completo del solucionador personalizado del paso 1 para @article_resolver.
Ejemplos (Transact-SQL)
En este ejemplo se crea un nuevo artículo y se especifica que se utilice el Solucionador de conflictos de cálculo de media de SQL Server para calcular la media de la columna UnitPrice cuando se produzcan conflictos.
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
Este ejemplo cambia un artículo para especificar que se use el Solucionador de conflictos de suma de SQL Server con el fin de calcular la suma de la columna UnitsOnOrder cuando se produzcan conflictos.
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
Consulte también
Replicación de mezcla avanzada: detección y resolución de conflictos
Implementar un controlador de lógica de negocios para un artículo de mezcla