sql >> Base de Datos >  >> RDS >> Sqlserver

Resolución de problemas de replicación de SQL Server

En el artículo anterior, Instalación y configuración de la replicación de SQL Server, discutimos en profundidad el concepto de replicación de SQL Server, sus componentes, tipos y cómo configurar la replicación transaccional de SQL paso a paso. Se recomienda encarecidamente leer el artículo anterior y comprender el concepto de replicación y sus componentes antes de leer este artículo. En este artículo, veremos cómo solucionar los problemas de un sitio de replicación de SQL Server existente.

Descripción general de la resolución de problemas

El objetivo principal de la replicación de SQL Server es mantener sincronizados los datos en el publicador y el suscriptor. En el escenario feliz, si se realiza y confirma una transacción en la base de datos de publicación, se copiará en la base de datos de distribución y luego se sincronizará y aplicará a todos los suscriptores conectados a ese publicador. Si ocurre un problema en cualquier paso de este proceso, los cambios del publicador no estarán disponibles en el lado del suscriptor. En este caso, debemos solucionar y solucionar ese problema lo antes posible antes de terminar con un sitio de replicación de SQL caducado que debe sincronizarse nuevamente desde cero o una base de datos con su archivo de registro de transacciones se queda sin espacio libre, pausando todas las transacciones de la base de datos. .

Identificar en qué paso está fallando la sincronización de replicación y asignar un mensaje de error indicativo que conduzca a solucionar el problema es la parte más desafiante del proceso de solución de problemas de replicación de SQL Server. Además, verificar la hora de la última sincronización y qué cambios se realizaron en/después de esa hora que pueden causar esta falla, también puede ayudar a solucionar la falla de sincronización de la replicación.

Comprender la función del agente de replicación de SQL Server ayudará a identificar en qué paso falla la sincronización. Recuerde que hay tres agentes de replicación que son comunes entre la mayoría de los tipos de replicación de SQL Server. El agente de instantáneas es responsable de crear la instantánea de sincronización inicial. El agente del lector de registros es responsable de leer los cambios del archivo de registro de transacciones de la base de datos y copiarlo en la base de datos de distribución y, finalmente, la Distribución agente que se encarga de sincronizar los cambios a los Suscriptores.

En este artículo, aprovecharemos el Monitor de replicación y Monitor de actividad laboral ventanas para monitorear el estado de replicación de SQL Server y obtener información sobre cualquier error de falla de sincronización.

Escenarios de resolución de problemas

La mejor y más directa manera de comprender cómo solucionar los problemas de replicación de SQL Server es proporcionar escenarios prácticos y mostrar cómo solucionar este problema en particular. Comencemos discutiendo los escenarios uno por uno.

Problema de servicio del Agente SQL Server

El servicio del Agente SQL Server juega un papel fundamental en el proceso de sincronización de la replicación de SQL Server. Esto se debe al hecho de que cada agente de replicación se ejecutará bajo un trabajo de agente SQL.

Al ser un administrador de base de datos proactivo, debe verificar el estado del sitio de replicación de SQL diariamente. Para comprobar el estado del sitio de replicación, haga clic con el botón derecho en la publicación, en el nodo Replicación -> Publicaciones locales, y seleccione Iniciar monitor de replicación. opción, como se muestra a continuación:

Desde la ventana del Monitor de replicación, puede ver un mensaje de advertencia que muestra que la replicación caducará pronto o ya caducará, sin ver ningún mensaje de error indicativo, como se muestra a continuación:

Si la ventana del Monitor de replicación no nos brinda información útil acerca de por qué el sitio de replicación expira pronto, el siguiente paso es verificar el Monitor de actividad del trabajo. en el nodo del Agente SQL Server. Al visitar el nodo del Agente SQL Server, verá directamente que el Servicio del Agente SQL Server no se está ejecutando (desde el círculo rojo al lado). Si el servicio del Agente SQL Server no se está ejecutando, significa que todos los trabajos creados en esa instancia no están funcionando, incluidos los trabajos del agente de replicación. Como resultado, el sitio de replicación general no funciona.

Para solucionar ese problema, debemos iniciar el servicio del Agente SQL Server desde SQL Server Management Studio directamente o mediante el Administrador de configuración de SQL Server (recomendado), como se muestra a continuación:

Después de iniciar el servicio del Agente SQL Server, verifique el Monitor de replicación nuevamente y asegúrese de que el estado del Suscriptor sea En ejecución. y todas las transacciones pendientes se sincronizan con el Suscriptor con éxito. Puede verificar estos pasos uno por uno, comprobando que los registros se copian de la sección Editor a Distribuidor:

Luego sincronizado del Distribuidor al Suscriptor con éxito, como se muestra a continuación:

Y finalmente, asegúrese de que no haya ninguna transacción no distribuida de la última pestaña, como se muestra a continuación:

Después de eso, debemos asegurarnos de que los trabajos de los agentes de replicación estén funcionando sin problemas. Los trabajos del Agente SQL se pueden verificar expandiendo el nodo del Agente SQL Server en el Explorador de objetos de SSMS y viendo el monitor de Actividad del trabajo, luego verifique si el Agente de registro del registro y el Agente distribuidor se están ejecutando, teniendo en cuenta que el Agente de instantáneas funcionará solo durante el proceso de creación de instantáneas, como se muestra a continuación:

También puede revisar el historial de los trabajos de los agentes de replicación y comprobar el motivo del error anterior haciendo clic con el botón derecho en ese trabajo y seleccionando Ver historial. opción de la siguiente manera:

Donde puede encontrar un mensaje de error indicativo que ayude a superar este problema en el futuro, como se muestra a continuación:

Para superar el problema anterior, el modo de inicio del servicio del Agente SQL Server debe cambiarse de Manual a Automático, de esta manera se asegurará de que el servicio se inicie automáticamente cuando se reinicie el servidor de alojamiento.

Problema de permiso del agente de instantáneas

Suponga que mientras verificaba el estado de la replicación de SQL Server, utilizando el Monitor de replicación, notó que hay una falla en la replicación, desde el signo X dentro del círculo rojo. Y el Monitor de replicación muestra que la falla es de uno de los agentes de replicación, desde el signo X dentro del círculo rojo en la parte superior de la pestaña Agentes.

Para identificar esa falla de replicación, debemos navegar por la pestaña Agentes y verificar qué agente está fallando. En la página Agentes, verá que el Agente de instantáneas es el que falla. Haga doble clic en el Agente de instantáneas y revise el siguiente mensaje de error:

El agente de replicación no ha registrado un mensaje de progreso en 10 minutos. Esto podría indicar un agente que no responde o una alta actividad del sistema. Verifique que los registros se repliquen en el destino y que las conexiones con el suscriptor, el editor y el distribuidor aún estén activas.

Lamentablemente, este mensaje de error es genérico y solo muestra que el Agente de instantáneas no funciona sin especificar el motivo, de la siguiente manera:

Luego, debemos buscar información útil en otro lugar, que es el trabajo del Agente de instantáneas. Desde la ventana Monitor de actividad del trabajo, en el nodo del Agente SQL Server, puede ver que el trabajo del Agente de instantáneas ha fallado. Y a partir de ese historial de trabajos, puede ver que falló recientemente, debido al problema de autenticación del proxy. En otras palabras, las credenciales de la cuenta con la que se ejecuta el Agente de instantáneas no son correctas, como se muestra a continuación:

Para solucionar el problema de la credencial del agente de instantáneas, haga clic con el botón derecho en la publicación, en el nodo Replicación -> Publicación local, y elija Propiedades. opción. En la ventana Propiedades de la publicación, navegue por Seguridad del agente y vuelva a insertar las credenciales de la cuenta con la que se ejecutará el Agente de instantáneas.

Después de actualizar las credenciales de la cuenta del Agente de instantáneas, vuelva a iniciar el trabajo del Agente de instantáneas, desde la ventana Monitor de actividad del trabajo, y asegúrese de que el trabajo funcione correctamente, como se muestra a continuación:

Además, verifique si el Agente de instantáneas funciona bien ahora y si el mensaje de error ya no aparece en el Monitor de replicación, como se muestra a continuación:

Problema de permiso de la carpeta de instantáneas

Suponga que, al intentar sincronizar el publicador y el suscriptor mediante la instantánea inicial o resincronizar el sitio de replicación de la instantánea mediante una nueva instantánea, el proceso de creación de la instantánea falló con el siguiente mensaje de error de acceso:

Este mensaje de error muestra que la cuenta con la que se ejecuta el Agente de instantáneas no tiene permiso para acceder a la carpeta de instantáneas especificada en el mensaje de error.

Para solucionar ese problema, debemos verificar la cuenta en la que se ejecuta el Agente de instantáneas, desde la página Seguridad del agente de la ventana Propiedades de la publicación, como se muestra a continuación:

Luego explore la carpeta de instantáneas especificada en el mensaje de error y asegúrese de que esta cuenta de instantáneas tenga un permiso mínimo de lectura y escritura en esa carpeta, luego ejecute el Agente de instantáneas nuevamente y vea que el problema se solucionó ahora y que la instantánea de sincronización se creó correctamente, como a continuación:

Problema de permiso de suscriptor

Suponga que, al verificar el estado del sitio de replicación de SQL Server mediante el Monitor de replicación, ve que hay una falla con el suscriptor, como se muestra a continuación:

Si hace clic en el icono de error, verá que la falla se ha producido al intentar sincronizar las transacciones del Distribuidor al Suscriptor. Y del mensaje de error, está claro que el distribuidor no puede conectarse a la instancia del servidor SQL del suscriptor debido a un problema de permiso, como se muestra a continuación:

Para solucionar ese problema, debemos verificar y actualizar las credenciales utilizadas para conectarnos a la instancia del suscriptor. Para comprobar las credenciales, haga clic con el botón derecho en la Suscripción en el nodo Replicación -> Publicaciones locales -> el nombre de la publicación actual y elija la opción Propiedades. Desde la Conexión de suscriptor debajo de la ventana Propiedades del suscriptor, actualice las credenciales de la cuenta que se usará para conectarse a la instancia del suscriptor, como se muestra a continuación:

Después de eso, vuelva a verificar el estado de la replicación desde el Monitor de replicación y verá que el problema de conexión del Suscriptor ya no está disponible y que el sitio de replicación funciona normalmente, como se muestra a continuación:

Suscriptor no accesible

Otro problema de falla de replicación de SQL Server que puede enfrentar desde el lado del suscriptor es que el distribuidor no puede conectarse al suscriptor, mostrando en la página del distribuidor al suscriptor que no puede abrir la conexión con el suscriptor debido a "Red". Relacionado... "Error de conectividad, que se muestra en la ventana del Monitor de replicación a continuación:

Este mensaje de error indica que hay un problema de conexión entre la instancia del distribuidor y la instancia del suscriptor. La primera y sencilla forma de verificar este problema de conectividad es asegurarse de que la instancia del servidor SQL del suscriptor esté en línea. Esto se puede verificar desde el Administrador de configuración de SQL Server desde el lado del suscriptor. En nuestra situación, podemos ver que el servicio de SQL Server en el lado del suscriptor está detenido. Para solucionar ese problema, inicie el servicio de SQL Server y verifique desde el Monitor de replicación que el sitio de replicación esté sincronizado nuevamente, como se muestra a continuación. Para problemas de conectividad de SQL más avanzados, consulte el documento de resolución de problemas de conectividad de MS:

Problema de permiso de la base de datos de suscriptores

Suponga que está comprobando el estado de sincronización de la replicación de SQL Server mediante el Monitor de replicación y descubre que la replicación está fallando al intentar replicar los cambios del distribuidor al suscriptor. Al hacer clic en el error del suscriptor, verá que el El distribuidor puede comunicarse con el suscriptor y conectarse a él, pero no puede conectarse a la base de datos de suscripción debido a un problema de falta de permiso, como se muestra a continuación:

Para solucionar ese problema, conéctese al suscriptor y asegúrese de que la cuenta que se utiliza para conectarse a la base de datos del suscriptor sea miembro del rol fijo de la base de datos db_Owner, como se muestra a continuación:

Después de eso, verifique el Monitor de replicación nuevamente y asegúrese de que el distribuidor pueda acceder a la base de datos de suscripciones y replicar los cambios, como se muestra a continuación:

Problema de diferencia de datos

Suponga que uno de los equipos de desarrollo de la base de datos afirma que hay algunos cambios que se realizan en la tabla Turnos en el publicador (SQL1) que no se reflejan en los informes diarios que se ejecutan en la instancia del suscriptor (SQL2), y proporcionó la siguiente instantánea que muestra que los cambios no se replican:

El primer paso para verificar el problema de sincronización de la replicación es abrir el Monitor de replicación y encontrar en qué paso está fallando. Desde el Monitor de replicación, puede ver que el Agente de lectura del registro está fallando, ya que los cambios no se replican del Distribuidor al Suscriptor, pero ese agente no devuelve un mensaje claro, como se muestra a continuación:

Como no podemos encontrar un mensaje de error significativo del Monitor de replicación, verificaremos el historial del trabajo del Agente de lectura del registro mediante el Monitor de actividad del trabajo, que muestra que las credenciales de la cuenta con la que se ejecuta el Agente de lectura del registro son incorrectas. , como se muestra a continuación:

Para solucionar el problema de las credenciales del Agente de lectura del registro, navegue por la página Seguridad del agente de la ventana Propiedades de la publicación y actualice las credenciales del Agente de lectura del registro con una válida, como se muestra a continuación:

Verificando el Monitor de replicación nuevamente, verá que los cambios se replican con éxito y que los datos se actualizan con los nuevos cambios de turno, como se muestra a continuación:

Fila no encontrada en el suscriptor

Veamos el asunto desde otro lado. Digamos que hay un cambio realizado en la tabla de turnos como se muestra a continuación:

Pero este cambio no se replica en el suscriptor y el sitio de replicación de SQL Server general falla. Desde el Monitor de replicación, puede ver que está fallando al intentar realizar el cambio del Distribuidor al Suscriptor, y falló debido a que no puede actualizar ese registro específico con ID igual a 3, porque este registro no está disponible en la tabla de la base de datos de suscriptores, como se muestra a continuación:

Al verificar ese registro en el lado del suscriptor (SQL2), verá que el registro no está disponible, como se muestra a continuación:

Para superar este problema, debemos insertar ese registro nuevamente en la tabla de la base de datos del suscriptor y permitir que el distribuidor intente actualizarlo nuevamente, solucionando el problema de falla de sincronización de replicación, como se muestra a continuación:

SQL Server nos brinda una opción para permitir que el sitio de replicación continúe funcionando aunque se encuentre un problema de inconsistencia de datos, donde puede corregir manualmente este problema de inconsistencia más adelante. Para hacerlo, desde el Monitor de replicación, haga clic con el botón derecho en el suscriptor y elija Perfil de agente. opción, como se muestra a continuación:

Desde la ventana que se muestra, puede actualizar el perfil del Log Reader Agent y permitir que continúe replicando los cambios de datos en caso de que haya un problema de inconsistencia de datos, como se muestra a continuación:

Problema de suscripción sin inicializar

Si el sitio de replicación se deja sin monitorear durante mucho tiempo y se produce una falla sin solución durante más de tres días, el sitio de replicación caducará y la suscripción se marcará como no inicializada, a la espera de que se reinicie nuevamente con una nueva instantánea. . El mismo escenario se puede enfrentar al crear una nueva Suscripción sin inicializarla, como se muestra a continuación:

Para solucionar ese problema, debemos reinicializar esa Suscripción, haciendo clic con el botón derecho en la Suscripción en el nodo Replicación -> Publicaciones locales y expandir la Publicación, luego elegir la opción Reinicializar y marcar esta Suscripción para inicialización y prepararla para recibir una nueva. instantánea, como se muestra a continuación:

Si el estado de la suscripción sigue siendo No inicializado después de reiniciarlo, verifique el trabajo del Agente de instantáneas mediante la ventana Monitor de actividad del trabajo y vea por qué está fallando. En el historial de trabajos del agente de instantáneas, verá que el trabajo falló debido a un problema que determinaba el propietario de ese trabajo de agente, como se muestra a continuación:

Para solucionar este problema, abra el trabajo del Agente de instantáneas y cambie el propietario del trabajo a SA o cualquier usuario administrador válido, y el trabajo se ejecutará correctamente, como se muestra a continuación:

Ahora verá que el estado de la suscripción cambió a En ejecución, lo que significa que está esperando la instantánea inicial para iniciar el proceso de sincronización, como se muestra a continuación:

Para generar una nueva instantánea, haga clic con el botón derecho en la publicación, en el nodo Replicación-> Publicaciones locales, y seleccione Ver estado del agente de instantáneas. opción.

Desde la ventana abierta, haga clic en el botón Inicio para iniciar el proceso de creación de instantáneas. Cuando la instantánea que contiene todos los artículos del publicador se haya creado correctamente, abra el Monitor de replicación nuevamente y verifique el estado de la suscripción, donde verá que la instantánea se aplica al suscriptor y se sincroniza con el publicador, como se muestra a continuación:

Problema del propietario de la base de datos del editor

Suponga también que, al verificar el estado del sitio de replicación de SQL Server mediante el Monitor de replicación, el sitio de replicación falló y la falla se detectó en el agente de lectura del registro. Al revisar el mensaje de error devuelto por ese agente, se encuentra que hay un problema para determinar el propietario actual de la base de datos de la publicación, como se muestra a continuación:

Para solucionar ese problema, debemos actualizar el propietario de la base de datos de publicación actual, reemplazándolo con un usuario de base de datos válido, usando el SP_changedbowner procedimiento almacenado del sistema, o simplemente desde la ventana de propiedades de la base de datos. Después de eso, vuelva a ejecutar el trabajo del Agente de lectura del registro mediante la ventana del Monitor de actividad del trabajo y, a continuación, valide si el problema del agente ya no está disponible mediante el Monitor de replicación, como se muestra a continuación:

Conclusión

En este artículo, demostramos diferentes problemas que puede enfrentar al usar la función de replicación de SQL Server para copiar datos entre diferentes sitios y cómo solucionar estos problemas.

Se recomienda encarecidamente mantener actualizado el motor de SQL Server, con los últimos SP y CU, de modo que todos los errores relacionados con las funciones de replicación de SQL Server se corrijan automáticamente. Por último, como administrador proactivo de la base de datos de SQL Server, vigile su sitio de replicación para solucionar cualquier problema desde el principio antes de que se vuelva más grande y más difícil de solucionar.