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
Azure SQL Managed Instance
La solución de problemas de errores de replicación puede resultar frustrante sin un conocimiento básico de cómo funciona la replicación transaccional. El primer paso para crear una publicación es hacer que el Agente de instantáneas cree la instantánea y la guarde en la carpeta de instantáneas. Después, el Agente de distribución aplica la instantánea al suscriptor.
Este proceso crea la publicación y la coloca en el estado de sincronización. La sincronización funciona en tres fases:
Las transacciones se producen en los objetos que se replican y se marcan como "para replicación" en el registro de transacciones.
El Agente de registro del LOG examina el registro de transacciones y busca las transacciones marcadas "para replicación". Estas transacciones se guardan en la base de datos distribuida.
El Agente de distribución examina la base de datos de distribución mediante el subproceso de lectura. Después, con el subproceso de escritura, este agente se conecta al suscriptor para aplicar los cambios en él.
En cualquier paso de este proceso se pueden producir errores. La búsqueda de esos errores puede ser el aspecto más complejo de la solución de problemas de sincronización. Afortunadamente, el uso del Monitor de replicación facilita este proceso.
Nota:
El propósito de esta guía de solución de problemas es enseñar la metodología de solución de problemas. No se ha diseñado para resolver errores específicos, sino para ofrecer instrucciones generales para buscar errores con la replicación. Se proporcionan algunos ejemplos específicos, pero su resolución puede variar en función del entorno. Los errores de ejemplo se basan en el tutorial: Configuración de la replicación entre dos servidores totalmente conectados (transaccional).
Metodología de solución de problemas
Preguntas que debe formularse
- ¿En qué parte del proceso de sincronización se produce un error en la replicación?
- ¿Qué agente está experimentando un error?
- ¿Cuándo fue la última vez que la replicación funcionó correctamente? ¿Qué ha cambiado desde entonces?
Pasos a seguir
Use el Monitor de replicación para identificar en qué momento se produce el error (¿qué agente?):
- Si los errores se producen en la sección Publicador a distribuidor, el problema está relacionado con el Agente de registro del LOG.
- Si los errores se producen en la sección Distribuidor a publicador, el problema está relacionado con el Agente de distribución.
Examine el historial de trabajos de ese agente en el Monitor de actividad de trabajo para identificar los detalles del error. Si en el historial de trabajos no se muestran detalles suficientes, puede habilitar el registro detallado en ese agente específico.
Intente determinar una solución para el error.
Buscar errores con el Agente de instantáneas
El Agente de instantáneas genera la instantánea y la escribe en la carpeta de instantáneas especificada.
Vea el estado del Agente de instantáneas:
En el Explorador de objetos, expanda el nodo Publicación local bajo Replicación.
Haga clic con el botón derecho en la publicación AdvWorksProductTrans>Ver estado del Agente de instantáneas.
Si se notifica un error en el estado del Agente de instantáneas, puede encontrar más detalles en el historial de trabajos del Agente de instantáneas:
Expanda Agente SQL Server en el Explorador de objetos y abra el Monitor de actividad de trabajo.
Ordene por Categoría e identifique el Agente de instantáneas por la categoría REPL-Instantánea.
Haga clic con el botón derecho en el Agente de instantáneas y después seleccione Ver historial.
En el historial del Agente de instantáneas, seleccione la entrada de registro correspondiente. Suele ser una línea o dos antes de la entrada en la que se informa del error. Una X de color rojo indica errores. Revise el texto del mensaje en el cuadro situado debajo de los registros:
The replication agent had encountered an exception. Exception Message: Access to path '\\node1\repldata.....' is denied.
Si los permisos de Windows no están configurados correctamente para la carpeta de instantáneas, verá un error de "acceso denegado" para el Agente de instantáneas. Debe comprobar los permisos en la carpeta donde se almacena la instantánea y asegurarse de que la cuenta usada para ejecutar el Agente de instantáneas tiene permisos para acceder al recurso compartido.
Buscar errores con el Agente de registro del LOG
El Agente de registro del LOG se conecta a la base de datos del publicador y examina el registro de transacciones para las transacciones marcadas como "para replicación". Después, añade esas transacciones a labase de datos distribuida.
Conéctese al servidor en SQL Server Management Studio. Expanda el nodo del servidor, haga clic con el botón derecho en la carpeta Replicación y luego seleccione Iniciar Monitor de replicación:
Se abre el monitor de replicación:
La X roja indica que la publicación no se está sincronizando. Expanda Mis publicadores en el lado izquierdo y, después, expanda el servidor del publicador relevante.
Seleccione la publicación AdvWorksProductTrans de la izquierda y, después, busque la X de color rojo en una de las pestañas para identificar dónde está el problema. En este caso, la X de color rojo se encuentra en la pestaña Agentes, por lo que uno de los agentes ha encontrado un error:
Haga clic en la pestaña Agentes para identificar el agente que tiene el error:
En esta vista se muestran dos agentes, el Agente de instantáneas y el Agente de registro del LOG. En el que se produce el error tiene la X de color rojo. En este caso, es el Agente de registro del LOG.
Haga doble clic en la línea en la que se informa del error, para abrir el historial del Agente de registro del LOG. En este historial se proporciona información más detallada sobre el error:
Status: 0, code: 20011, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'. The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'. Status: 0, code: 15517, text: 'Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.'. Status: 0, code: 22037, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'.
El error suele producirse cuando el propietario de la base de datos del publicador no está configurado correctamente. Esto puede ocurrir cuando se restaura una base de datos. Para comprobarlo:
Expanda Bases de datos en el Explorador de objetos.
Haga clic con el botón derecho en AdventureWorks2022>Propiedades.
Compruebe la existencia de un propietario en la página Archivos. Si este cuadro está en blanco, esta es la causa probable del problema.
Si el propietario está en blanco en la página Archivos, abra una Nueva ventana de consulta dentro del contexto de la base de datos
AdventureWorks2022
. Ejecute el código de T-SQL siguiente:-- set the owner of the database to 'sa' or a specific user account, without the brackets. EXECUTE sp_changedbowner '<useraccount>'; -- example for sa: exec sp_changedbowner 'sa' -- example for user account: exec sp_changedbowner 'sqlrepro\administrator'
Es posible que tenga que reiniciar el Agente de registro del LOG:
Expanda el nodo Agente SQL Server en el Explorador de objetos y abra el Monitor de actividad de trabajo.
Ordene por Categoría e identifique el Agente de registro del LOG por la categoría REPL-Lector del registro.
Haga clic con el botón derecho en el trabajo del Agente de registro del LOG y seleccione Iniciar trabajo en el paso.
Vuelva a abrir el Monitor de replicación para comprobar que ahora la publicación se está sincronizando. Si no está abierto, puede encontrarlo si hace clic con el botón derecho en Replicación en el Explorador de objetos.
Seleccione la publicación AdvWorksProductTrans, haga clic en la pestaña Agentes y haga doble clic en el Agente de registro del LOG para abrir el historial del agente. Ahora debería ver que el Agente de registro del LOG se está ejecutando y, o bien está replicando comandos, o muestra "No hay transacciones replicadas":
Buscar errores con el Agente de distribución
El Agente de distribución busca los datos en la base de datos de distribución y después los aplica al suscriptor.
Conéctese al servidor en SQL Server Management Studio. Expanda el nodo del servidor, haga clic con el botón derecho en la carpeta Replicación y luego seleccione Iniciar Monitor de replicación.
En Monitor de replicación, seleccione la publicación AdvWorksProductTrans y seleccione la pestaña Todas las suscripciones. Haga clic con el botón derecho en la suscripción y seleccione Ver detalles:
Se abre el cuadro de diálogo Historial de Distribuidor a suscriptor y aclara qué tipo de error está detectando el agente:
Error messages: Agent 'NODE1\SQL2016-AdventureWorks2022-AdvWorksProductTrans-NODE2\SQL2016-7' is retrying after an error. 89 retries attempted. See agent job history in the Jobs folder for more details.
El error indica que el Agente de distribución está volviendo a intentarlo. Para buscar más información, compruebe el historial de trabajos del Agente de distribución:
Expanda Agente SQL Server en el Explorador de objetos >Monitor de actividad de trabajo.
Ordene los trabajos por Categoría.
Identifique el Agente de distribución por la categoría REPL-Distribución. Haga clic con el botón derecho en el agente y seleccione Ver historial.
Seleccione una de las entradas de error y vea el texto del error en la parte inferior de la ventana:
Message: Unable to start execution of step 2 (reason: Error authenticating proxy NODE1\repl_distribution, system error: The user name or password is incorrect.)
Este error indica que la contraseña usada por el Agente de distribución es incorrecta. Para resolverlo:
Expanda el nodo Replicación en el Explorador de objetos.
Haga clic con el botón derecho en la suscripción >Propiedades.
Haga clic en el botón de puntos suspensivos (...) situado junto a Cuenta de proceso del agente y modifique la contraseña.
Vuelva a comprobar el Monitor de replicación haciendo clic con el botón derecho en Replicación en el Explorador de objetos. Una X de color rojo debajo de Todas las suscripciones indica que el Agente de distribución todavía detecta un error.
Abra el historial de Distribución al suscriptor haciendo clic con el botón derecho en la suscripción en Monitor de replicación>Ver detalles. En este caso, el error ahora es diferente:
Connecting to Subscriber 'NODE2\SQL2016' Agent message code 20084. The process could not connect to Subscriber 'NODE2\SQL2016'. Number: 18456 Message: Login failed for user 'NODE2\repl_distribution'.
Este error indica que el Agente de distribución no pudo conectarse al suscriptor, porque se produjo un error de inicio de sesión para el usuario NODE2\repl_distribution. Para investigar en profundidad, conéctese al suscriptor y abra el registro de errores de SQL Server actual en el nodo Administración del Explorador de objetos:
Si está viendo este error, falta el inicio de sesión en el suscriptor. Para resolver este error, consulte Requisitos de rol de seguridad para la replicación.
Una vez resuelto el error de inicio de sesión, vuelva a comprobar el Monitor de replicación. Si se han solucionado todos los problemas, debería ver una flecha de color verde junto al Nombre de la publicación y un estado de En ejecución en Todas las suscripciones.
Haga clic con el botón derecho en la suscripción para volver a abrir el historial de Distribuidor a suscriptor para comprobar que se realizó correctamente. Si es la primera vez que ejecuta el Agente de distribución, verá que la instantánea se ha copiado de forma masiva en el suscriptor:
Buscar errores con el Agente de mezcla
El agente de mezcla puede tardar mucho tiempo en replicar los cambios. Para determinar qué paso del proceso de sincronización de la replicación de mezcla tarda más tiempo, use la marca de seguimiento 101 junto con el registro del Agente de mezcla. Con tal fin, use los parámetros siguientes para los parámetros del Agente de mezcla y, después, reinícielo:
-T 101
-output
-outputverboselevel
Nota:
Si tiene que escribir estadísticas en la tabla <distribution-server>..msmerge_history
, use la marca de seguimiento 102.
Una salida de ejemplo del agente de mezcla después de que finalice la sincronización de replicación de mezcla es la siguiente:
**************************************************************
CONNECTION TIMES --> time took to establish the connection to the servers. Publisher (all connections) 156 msec Subscriber (all connections) 32 msec Distributor 93 msec
**************************************************************
UPLOAD COUNTERS --> upload phase (changes from the Sub to the Pub) stats MakeGeneration Time = 343 msec. InsertGenHistory Time = 31 msec. UpdateGenHistory Time = 0 msec. ProxiedMetadata Time = 0 msec.
**************************************************************
DOWNLOAD COUNTERS --> download phase (changes from the Pub to the Sub) stats MakeGeneration Time = 219 msec. InsertGenHistory Time = 0 msec. UpdateGenHistory Time = 0 msec.
**************************************************************
RETENTION-BASED CLEANUP STATISTICS --> sp_mergemetadataretentioncleanup proc stats Publisher: Cleanup Time 281 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_tombstone rows cleaned up 0 Subscriber: Cleanup Time 187 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_rowtrack rows cleaned up 0 MSmerge_tombstone rows cleaned up 0
**************************************************************
RETRY STATISTICS Retry Time (Upload) 0 msec. Retry Time (Download) 0 msec. Total changes retried 0 Number of Iterations through rows needing retry 0 Total number of changes that failed despite retry 0
**************************************************************
PROXY METADATA QUEUE COUNTERS Queue Full: Number of Waits: 0, Total Wait Time: 0 msec
**************************************************************
Distributor-side History Logging Time = 219 msec. Number of Distributor-side History Messages Logged = 11 Subscriber-side History Logging Time = 295 msec. Number of Subscriber-side History Messages Logged = 11
**************************************************************
2013-05-28 17:24:11.820 OLE DB Subscriber '<SQL Server name>\sql2008r2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.822 OLE DB Publisher '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.824 OLE DB Distributor '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) NETWORK STATISTICS Server Reads Writes Bytes Read Bytes Written Publisher 74 74 19112 37526 Subscriber 73 73 19032 36931 Distributor 75 75 19192 38121
**************************************************************
NETWORK STATUS Network Connection: The computer has one or more LAN cards that are active. Network link speed: Destination Incoming Outgoing Publisher Unreachable Unreachable Subscriber Unreachable Unreachable Distributor Unreachable Unreachable
**************************************************************
Habilitar el registro detallado en todos los agentes
Puede usar el registro detallado para ver información más detallada sobre los errores que se produzcan en cualquier agente en la topología de replicación. Los pasos son los mismos para cada agente. Asegúrese de seleccionar el agente correcto en el Monitor de actividad de trabajo.
Nota:
Los agentes pueden estar en el publicador o el suscriptor, en función de si se trata de una suscripción de inserción o de extracción. Si el agente no está disponible en el servidor que está investigando, compruebe el otro servidor.
Decida dónde quiere guardar el registro detallado y asegúrese de que la carpeta exista. En este ejemplo se usa c:\temp.
Expanda el nodo Agente SQL Server en el Explorador de objetos y abra el Monitor de actividad de trabajo.
Ordene por Categoría e identifique el agente que le interese. Este ejemplo se usa el Agente de registro del LOG. Haga clic con el botón derecho en el agente que le interese >Propiedades.
Seleccione la página Pasos y, después, resalte el paso Ejecutar agente. Seleccione Editar.
En el cuadro Comando, inicie una línea nueva, escriba el texto siguiente y haga clic en Aceptar:
-Output C:\Temp\OUTPUTFILE.txt -Outputverboselevel 3
Puede modificar la ubicación y el nivel de detalle según sus preferencias.
Al agregar el parámetro de salida detallado, los siguientes problemas pueden provocar un error en el agente o que falte el archivo outfile:
Hay un problema de formato en el que un guión largo se convierte en un guión.
La ubicación no existe en el disco, o bien la cuenta que está ejecutando al agente no tiene permiso para escribir en la ubicación especificada.
Falta un espacio entre el último parámetro y el parámetro
-Output
.Cada agente admite diferentes niveles de detalle. Si habilita el registro detallado, pero no se puede iniciar el agente, pruebe a reducir el nivel de detalle especificado en 1.
Reinicie el Agente de registro del LOG haciendo clic con el botón derecho en el agente >Detener trabajo en el paso. Para actualizar, haga clic en el icono Actualizar de la barra de herramientas. Haga clic con el botón derecho en el agente >Iniciar trabajo en el paso.
Revise la salida en el disco.
Para deshabilitar el registro detallado, siga los mismos pasos anteriores para quitar toda la línea
-Output
que agregó anteriormente.
Contenido relacionado
Obtener ayuda
- Ideas para SQL: ¿Tiene sugerencias para mejorar SQL Server?
- Preguntas y respuestas de Microsoft (SQL Server)
- Stack Exchange de DBA (etiqueta sql-server): Preguntas sobre SQL Server
- Stack Overflow (etiqueta sql-server): Respuestas a preguntas de desarrollo de SQL
- Información y términos de licencia de Microsoft SQL Server
- Opciones de soporte técnico para usuarios profesionales
- Comentarios y ayuda adicional sobre SQL Server
Contribuya a la documentación de SQL
¿Sabía que puede editar el contenido de SQL usted mismo? Si lo hace, no solo contribuirá a mejorar la documentación, sino que también se le reconocerá como colaborador de la página.
Para obtener más información, consulte Editar documentación de Microsoft Learn.