REVISIÓN: Un mensaje de error cuando intenta insertar datos en un suscriptor de duplicación de mezcla en SQL Server 2005: "mensaje 548, nivel 16, estado 2, línea 1. Error de la inserción"

Seleccione idioma Seleccione idioma
Id. de artículo: 953481 - Ver los productos a los que se aplica este artículo
Nº de error: 50002854 (revisión SQL)
Microsoft distribuye correcciones de Microsoft SQL Server 2005 como un archivo descargable. Como las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad incluidas en el anterior de SQL Server 2005.
Expandir todo | Contraer todo

En esta página

Síntomas

Tenga en cuenta la situación siguiente. En SQL Server 2005, puede configurar una publicación de mezcla. Agregar una tabla que contiene una columna de identidad para la publicación de mezcla. A continuación, inserta datos en la tabla en el publicador. Sincronizar los datos entre el suscriptor y el publicador e, a continuación, intenta insertar datos adicionales en el publicador. En esta situación, recibe el siguiente mensaje de error en el publicador:
Msg 548, nivel 16, estado 2, línea 1
Error de la inserción. Están en conflicto con una identidad intervalo comprobar ' DatabaseName ', tabla replicada de restricción en la base de datos ' Schema. TableName ', ' ColumnName ' de la columna. Si la columna de identidad es administrada automáticamente por la replicación, actualizar el rango como sigue: para el publicador, ejecutar sp_adjustpublisheridentityrange; para el suscriptor, ejecute el agente de distribución o el agente de mezcla.
Si intenta ejecutar el procedimiento sp_adjustpublisheridentityrange almacenados en el publicador como se menciona en la mensaje de error, todavía no puede resolver este problema.

Este problema se produce cuando varios agentes de mezcla sincronizar datos al mismo tiempo para la misma publicación de combinación. Este problema puede se agrava si tiene muchos de los suscriptores a la publicación de combinación.

Causa

Este problema se produce porque el valor de identidad actual de la tabla en el publicador no es dentro del intervalo de identidad de la restricción de comprobación de intervalo de identidad. Este comportamiento se produce cuando varios agentes de mezcla intentar aumentar el intervalo de identidad al mismo tiempo creando el siguiente intervalo de identidad en el publicador.

Solución

La corrección para este problema se publicó por primera vez en actualización acumulativa 8. Para obtener más información acerca de cómo obtener este paquete de actualización acumulativa para SQL Server 2005 Service Pack 2, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
951217Paquete de actualización acumulativa 8 para SQL Server 2005 Service Pack 2
Nota Como las compilaciones son acumulativas, cada versión de revisión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad incluidas en el anterior de SQL Server 2005. Microsoft recomienda que considere aplicar la versión de revisión más reciente que contenga este hotfix. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
937137Compilaciones de SQL Server 2005 que se publicaron después del lanzamiento de SQL Server 2005 Service Pack 2
Las revisiones de Microsoft SQL Server 2005 se crean para los service Pack específicos de SQL Server. Debe aplicar una revisión de SQL Server 2005 Service Pack 2 a una instalación de SQL Server 2005 Service Pack 2. De forma predeterminada, cualquier revisión suministrada en un service pack se incluye en el siguiente service pack.

Solución

Para evitar este problema, se deben impedir que varias sincronizaciones de mezcla simultáneos. Para ello, establezca la propiedad max_concurrent_merge en la publicación de mezcla ejecutando la instrucción siguiente:
sp_changemergepublication '<PublicationName>', 'max_concurrent_merge', 1
Nota después de utilizar esta solución, el rendimiento puede disminuir si tiene muchos suscriptores para la publicación. Este comportamiento se produce porque sólo un suscriptor puede sincronizar datos en un momento.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Más información

Cómo determinar si está experimentando este problema

