Mensajes de error de 20011 en SQL Server cuando se produce un error en el Agente de registro de registro de replicación

En este artículo se describen los pasos de solución de problemas que pueden ayudar a resolver problemas que se producen después de que se produzca un error en el Agente de registro de replicación en SQL Server.

Versión del producto original: SQL Server
Número de KB original: 2892635

Síntomas

Cuando se produce un error en el Agente de registro de registro de replicación en Microsoft SQL Server, recibirá un mensaje de error similar al siguiente en el registro de SQL Server:

< > Marca de tiempo spid98 Replication-Replication Transaction-Log Reader Subsystem: agent logreadername failed. El proceso no pudo ejecutar "sp_replcmds" en "<Nombre> del servidor". < > Marca de tiempo spid258 Error: 14151, Gravedad: 18, Estado: 1. < > Marca de tiempo spid258 Replication-Replication Transaction-Log Reader Subsistema: error del logreadername del agente. El proceso no pudo ejecutar "sp_replcmds" en "<Nombre> del servidor".

Además, puede recibir uno o varios mensajes de error similares a los siguientes:

  • 18805/18836 LogReader no pudo construir el estado de la marca< de tiempo del comando >replicado: 0, código: 20011, texto: "El proceso no pudo ejecutar "sp_replcmds" en "<Nombre> del servidor". < > Marca de tiempo El proceso no pudo ejecutar "sp_replcmds" en "<Nombre> del servidor". <Estado de marca> de tiempo: 0, código: 18836, texto: 'Bloque de información de texto no válido para UpdateText: m_pHead-GetType>() : 1, m_TextDataType : 0, m_TextOpType : 3, ti:{RowsetId 7746362867712, {TextTimeStamp 480235880448, {RowId {PageId 2680944, FileId 1}, SlotId 21 }} , coloffset -1, textInfoFlags 0x4, textSize 177, offset 177, oldSize 0, newSize 0}".". <Estado de marca> de tiempo: 0, código: 18805, texto: 'Logreader no pudo construir el comando replicado desde LSN {00150725:00014316:009d}.'. <Estado de marca> de tiempo: 0, código: 22037, texto: "El proceso no pudo ejecutar "sp_replcmds" en "<Nombre del servidor>".

  • 18805/18836 LogReader no pudo construir el estado de la marca< de tiempo del comando >replicado: 0, código: 20011, texto: "El proceso no pudo ejecutar "sp_replcmds" en "<Nombre> del servidor". < > Marca de tiempo El proceso no pudo ejecutar "sp_replcmds" en "<Nombre> del servidor". < > Marca de tiempo Estado del agente repl: 6 <Estado de marca> de tiempo: 0, código: 18805, texto: "El Agente de registro del Log Reader no pudo construir un comando replicado a partir del número de secuencia de registro (LSN) {00033a89:000969c:0000a}. Realice una copia de seguridad de la base de datos de publicación y póngase en contacto con los servicios de atención al cliente. <Estado de marca> de tiempo: 0, código: 22037, texto: "El proceso no pudo ejecutar "sp_replcmds" en "<Nombre del servidor>".

  • Tiempo de espera de LogReader El agente se está ejecutando. Use el Monitor de replicación para ver los detalles de esta sesión del agente. Estado del agente de repl: 3 Publicador: {call sp_repldone ( 0x0000172a0002ac900001, 0x0000172a0002ac900001, 0, 0)} Publisher: {call sp_replcmds (500, 0)} Status: 2, code: 0, text: 'The process could not execute 'sp_replcmds' on '<Publisher name>'.'. El proceso no pudo ejecutar "sp_replcmds" en "<Nombre> del publicador". Estado del agente de repl: 5 Estado: 2, código: 0, texto: "Tiempo de espera expirado". Desconexión del publicador "<Nombre> del publicador" El agente produjo un error con el estado "Reintento". Intente ejecutar el agente más adelante.

  • Estado de la marca< de tiempo de aserción>: 0, código: 20011, texto: "El proceso no pudo ejecutar "sp_replcmds" en "<Nombre del servidor>". < > Marca de tiempo El proceso no pudo ejecutar "sp_replcmds" en "<Nombre> del servidor". <Estado de marca> de tiempo: 0, código: 18773, texto: 'No se pudieron encontrar registros de información de texto para la columna "ClientPreferences", id. 30 durante la construcción del comando.'. < > Marca de tiempo Estado: 0, código: 3624, texto: "Error en una comprobación de aserción del sistema. Compruebe el registro de errores de SQL Server para obtener más información. Normalmente, los errores de aserción se producen por un error de software o porque los datos están dañados. Para comprobar si la base de datos está dañada, considere la posibilidad de ejecutar DBCC CHECKDB. Si aceptó enviar volcados a Microsoft durante la instalación, se enviará un minivolcado a Microsoft. Puede haber una actualización disponible de Microsoft en el último Service Pack o en un QFE de soporte técnico. '.' <Estado de marca> de tiempo: 0, código: 22037, texto: "El proceso no pudo ejecutar "sp_replcmds" en "<Nombre del servidor>".

