Compartir a través de


Vínculo de solución de problemas: Instancia administrada de Azure SQL

Se aplica a:Azure SQL Managed Instance

En este artículo se explica cómo supervisar y solucionar problemas con un vínculo entre SQL Server y Azure SQL Managed Instance.

Puede comprobar el estado del vínculo con Transact-SQL (T-SQL), Azure PowerShell o la CLI de Azure. Si encuentra problemas, puede usar los códigos de error para solucionar el problema.

Muchos problemas con la creación del vínculo se pueden resolver comprobando la red entre las dos instancias y validando el entorno se ha preparado correctamente para el vínculo.

Propagación inicial

Al establecer un vínculo entre SQL Server e Instancia administrada de Azure SQL, hay una fase inicial de propagación antes de que se inicie la replicación de datos. Esta fase de propagación inicial es la operación más larga y costosa de la operación. Una vez completada, se sincronizan los datos y solo se replican los cambios de datos posteriores. El tiempo necesario para que se complete la inicialización depende del tamaño de los datos, la intensidad de la carga de trabajo en las bases de datos principales y la velocidad del vínculo entre las redes de las réplicas principales y secundarias.

Si la velocidad del vínculo entre las dos instancias es más lenta de lo necesario, es probable que el tiempo de inicialización resulte muy afectado. Puede usar la velocidad de propagación indicada, el tamaño total de los datos y la velocidad del vínculo para calcular cuánto tiempo tardará la fase inicial de propagación antes de que se inicie la replicación de datos. Por ejemplo, para una sola base de datos de 100 GB, la fase inicial de inicialización tardaría aproximadamente 1,2 horas si el vínculo es capaz de insertar 84 GB por hora y, si no hay otras bases de datos que se inicializarán en un vínculo diferente. Si el vínculo solo puede transferir 10 GB por hora, la propagación de una base de datos de 100 GB tardará aproximadamente 10 horas. Si hay varias bases de datos que se van a replicar a través de varios vínculos, la propagación se ejecutará en paralelo y, cuando se combina con una velocidad de vínculo lenta, la fase de propagación inicial puede tardar considerablemente más tiempo, especialmente si la inicialización paralela de datos de todas las bases de datos supera el ancho de banda del vínculo disponible.

Importante

La fase de propagación inicial puede tardar días con vínculos extremadamente lentos o congestionados. En este caso, la creación del vínculo puede agotar el tiempo de espera. La creación del vínculo se cancela automáticamente después de 6 días.

Si tiene problemas con un vínculo, puede usar SQL Server Management Studio (SSMS), Transact-SQL (T-SQL), Azure PowerShell o la CLI de Azure para obtener información sobre el estado actual del vínculo.

Use T-SQL para obtener detalles de estado rápido del estado del vínculo y, a continuación, use Azure PowerShell o la CLI de Azure para obtener información completa sobre el estado actual del vínculo.

La supervisión de vínculos está disponible a partir de SQL Server Management Studio (SSMS) 21.0 (versión preliminar).

Para comprobar el estado del vínculo en SSMS, siga estos pasos:

  1. Conéctese a una réplica que hospede el vínculo.

  2. En el Explorador de objetos, expanda Alta disponibilidad AlwaysOn y después, expanda Grupos de disponibilidad.

  3. Haga clic con el botón derecho en el nombre del vínculo y seleccione Propiedades para abrir la ventana Propiedadesdel vínculo :

    Captura de pantalla del menú contextual en un vínculo de SSMS, con las propiedades resaltadas.

  4. La ventana Propiedades del vínculo muestra información útil sobre el vínculo, como la información de réplica, el estado del vínculo y la fecha de expiración del certificado de punto de conexión:

    Captura de pantalla de la ventana de propiedades del vínculo en SSMS.

El valor de replicaState describe el vínculo actual. Si el estado también incluye Error , se produjo un error durante la operación que aparece en el estado . Por ejemplo, LinkCreationError indica que se produjo un error al crear el vínculo.

Algunos valores de replicaState posibles son:

  • CreatingLink: Propagación inicial
  • LinkSynchronizing: La replicación de datos está en curso
  • LinkFailoverInProgress: La conmutación por error está en curso

Para obtener una lista completa de las propiedades de estado de vínculo, revise el comando Distributed Availability Groups - GET REST API .

