Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Este artículo describe cómo especificar un resolvedor de artículos de fusión en SQL Server utilizando SQL Server Management Studio o Transact-SQL.
Recomendaciones
La replicación por fusión soporta los siguientes tipos de resolvers 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 más información sobre cómo especificar el tipo de suscripción, consulte Especificar un tipo de suscripción de fusión y prioridad de resolución de conflictos.
Un resolvedor personalizado que escribes, que puede ser un manejador de lógica de negocio (escrito en código gestionado) o un solucionador personalizado basado en COM. Para más información, véase Replicación Avanzada de Fusiones - Detección y Resolución de Conflictos. Si necesitas implementar lógica personalizada que se ejecute para cada fila replicada, no solo para filas en conflicto, consulta Implementar un Gestor de Lógica de Negocio para un artículo de fusión.
Un solucionador estándar basado en COM, incluido en SQL Server.
Para usar un resolvedor distinto al resolver por defecto, debes copiar el resolver al ordenador donde se ejecute el Agente de mezcla y registrarlo. Si usas un gestor de lógica de negocio, también debes registrarlo en el Publisher. 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 de Internet Information Services (IIS) para una suscripción pull que utiliza sincronización web
Uso de SQL Server Management Studio
Después de registrar el resolver, especifica que un artículo debe usar el resolver en la pestaña Resolver del cuadro de diálogo Propiedades del Artículo - <Artículo> . Puedes acceder a este cuadro de diálogo en el Asistente de Nuevas Publicaciones y en el cuadro de diálogo Propiedades de Publicación - <Publicación> . Para más información sobre cómo usar el asistente y acceder al cuadro de diálogo, consulte Crear una publicación y Ver y modificar las propiedades de publicación.
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.
Selecciona Propiedades del artículo y luego selecciona Propiedades de conjunto del artículo de tabla resaltado.
En la página Propiedades del Artículo - <Artículo> , selecciona la pestaña Resolver .
Selecciona Usar un resolvedor personalizado (registrado en el distribuidor) y luego selecciona el resolver en la lista.
Si el resolver requiere entrada (como el nombre de una columna), introdúcelo en la sección de Introducir información necesaria para el cuadro de texto del resolvedor .
Seleccione Aceptar.
Repita este proceso para cada artículo que necesite un solucionador.
Uso de Transact-SQL
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 Implementar un resolvedor de conflictos personalizado para un artículo de Fusion.
Para determinar si el resolver deseado ya está registrado, ejecuta sp_enumcustomresolvers en el Publisher en cualquier base de datos. Este procedimiento devuelve una descripción del resolvedor personalizado, el identificador de clase (CLSID) de cada resolvedor basado en COM registrado en el Distribuidor e información sobre el ensamblador gestionado para cada manejador de lógica de negocio registrado en el Distribuidor.
Si el resolvedor personalizado deseado no está aún registrado, ejecuta sp_registercustomresolver en el distribuidor. Especifica un nombre para el resolver para
@article_resolver. Para un manejador de lógica de negocio, este nombre es el nombre amistoso del ensamblador. Para resolvers basados en COM, especifique el CLSID de la DLL para@resolver_clsid. Para un manejador de lógica de negocio, se especifica un valor detruepara@is_dotnet_assembly, el nombre del ensamblaje para@dotnet_assembly_name, y el nombre plenamente calificado de la clase que sobrescribe BusinessLogicModule para@dotnet_class_name.Nota:
Si no despliegas un ensamblador de manejador de lógica de negocio en el mismo directorio que el ejecutable del Agente de mezcla, en el mismo directorio que la aplicación que inicia sincrónicamente el Agente de mezcla, o en la caché global de ensamblador (GAC), necesitas especificar la ruta completa con el nombre de ensamblador 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 resolvers personalizados de Microsoft están en el
<drive>:\Program Files\Microsoft SQL Server\<nnn>\COMdirectorio.Úsalo
regsvr32.exepara registrar la DLL personalizada del resolver en el sistema operativo. Por ejemplo, el siguiente comando registra el SQL Server Additive Conflict Resolver:regsvr32 ssradd.dll
Si el resolver es un gestor de lógica de negocio, despliega el ensamblador 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
@dotnet_assembly_nameparámetro en el paso 3.Nota:
La ubicación predeterminada de instalación del ejecutable del Agente de mezcla es
<drive>:\Program Files\Microsoft SQL Server\<nnn>\COM.
Especificación de un solucionador personalizado al definir un artículo de mezcla
Si planeas usar un resolvedor de conflictos personalizado, crea y registra el resolver siguiendo el procedimiento anterior.
En Publisher, ejecuta sp_enumcustomresolvers y apunta el nombre del resolver personalizado deseado en el
valuecampo del conjunto de resultados.En la base de datos de publicación del publicador, ejecute sp_addmergearticle. Especifica el nombre del resolver del paso 2 para
@article_resolvery cualquier entrada requerida para el resolver personalizado usando el@resolver_infoparámetro. Para resolvers personalizados basados en procedimientos almacenados,@resolver_infoes el nombre del procedimiento almacenado. Para más información sobre la entrada necesaria para resolvers proporcionada por Microsoft, véase Conflicto Avanzado de Replicación de Fusión - COM-Based Resolutivos.
Especificación o cambio de un solucionador personalizado para un artículo de mezcla existente
Para determinar si se define un resolver personalizado para un artículo o para obtener el nombre del resolver, ejecuta sp_helpmergearticle. Si hay un resolver personalizado definido para el artículo, su nombre aparece en el
article_resolvercampo. Elresolver_infocampo muestra cualquier entrada suministrada al resolver.En Publisher, ejecuta sp_enumcustomresolvers y apunta el nombre del resolver personalizado deseado en el
valuecampo del conjunto de resultados.En la base de datos de publicación del publicador, ejecute sp_changemergearticle. Especifique un valor de
article_resolver, incluyendo el camino completo para los manejadores de lógica de negocio, para@property, y el nombre del resolvedor personalizado deseado del paso 2 para@value.Para cambiar cualquier entrada necesaria para el resolver personalizado, ejecuta sp_changemergearticle de nuevo. Especifique un valor de
resolver_infopara@propertyy cualquier entrada requerida para el resolvedor personalizado para@value. Para resolvers personalizados basados en procedimientos almacenados,@resolver_infoes el nombre del procedimiento almacenado. Para más información sobre la entrada requerida, consulte Conflicto Avanzado de Replicación de Fusión - COM-Based Resolvers.
Eliminación del registro de un solucionador de conflictos personalizado
En el Publisher, ejecuta sp_enumcustomresolvers y apunta el nombre del resolver personalizado que debes eliminar en el
valuecampo del conjunto de resultados.En el Distribuidor, ejecuta sp_unregistercustomresolver. Especifica el nombre completo del resolver personalizado desde el paso 1 para
@article_resolver.
Ejemplos (Transact-SQL)
Este ejemplo crea un nuevo artículo y especifica que el SQL Server Averaging Conflict Resolver debe usarse para calcular la media de la UnitPrice columna cuando ocurren 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 modifica un artículo para especificarlo usando el SQL Server Additive Conflict Resolver para calcular la suma de la UnitsOnOrder columna cuando ocurren 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