Solución de problemas

  • Mensaje de error 1: "Error al construir el comando replicado 18805/18836 LogReader"

    Desde este mensaje, puede determinar el objeto y el cambio que creó la transacción en el registro. Para ello, use la siguiente información:

    • El código 18836 proporciona el identificador de la página en la que puede encontrar el objeto .

      Nota:

      Puede usar la página How to use DBCC PAGE (Cómo usar DBCC PAGE ) para ver el contenido de las páginas de base de datos.

    • El código 18805 proporciona un número de secuencia de registro (LSN) que puede proporcionar el objeto :

      dbcc Log(master, 3, 'lsn', '0x00000208:000000a0:0004', 'numrecs', 1)
      
  • Mensaje de error 2: "Error al construir el comando replicado 18805/18836 LogReader"

    La principal diferencia entre el mensaje de error 1 y el mensaje de error 2 es que el error 2 no contiene el mensaje de estado y no apunta a la columna "textinfo". Este problema conocido se ha corregido en el paquete de actualización acumulativa 11 para Microsoft SQL Server 2008 Service Pack 3 (SP3).

El problema solo se produce en las tablas que tienen columnas de tipo de datos de objetos binarios grandes (BLOB) y para las que el artículo no usa los comandos con parámetros para replicar. Para resolver el problema, siga estos pasos:

  1. Determine si el artículo usa comandos parametrizados. Para ello, ejecute la consulta siguiente:

    SELECT STATUS, NAME FROM sysarticles WHERE NAME =''
    
  2. Convierta los valores de estado en formato binario. Por ejemplo, para un valor de estado de 41, el valor binario es 101001 y el quinto bit del lado derecho, también conocido como bit de estado, es ON. Si el bit de estado es 1, ya está establecido. Si el bit de estado es 0, no se establece. Por lo tanto, debe ejecutar sp_changearticle para configurar los comandos con parámetros. Para cambiar el bit de estado, ejecute el siguiente comando:

    sp_changearticle 'ConstituentRequest_ETL_Trans', 'CRProfile', 'status', 'parameters'
    
  • Mensaje de error 3: Tiempo de espera de LogReader

    Para solucionar este problema, use uno de los métodos siguientes:

    • Aumente el valor del parámetro QueryTimeout del Agente de registro del Log Reader.

      Nota:

      De forma predeterminada, el valor de este parámetro es de 1800 segundos (30 minutos).

    • Establezca el valor del parámetro QueryTimeout en cero (0) para deshabilitar el tiempo de espera.

    • Reduzca el valor del parámetro ReadBatchSize del Agente de registro del Log.

Si la aserción del registro de errores coincide con los problemas de estos artículos de Knowledge Base, instale la corrección adecuada.