Para determinar si está experimentando este problema, siga estos pasos:
  1. Compruebe que el valor de identidad actual es menor que el límite inferior del primer intervalo de identidad de la restricción de comprobación de intervalo de identidad.

    Para obtener el valor de identidad actual, ejecute la siguiente instrucción:
    SELECT IDENT_CURRENT ('<TableName>')
    para obtener los intervalos de identidad de la restricción de comprobación de intervalo de identidad, ejecute cualquiera de las siguientes instrucciones:
    Instrucción 1
    sp_helpconstraint '<TableName>'
    Instrucción 2
    select * from MSmerge_identity_range
    where is_pub_range <>1
    AND artid IN 
     (select artid from sysmergearticles where name='<TableName>')
    AND subid in 
     (select subid from sysmergesubscriptions  MS
    join sysmergepublications MP 
    on MS.subscriber_server=MP.publisher
    AND MS.db_name = MP.publisher_db
    WHERE name='<PublicationName>'
    )
    
  2. Utilice una traza del Analizador de SQL Server para determinar si se inician intercaladas ejecuciones del procedimiento sp_MSsetup_publisher_idrange almacenados mediante independientes las sesiones del agente de mezcla para la misma publicación.

    Sin embargo, intercaladas ejecuciones del procedimiento sp_MSsetup_publisher_idrange almacenados no indican siempre que está experimentando este problema. Esto es porque no se ejecuta el Analizador de SQL Server cuando la ocurrencia original de la sincronización de mezcla genera la primera mensaje de error. Sin embargo, intercaladas ejecuciones del procedimiento sp_MSsetup_publisher_idrange almacenados aumentar la posibilidad de experimentando este problema.
  3. Puede encontrar superpuestos sincronizaciones de mezcla que se producen cuando recibe el mensaje de error "548" se produce. Para ello, puede revisar el historial de combinación en la base de datos de distribución. Para ello, ejecute las instrucciones siguientes: max(time)
    Use distribution
    GO
    select session_id, agent_id, B.publication, min(time) as StartTime, max(time) as EndTime
    into #sessiontimes
    from dbo.MSmerge_history A
    join dbo.msmerge_agents B
    on A.agent_id = B.id
    group by session_id, agent_id, publication
    order by 3 desc
    GO
    -- The left side result is the original session. The right side result is the overlapping session.
    select A.*, B.* 
    from #sessiontimes A
    Join #sessiontimes B
    On B.StartTime >= A.StartTime
    AND B.StartTime <= A.EndTime
    AND A.session_id <> B.session_id
    And A.publication=B.publication
    Order By A.StartTime asc
    GO
    drop table #sessiontimes
    

Cómo corregir existente dañadas en intervalos de identidad para una tabla problemática

Después de instalar la actualización acumulativa o después de utilizar el método que se describe en la sección de solución, no se corrige un intervalo de identidad dañado existente en una tabla. Seguirá recibiendo el mensaje de error "548" Si intenta insertar datos en la tabla y sincronizar datos en un suscriptor. Por lo tanto, debe corregir manualmente los intervalos de identidad dañado de la tabla. Para ello, siga estos pasos.