Hay dos categorías distintas de errores que puede encontrar al usar el vínculo: errores al intentar inicializar el vínculo y errores al intentar crear el vínculo.

Se puede producir el siguiente error al inicializar un vínculo (estado de vínculo: LinkInitError):

  • Error 41962: Operación anulada porque el vínculo no se inició en 5 minutos. Compruebe la conectividad de red e inténtelo de nuevo.
  • Error 41973: No se puede establecer el vínculo porque el certificado de punto de conexión de SQL Server no se importó correctamente en Azure SQL Managed Instance.
  • Error 41974: No se puede establecer el vínculo porque el certificado de punto de conexión de SQL Managed Instance no se importó correctamente en SQL Server.
  • Error 41976: El grupo de disponibilidad no responde. Compruebe los nombres y los parámetros de configuración e inténtelo de nuevo.
  • Error 41986: No se puede establecer el vínculo porque no se pudo establecer la conexión o la réplica secundaria no responde. Compruebe los nombres, los parámetros de configuración y la conectividad de red y vuelva a intentarlo.
  • Error 47521: No se puede establecer el vínculo porque el servidor secundario no recibió la solicitud. Asegúrese de que el grupo de disponibilidad y las bases de datos están en buen estado en el servidor principal e inténtelo de nuevo.

Se pueden producir los siguientes errores al crear un vínculo (estado de vínculo: LinkCreationError):

  • Error 41977: La base de datos de destino no responde. Compruebe los parámetros de vínculo e inténtelo de nuevo.

  • Truncamiento prematuro del registro: Si el registro de transacciones se trunca antes de que finalice el proceso de inicialización, es probable que vea uno de los siguientes errores:

    • Error 1408: La copia remota de la base de datos "%.*ls" no se ha recuperado suficientemente como para reflejar la base de datos o agregarla al grupo de disponibilidad.
    • Error 1412: La copia remota de la base de datos "%.*ls" no se ha puesto al día a un momento dado que esté incluido en la copia local del registro de la base de datos.

    Para resolver este problema, debe eliminar y volver a crear el vínculo.
    Para evitar este problema, detenga las copias de seguridad del registro de transacciones en SQL Server para que la base de datos se replique durante la fase inicial de propagación.

Estado inconsistente después de la conmutación por error forzada

Después de una conmutación por error forzada, podría encontrarse con un escenario de cerebro dividido en el que ambas réplicas están en el rol principal, dejando el vínculo en un estado incoherente. Esto puede ocurrir si conmuta por error a la réplica secundaria durante un desastre y, a continuación, la réplica principal vuelve a estar en línea.

En primer lugar, confirme que está en un escenario de cerebro dividido. Para ello, puede usar Transact-SQL (T-SQL) o SQL Server Management Studio (SSMS).

Conéctese tanto a SQL Server como a SQL Managed Instance en SSMS y, a continuación, en Explorador de objetos, expanda Réplicas de disponibilidad en el nodo Grupo de disponibilidad en Alta disponibilidad AlwaysOn. Si se muestran dos réplicas diferentes como (principal), se encuentra en un escenario de cerebro dividido.

Como alternativa, puede ejecutar el siguiente script de T-SQL en ambos, SQL Server y SQL Managed Instance, para comprobar el rol de las réplicas:

-- Execute on SQL Server and SQL Managed Instance 
USE master
DECLARE @link_name varchar(max) = '<DAGName>'
SELECT
   ag.name [Link name], 
   rs.role_desc [Link role] 
FROM
   sys.availability_groups ag 
   JOIN sys.dm_hadr_availability_replica_states rs 
   ON ag.group_id = rs.group_id 
WHERE 
   rs.is_local = 1 AND ag.is_distributed = 1 AND ag.name = @link_name 
GO

Si ambas instancias muestran PRIMARY en la columna Función de enlace, se encuentra en un escenario de cerebro dividido.

Para resolver el estado del cerebro dividido, primero realice una copia de seguridad en la réplica que sea la principal original. Si la principal original era SQL Server, realice una copia de seguridad del final del registro. Si la principal original era SQL Managed Instance, realice una copia de seguridad completa de solo copia. Una vez completada la copia de seguridad, establezca el grupo de disponibilidad distribuido en el rol secundario de la réplica que solía ser la principal original, pero ahora será la nueva secundaria.

