FIX: mensaje de Error al ejecutar el agente de distribución para sincronizar los suscriptores con el publicador en Microsoft SQL Server 2005 o SQL Server 2008: "los datos tabulares entrantes secuencia de llamada a procedimiento remoto (TDS) secuencia de protocolo (RPC) es incorrecto"

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 que se incluyeron con la versión anterior de SQL Server 2005.

Síntomas

Usar la replicación transaccional en Microsoft SQL Server 2005. Cuando se ejecuta el agente de distribución para sincronizar los suscriptores con el publicador, el agente de distribución puede fallar y recibe el siguiente mensaje de error en el historial del agente de distribución o en el registro de salida:

42000 los datos tabulares entrantes secuencia de llamada a procedimiento remoto (TDS) secuencia de protocolo (RPC) es incorrecto. Se proporcionaron demasiados parámetros en esta solicitud RPC. El máximo es de 2100. 8003

Cuando se producen estos errores repetidamente, el rendimiento puede verse afectado. Cuando se produce este error, el agente de distribución se realice procesamiento Reintentar para intentar la misma comandos otra vez. Por lo tanto, el agente de distribución utiliza más tiempo para sincronizar los suscriptores con el publicador porque cada lote problemático se intenta dos veces.

Causa

Cuando el agente de distribución procesa los comandos pendientes en la base de datos de distribución, utiliza el parámetro CommitBatchSize y el parámetro CommitBatchThreshold para ayudar a determinar cómo muchos comandos se procesan por lotes juntos como una ejecución cuando envía los comandos a los suscriptores.

El parámetro CommitBatchSize es el número de transacciones que deben emitirse a los suscriptores antes de que se emita una instrucción COMMIT . El valor predeterminado es 100. El parámetro CommitBatchThreshold es el número de comandos de duplicación que se emitirán para los suscriptores antes de que se emita una instrucción COMMIT . El valor predeterminado es 1000.

Como una única transacción puede contener un comando o puede contener muchos comandos, estableciendo el parámetro CommitBatchSize a 100 y el parámetro CommitBatchThreshold para 1000 podrían permitir varios miles comandos para entregarse en un solo lote de comandos.

Cuando se agrega un artículo a una publicación, la @ins_cmd, @upd_cmd, y se especifican los parámetros de @del_cmd del tipo de comando de replicación para el sp_addarticle procedimiento almacenado para determinar cómo entrega comandos al suscriptor. Además de los parámetros CommitBatchSize y CommitBatchThreshold , el agente de distribución debe también tener en cuenta que existen requisitos máximo en el proveedor OLE DB de SQL Native Client en el número de parámetros que se puede enlazar en un solo lote de comandos que se envía al suscriptor.

Hay un máximo de 2100 parámetros que pueden utilizarse en un solo lote de comandos. El agente de distribución, por tanto, automáticamente se divide lotes grandes en sólo suficiente instrucciones por lotes para que no se supere el número máximo de parámetros de 2100. A continuación, se mueven automáticamente los comandos restantes en el lote de comandos en el siguiente lote de ejecución.

Este problema se produce cuando el agente de distribución se calcula incorrectamente el número de parámetros que se necesitan para entregar un lote de comandos. Esto ocurre si el agente de distribución utiliza el procedimiento almacenado dinámico sp_executesql como un contenedor para un lote de muchos comandos duplicados.

Si el comando replicado contiene más de 2098 parámetros en el comando de proceso por lotes y el comando de proceso por lotes se ajusta mediante el procedimiento almacenado sp_executesql para entregar el lote como una instrucción de Transact-SQL generada dinámicamente, el agente de distribución no incluye en el cálculo que el sp_executesql almacenado procedimiento necesidades dos enlazado parámetros adicionales para funcionar. Por lo tanto, el número total de parámetros puede superar parámetros de 2100.

El agente de distribución puede utilizar esta opción de entrega de la instrucción de Transact-SQL generada dinámicamente envuelta con el procedimiento almacenado sp_executesql en las siguientes situaciones:
  • El artículo contiene las columnas del objeto binario grande (BLOB), como texto o columnas de imagen.
  • Se utiliza más de un tipo de comando de replicación a través de todos los artículos. Por ejemplo, si un artículo utiliza el tipo de comando de duplicación de SQL entrega, pero otro artículo utiliza el procedimiento almacenado de sp_MSins_procedure como el tipo de comando de duplicación.

Solución

SQL Server 2005


La corrección para este problema se publicó primero en 5 de actualización acumulativa para SQL Server 2005 Service Pack 3. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
Paquete 5 de actualización de 972511 acumulativa para SQL Server 2005 Service Pack 3
Nota: Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la versión anterior de SQL Server 2005. Microsoft recomienda que considere la posibilidad de aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:
960598 el SQL Server 2005 crea que se publicaron después del lanzamiento de SQL Server 2005 Service Pack 3
Las revisiones de Microsoft SQL Server 2005 se crean para determinados service Pack de SQL Server. Debe aplicar una revisión de Service Pack 3 de SQL Server 2005 a una instalación de SQL Server 2005 Service Pack 3. De forma predeterminada, cualquier hotfix suministrada en un service pack de SQL Server se incluye en el próximo service pack de SQL Server.