Nota Estos pasos implican reemplazar manualmente el valor de inicialización de identidad actual para la tabla de repropagar correctamente el valor de identidad en el publicador. En el estado dañado, el valor de identidad actual es menor que el primer intervalo de identidad en la restricción check de intervalo de combinación replicación identidad. Los pasos aumentar manualmente el valor de identidad que caen dentro el intervalo de identidad se define mediante la restricción de verificación de intervalo de identidad de combinación replicación. Estos pasos se supone que las identidades están configuradas de forma ascendente y que el incremento de identidad está configurado para aumentar en un valor de 1.
  1. Confirme que el valor de incremento de identidad es 1 y que la identidad continúa en orden ascendente de forma. Puede obtener el valor de incremento de identidad ejecutar la siguiente instrucción en el publicador:
    SELECT IDENT_INCR( '<TableName>')
  2. Ejecute la instrucción siguiente en el publicador para buscar el valor de identidad actual en la columna de identidad problemático:
    DBCC CHECKIDENT ('<TableName>')
    después de recibir el resultado, anote el valor valor de identidad actual para la comparación en pasos posteriores. Observe que el valor de columna actual valye puede ser mayor o menor que el valor de valor de identidad actual .

    Si el valor actual de columna es mayor que el valor de valor de identidad actual , el valor de columna puede tener originadas en otras replicaciones en la topología y combinado correctamente con la replicación de publisher. Si el valor actual de columna es menor que el valor de valor de identidad actual , los valores que han insertado en el publicador en un momento anterior utilizando SET IDENTITY_INSERT ON instrucción antes de la configuración de duplicación de mezcla.
  3. Ejecute las instrucciones siguientes en el publicador para determinar los intervalos de identidad actual del intervalo de identidad Active restricción para la tabla problemática:
    Use <PublishedDatabaseName>
    GO
    sp_helpconstraint '<TableName>'
    GO
    
    después de recibir el resultado, anote el valor de la columna constraint_keys del registro donde el valor de la columna constraint_name es "repl_identity_range_ GUID. El valor GUID corresponde al valor de la columna argumento artid para el artículo en la tabla de sistema sysmergearticles. Para obtener el GUID, ejecute la siguiente instrucción:
    select artid from sysmergearticles where name = '<TableName>'
    la restricción de comprobación de intervalo de identidad abarca dos rangos independientes. Los dos conjuntos de intervalos no tienen que ser contigua. Por ejemplo, el valor de la columna constraint_keys puede ser como sigue:
    ([nombreColumna] > (1001) AND [ColumnName]<=(2001)
    O [nombreColumna] > (9001) AND [ColumnName]<=(10001))
    Nota En este artículo en este ejemplo se utiliza para presentar el código en el resto de pasos.

    En este ejemplo, los intervalos abarcan 1000 valores. 1.000 es el tamaño de intervalo predeterminado. Sin embargo, puede cambiar el tamaño de intervalo de identidad mediante uno de los métodos siguientes:
    • Especificar @ pub_identity_range parámetro cuando ejecuta el sp_addmergearticle procedimiento almacenado.
    • Cambie la propiedad tamaño del intervalo de suscriptor para el artículo en el cuadro de diálogo Propiedades .
  4. Si experimenta el problema que se describe en la sección "Síntomas", el valor de identidad actual que anotó en el paso 2 no debe ser en cuenta las referencias menor que el límite inferior del primer intervalo de identidad de la restricción de comprobación de intervalo de identidad que anotó en el paso 3.

    Si el valor de identidad actual en el paso 2 es mayor que el límite superior del segundo intervalo de identidad del intervalo de identidad de restricción check, resolver el problema mediante el método que se recomienda en la mensaje de error. Por lo tanto, debe ejecutar el procedimiento sp_adjustpublisheridentityrange almacenados en el publicador.

    Para obtener más información acerca del procedimiento sp_adjustpublisheridentityrange almacenados, visite el siguiente sitio Web de Developer Network (MSDN):
    http://msdn.microsoft.com/en-us/library/ms181527.aspx
  5. Ejecute la instrucción siguiente para determinar si las filas están en los intervalos de identidad actual de la restricción de comprobación de intervalo de identidad:
    SELECT COUNT(*) FROM TableName WHERE 
    ([ColumnName]>(1001) AND [ColumnName]<=(2001) 
    OR [ColumnName]>(9001) AND [ColumnName]<=(10001))
    
    notas
    • Si la instrucción devuelve 0, no hay filas están en los intervalos de identidad actual. En este caso, vaya al paso 6.
    • Si la instrucción devuelve un valor que es mayor que 0, ejecute la instrucción siguiente para obtener el valor máximo de identidad en los intervalos de identidad actual:
      SELECT MAX(ColumnName) as MaxValue FROM TableName WHERE 
      ([ColumnName]>(1001) AND [ColumnName]<=(2001) OR 
      [ColumnName]>(9001) AND [ColumnName]<=(10001))
      
      anote el valor devuelto y, a continuación, vaya al paso 7.
  6. Repropagar manualmente la identidad actual de la tabla problemática para caen dentro de un intervalo válido.

    Repropagar la identidad actual en el valor más bajo de los intervalos de identidad actual más 1. Por ejemplo, si el valor más bajo de los intervalos de identidad actual es 1001, el primer valor en el intervalo posible es 1002 porque final bajo del intervalo de la restricción de comprobación de intervalo de identidad utiliza el mayor que (>). Para ello, ejecute la instrucción siguiente en el publicador y, a continuación, vaya al paso 8:
    DBCC CHECKIDENT ('TableName', RESEED, 1002)
  7. Repropagar manualmente la identidad actual de la tabla problemática para caen dentro de un intervalo válido.

    Suponga que el incremento de identidad es 1. Repropagar la identidad actual en el valor que anotó en el paso 5 y, a continuación, agregue 1. Por ejemplo, si el valor que anotó en el paso 5 es 1507, repropagar la identidad actual a 1508. Para ello, ejecute la instrucción siguiente en el publicador:
    DBCC CHECKIDENT ('TableName', RESEED, 1508)
  8. Realizar una prueba para determinar si las nuevas filas pueden insertarse en la tabla de la base de datos publicador sin que se está produciendo 548 error.
Para obtener más información acerca de qué archivos se ha cambiado y para información acerca de los requisitos previos para aplicar el paquete de actualización acumulativa que contiene la revisión que se describe en este artículo, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
951217Paquete de actualización acumulativa 8 para SQL Server 2005 Service Pack 2

Referencias

Para obtener más información acerca de la lista de generaciones que están disponibles después de SQL Server Service Pack 2, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
937137Compilaciones de SQL Server 2005 que se publicaron después del lanzamiento de SQL Server 2005 Service Pack 2
Para obtener más información acerca del modelo incremental de servicio para SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
935897Un modelo incremental de servicio está disponible desde el equipo de SQL Server para entregar revisiones para problemas detectados
Para obtener más información acerca de cómo obtener SQL Server 2005 Service Pack 2, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
913089Cómo obtener el service pack más reciente para SQL Server 2005
Para obtener más información acerca de las nuevas características y las mejoras de SQL Server 2005 Service Pack 2, visite el siguiente sitio Web:
http://go.microsoft.com/fwlink/?LinkId=71711
Para obtener más información acerca del esquema de nomenclatura para SQL Server las actualizaciones, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
822499Nuevo esquema de nomenclatura para los paquetes de actualización del software de Microsoft SQL Server
Para obtener más información acerca de la terminología relativa de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft

Propiedades

Id. de artículo: 953481 - Última revisión: viernes, 11 de julio de 2008 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Workgroup Edition
Palabras clave: 
kbmt kbhotfixrollup kbfix kbpubtypekc kbqfe kbexpertiseadvanced kbhotfixserver kbautohotfix kbsql2005repl KB953481 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 953481

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com