Por ejemplo, en caso de un desastre verdadero, suponiendo que ha forzado una conmutación por error de la carga de trabajo de SQL Server a Azure SQL Managed Instance, y tiene previsto seguir ejecutando la carga de trabajo en SQL Managed Instance, realice una copia de seguridad del final del registro en SQL Server y, a continuación, establezca el grupo de disponibilidad distribuido en el rol secundario en SQL Server, como el ejemplo siguiente:

--Execute on SQL Server 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] 
SET (ROLE = SECONDARY) 
GO 

A continuación, ejecute una conmutación por error manual planeada de SQL Managed Instance a SQL Server mediante el vínculo, como el ejemplo siguiente:

--Execute on SQL Managed Instance 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] FAILOVER 
GO 

Certificado expirado

Es posible que el certificado usado para el vínculo caduque. Si el certificado expira, se produce un error en el vínculo. Para resolver este problema, gire el certificado.

Comprobar la conectividad de red

La conectividad de red bidireccional entre SQL Server y SQL Managed Instance es necesaria para que el vínculo funcione. Después de abrir los puertos en el lado de SQL Server y configurar una regla NSG en el lado de SQL Managed Instance, pruebe la conectividad utilizando SQL Server Management Studio (SSMS) o Transact-SQL.

Pruebe la red mediante la creación de un trabajo temporal del Agente SQL en SQL Server y SQL Managed Instance para comprobar la conexión entre las dos instancias. Cuando se usa Network Checker en SSMS, el trabajo se crea automáticamente y se elimina una vez completada la prueba. Debe eliminar manualmente el trabajo del Agente SQL si prueba la red mediante T-SQL.

Nota:

Actualmente no se admite la ejecución de scripts de PowerShell mediante el Agente SQL Server en SQL Server en Linux, por lo que actualmente no es posible ejecutar Test-NetConnection desde el trabajo de Agente SQL Server en SQL Server en Linux.

Para usar el Agente SQL a fin de probar la conectividad de red, necesita los siguientes requisitos:

  • El usuario que realiza la prueba debe tener permisos para crear un trabajo (ya sea como sysadmin o perteneciente al rol SQLAgentOperator para msdb) para SQL Server y SQL Managed Instance.
  • Se debe ejecutar el servicio Agente SQL Server en SQL Server. Puesto que el Agente está activado de forma predeterminada en SQL Managed Instance, no es necesario realizar ninguna acción adicional.

Para probar la conectividad de red entre SQL Server y SQL Managed Instance en SSMS, siga estos pasos:

  1. Conéctese a la instancia que será la réplica principal en SSMS.

  2. En Explorador de objetos, expanda bases de datos y haga clic con el botón derecho en la base de datos que quiere vincular con la base de datos secundaria. Seleccione el vínculo Tareas>Azure SQL Managed Instance>Prueba de conexión para abrir el asistente Comprobador de red:

    Captura de pantalla del explorador de objetos en S S M S, con la conexión de prueba seleccionada en el menú contextual del vínculo de base de datos.

  3. Seleccione Siguiente en la página Introducción del asistente de Network Checker.

  4. Si se cumplen todos los requisitos en la página Requisitos previos, seleccione Siguiente. De lo contrario, resuelva los requisitos previos no satisfechos y, a continuación, seleccione Volver a ejecutar validación.

  5. En la página Inicio de sesión, seleccione Iniciar sesión para conectarse a la otra instancia que será la réplica secundaria. Seleccione Siguiente.

  6. Compruebe los detalles de la página Especificar opciones de red y proporcione una dirección IP, si es necesario. Seleccione Siguiente.

  7. En la página Resumen, revise las acciones que realiza el asistente y, a continuación, seleccione Finalizar para probar la conexión entre las dos réplicas.

  8. Revise la página Resultados para validar que existe conectividad entre las dos réplicas y, a continuación, seleccione Cerrar para finalizar.

Precaución

Continúe con los pasos siguientes solo si ha validado la conectividad de red entre los entornos de origen y de destino. De lo contrario, solucione los problemas de conectividad de red antes de continuar.

Para obtener más información sobre la característica de vínculo, revise los siguientes recursos: