Alta disponibilidad y recuperación ante desastres

Descargar controlador ODBC

El controlador ODBC de Microsoft para SQL Server soporta grupos de disponibilidad Always On. Para más información sobre Grupos de disponibilidad AlwaysOn, consulte:

Puede especificar el agente de escucha del grupo de disponibilidad de un grupo de disponibilidad particular en la cadena de conexión. Si una aplicación ODBC se conecta a una base de datos de un grupo de disponibilidad que sufre una conmutación por error, la conexión original se interrumpe. La aplicación debe abrir una nueva conexión para que siga funcionando después de la conmutación por error.

Sin MultiSubnetFailover=Yes, el mecanismo de recambio de varias direcciones IP heredado del controlador puede resultar lento cuando no es posible acceder a la primera dirección IP resuelta. Para obtener más información sobre el comportamiento de recambio de Windows, consulte Usar resolución de IP de red transparente con el controlador ODBC.

Cuando se conecta a un oyente de grupo de disponibilidad mediante MultiSubnetFailover=Yes, el controlador intenta establecer conexiones con todas las direcciones IP resueltas en paralelo. Si un intento de conexión tiene éxito, el controlador descarta todos los intentos de conexión pendientes.

Note

Dado que se puede producir un error de conexión debido a la conmutación por error de un grupo de disponibilidad, se recomienda implementar la lógica de reintento de conexión. Reintente una conexión fallida hasta que se restablezca. El aumento del tiempo de espera de la conexión y la implementación de la lógica de reintento de conexión aumentarán la probabilidad de establecer una conexión con un grupo de disponibilidad.

Conexión con MultiSubnetFailover

Establezca MultiSubnetFailover=Yes cuando el destino sea Azure SQL Database, Azure SQL Managed Instance, una SQL Database en Microsoft Fabric, un oyente de grupo de disponibilidad o una instancia de clúster de conmutación por error. MultiSubnetFailover permite una recuperación más rápida tras la conmutación por error, ya que hace que el controlador intente establecer conexiones TCP con todas las direcciones IP resueltas en paralelo y utilice la primera conexión que tenga éxito.

Esta propiedad de conexión también reduce considerablemente el tiempo de conmutación por error en las topologías AlwaysOn de una y varias subredes. Durante una conmutación por error de varias subredes, el cliente intentará establecer conexiones en paralelo. Durante una conmutación por error de una subred, el controlador volverá a tratar de establecer la conexión TCP de manera drástica.

La propiedad de conexión MultiSubnetFailover indica que la aplicación se está implementando en una topología en la que el nombre de host de destino puede resolverse en más de un punto de conexión. El controlador trata de conectarse a la base de datos de la instancia de SQL Server principal tratando de conectarse a todas las direcciones IP.

Cuando te conectas usando MultiSubnetFailover=Yes, el cliente intenta intentar la conexión TCP más rápido que los intervalos de retransmisión TCP predeterminados del sistema operativo. MultiSubnetFailover=Yes permite una reconexión más rápida tras la conmutación por error de un grupo de disponibilidad de Always On o de una instancia de clúster de conmutación por error de Always On. MultiSubnetFailover=Yes se aplica tanto a grupos de disponibilidad de una sola subred como a los de varias subredes, así como a instancias de clúster de conmutación por error.

MultiSubnetFailover=Yes es seguro contra objetivos de una sola IP. Cuando DNS se resuelve a una dirección, MultiSubnetFailover=Yes no crea intentos adicionales de conexión paralela.

Recommendations

Cuando te conectas a un destino de alta disponibilidad o con varios puntos de conexión (Azure SQL Database, Azure SQL Managed Instance, SQL Database en Microsoft Fabric, un listener de grupo de disponibilidad o una instancia de clúster de conmutación por error):

  • Especifique MultiSubnetFailover=Yes. Es la configuración recomendada para estos objetivos, y es seguro dejarla activada cuando el objetivo se resuelve a una sola dirección IP, porque el controlador entonces hace un único intento de conexión.

  • Especifique el agente de escucha del grupo de disponibilidad como el servidor en la cadena de conexión.

  • No puedes usarlo MultiSubnetFailover=Yes en un protocolo que no sea TCP.

  • No se puede conectar a una instancia de SQL Server configurada con más de 64 direcciones IP.

  • No puedes utilizar MultiSubnetFailover=Yes con la duplicación de bases de datos. El controlador devuelve un error cuando la cadena de conexión especifica Failover_Partner, así como cuando el servidor indica que la base de datos está duplicada. El reflejo de bases de datos está obsoleto en todas las versiones compatibles de SQL Server. Use en su lugar los grupos de disponibilidad de Always On.

  • Utilice la autenticación de SQL Server o la autenticación Kerberos con MultiSubnetFailover=Yes sin afectar al comportamiento de la aplicación.

  • Aumenta loginTimeout para dar cabida al tiempo de conmutación por error y reducir el número de reintentos de conexión de la aplicación. Para Azure SQL Database serverless con autopausa activada, usa al menos 60 segundos. Una base de datos en pausa automática se reanuda en el primer intento de conexión, y ese intento puede fallar con el error 40613 mientras la base de datos se reanuda, por lo que la aplicación debe intentarlo de nuevo. Para más información, consulta Pausa automática y reanudación automática en la capa de computación sin servidor para Azure SQL Database.

  • No se admiten transacciones distribuidas.