SQL Server 2008

SQL Server 2008

Importante: Debe utilizar esta revisión si está ejecutando la versión de SQL Server 2008.

La corrección para este problema en primer lugar se publicó en la actualización acumulativa 7. Para obtener más información acerca de cómo obtener este paquete de actualización acumulativa para SQL Server 2008, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
973601 acum actualizar paquete 7 para SQL Server 2008
Nota: Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008. Le recomendamos que considere aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:
956909 the SQL Server 2008 generaciones que se publicaron después del lanzamiento de SQL Server 2008

SQL Server 2008 Service Pack 1 (SP1)

Importante: Debe utilizar esta revisión si está ejecutando SQL Server 2008 Service Pack 1 (SP1).


La corrección para este problema se publicó primero en la actualización acumulativa 4 para SQL Server 2008 Service Pack 1. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
Paquete 4 de actualización de 973602 acumulativa para SQL Server 2008 Service Pack 1
Nota: Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008. Microsoft recomienda que considere la posibilidad de aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:
970365 the SQL Server 2008 generaciones que se publicaron después del lanzamiento de SQL Server 2008 Service Pack 1
Las revisiones de Microsoft SQL Server 2008 se crean para determinados service Pack de SQL Server. Debe aplicar un hotfix de SQL Server 2008 Service Pack 1 en una instalación de SQL Server 2008 Service Pack 1. De forma predeterminada, cualquier hotfix suministrada en un service pack de SQL Server se incluye en el próximo service pack de SQL Server.

Solución alternativa

Para evitar este problema, utilice uno de los métodos siguientes:

Método 1

Para ayudar a reducir las repeticiones de este error a un nivel más tolerable, reduzca el valor de los parámetros CommitBatchSize y CommitBatchThreshold para el agente de distribución. El objetivo es limitar el número máximo de comandos por lotes de confirmación, para evitar excederse 2.100 parámetros por lote de comandos.

Por ejemplo, el valor predeterminado del parámetro CommitBatchSize es 100. Puede cambiarlo a 10. El valor predeterminado del parámetro CommitBatchThreshold es 1000. Puede cambiarlo a 100.

Reducir estos valores puede afectar al rendimiento debido a que los lotes no se entregan en los tamaños originalmente óptimos. Sin embargo, este método ayuda a evitar las condiciones de error que se describen en la sección causa.

Puede cambiar los parámetros CommitBatchSize y CommitBatchThreshold mediante uno de los métodos siguientes:
  • Agregar los parámetros CommitBatchSize y CommitBatchThreshold en el comando para el paso de trabajo de agente de distribución en el Agente SQL Server
  • Cambiar los parámetros CommitBatchSize y CommitBatchThreshold al crear un nuevo perfil de agente desde el cuadro de diálogo Propiedades del distribuidor o desde el Monitor de réplica.
Para obtener más información acerca de cómo cambiar estos parámetros, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):


Si desea evitar completamente este error en el reintento posterior del lote, debe planear el peor caso posible. Para ello, busque el artículo más ancho que tiene el número de columnas en la publicación. Por ejemplo, si tiene una tabla que tiene 100 columnas publicado en la publicación transaccional, un único comando replicado contra esa tabla puede contener 100 parámetros. Debe reducir el valor del parámetro CommitBatchThreshold para que el número máximo de parámetros que el agente de distribución se tiene que enviar en un único lote como máximo es 2098. Si todas las columnas se ven afectadas por el comando, el valor del parámetro CommitBatchThreshold debe ser 20 o menos para permitir un máximo de 2000 parámetros por lote de 20 comandos en esa tabla.

Método 2

Utilice el mismo tipo de comando de replicación para todos los artículos de la publicación al configurar la publicación. Evite mezclar los mecanismos de entrega de comando para los artículos de la misma publicación para reducir la necesidad de que el agente de distribución seleccionar la entrega del lote mediante el procedimiento almacenado sp_executesql como un contenedor en un lote de comandos.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Más información

Para obtener más información acerca de la replicación del agente de distribución, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

Para obtener más información acerca de los perfiles de agente de duplicación, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

Referencias


Para obtener más información sobre el modelo de servicio Incremental de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
935897
Un modelo de servicio Incremental 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 el Service Pack 3 de SQL Server 2005, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
913089
Cómo obtener el service pack más reciente para SQL Server 2005
Para obtener más información acerca de las nuevas características de SQL Server 2005 SP3 y las mejoras de SQL Server 2005 SP3, visite el siguiente sitio Web de Microsoft:

Para obtener más información acerca del esquema de nomenclatura para las actualizaciones de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
822499
Nuevo esquema de nomenclatura para los paquetes de actualización de software de Microsoft SQL Server
Para obtener más información acerca de la terminología de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684
Descripción de la terminología estándar que se utiliza para describir las actualizaciones de software de Microsoft
Propiedades

Id. de artículo: 973103 - Última revisión: 13 ene. 2017 - Revisión: 1

Comentarios