Si no está activado el enrutamiento de solo lectura, no se podrá conectar a una ubicación de réplica secundaria en un grupo de disponibilidad en las siguientes situaciones:

  • Si la ubicación de réplica secundaria no está configurada para aceptar conexiones.

  • Si una aplicación utiliza ApplicationIntent=ReadWrite y la ubicación de réplica secundaria está configurada para acceso de solo lectura.

Una conexión produce un error si una réplica principal está configurada para rechazar las cargas de trabajo de solo lectura y la cadena de conexión contiene ApplicationIntent=ReadOnly.

Especificación de la intención de aplicación

Puede especificar la palabra clave ApplicationIntent en la cadena de conexión. Los valores asignables son ReadWrite (el valor predeterminado) o ReadOnly.

Al establecer ApplicationIntent=ReadOnly, el cliente solicita una carga de trabajo de lectura al conectarse. El servidor aplicará la intención en el momento de la conexión y durante una instrucción de base de datos USE.

La palabra clave ApplicationIntent no funciona con bases de datos de solo lectura heredadas.

Destinos de ReadOnly

Cuando una conexión elige ReadOnly, la conexión se asigna a cualquiera de las siguientes configuraciones especiales que pueden existir para la base de datos:

  • Siempre activada Una base de datos puede permitir o denegar la lectura de las cargas de trabajo en la base de datos de grupo de disponibilidad de destino. Esta opción se controla mediante la cláusula ALLOW_CONNECTIONS de las instrucciones de Transact-SQL PRIMARY_ROLE y SECONDARY_ROLE.

  • Geo-replication

  • Escalabilidad horizontal de lectura

Si ninguno de esos destinos especiales está disponible, se consulta la base de datos normal.

La palabra clave ApplicationIntent habilita el enrutamiento de solo lectura.

Enrutamiento de solo lectura

El enrutamiento de solo lectura es una característica que puede asegurar la disponibilidad de una réplica de solo lectura de una base de datos. Para habilitar el enrutamiento de solo lectura, se aplica lo siguiente:

  • Debe conectarse a un cliente de escucha del grupo de disponibilidad Always On.

  • La palabra clave de la cadena de conexión ApplicationIntent debe establecerse en ReadOnly.

  • El administrador de bases de datos debe configurar el grupo de disponibilidad para habilitar el enrutamiento de solo lectura.

Varias conexiones que utilizan cada una el enrutamiento de solo lectura podrían no conectarse todas a la misma réplica de solo lectura. Los cambios en la sincronización de la base de datos o los cambios en la configuración de enrutamiento del servidor pueden producir conexiones de cliente para réplicas de solo lectura diferentes.

Para asegurarse de que todas las solicitudes de solo lectura se conectan a la misma réplica de solo lectura, no pase un cliente de escucha de grupo de disponibilidad a la palabra clave de cadena de conexión Server. En su lugar, especifique el nombre de la instancia de solo lectura.

El enrutamiento de solo lectura puede tardar más que conectarse al servidor principal. Esto se debe a que el enrutamiento de solo lectura se conecta primero a la principal y, luego, busca la mejor instancia secundaria legible que esté disponible. Debido a estos múltiples pasos, debe aumentar el tiempo de espera de login a 30 segundos como mínimo.

Sintaxis de ODBC

Dos palabras clave de la cadena de conexión ODBC son compatibles con los grupos de disponibilidad Always On:

  • ApplicationIntent

  • MultiSubnetFailover

Para obtener más información sobre las palabras clave de la cadena de conexión ODBC, consulte Uso de palabras clave de cadena de conexión con SQL Server Native Client.

Los atributos de conexión equivalentes son estos:

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

Para más información sobre los atributos de conexión de ODBC, vea SQLSetConnectAttr.

Una aplicación de ODBC que usa Grupos de disponibilidad AlwaysOn puede utilizar una de las dos funciones para realizar la conexión:

Function Description
Función SQLConnect SQLConnect admite ApplicationIntent y MultiSubnetFailover mediante un nombre del origen de datos (DSN) o un atributo de conexión.
Función SQLDriverConnect SQLDriverConnect admite ApplicationIntent y MultiSubnetFailover mediante DSN, una palabra clave de cadena de conexión o un atributo de conexión.