Controlador OLE DB para la compatibilidad de SQL Server con la alta disponibilidad y la recuperación ante desastres

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Descargar controlador OLE DB

En este artículo se describe la compatibilidad de OLE DB Driver for SQL Server para Grupos de disponibilidad AlwaysOn. Para más información sobre Grupos de disponibilidad Always On, vea Agentes de escucha de grupo de disponibilidad, conectividad de cliente y conmutación por error de una aplicación (SQL Server), Creación y configuración de grupos de disponibilidad (SQL Server), Clúster de conmutación por error y grupos de disponibilidad Always On (SQL Server) y Secundarias activas: réplicas secundarias legibles (grupos de disponibilidad Always On).

Puede especificar el agente de escucha del grupo de disponibilidad de un determinado grupo de disponibilidad en la cadena de conexión. Si una aplicación de controlador OLE DB para SQL Server se conecta a una base de datos de un grupo de disponibilidad que conmuta por error, la conexión original se interrumpe y la aplicación debe abrir una nueva conexión para continuar el trabajo después de la conmutación por error.

Si no va a conectarse a una escucha de grupo de disponibilidad y varias direcciones IP están asociadas a un nombre de host, el controlador OLE DB para SQL Server iterará secuencialmente a través de todas las direcciones IP asociadas a la entrada DNS. Esto puede llevar mucho tiempo si la primera dirección IP que devuelve el servidor DNS no está enlazada a una tarjeta (NIC) de interfaz de red. Al conectarse a una escucha de grupo de disponibilidad, el controlador OLE DB para SQL Server intentará establecer conexiones con todas las direcciones IP en paralelo y, si un intento de conexión se realiza correctamente, el controlador descartará los intentos pendientes.

Nota

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 que una aplicación se conecte a un grupo de disponibilidad. Además, dado que una conexión puede producir un error debido a la conmutación por error de un grupo de disponibilidad, es aconsejable implementar la lógica de reintento de conexión y hacer que una conexión que no se ha podido establecer se reintente hasta que vuelva a conectarse.

Conectarse a MultiSubnetFailover

Especifique siempre MultiSubnetFailover=Yes al conectarse a una escucha de grupo de disponibilidad de AlwaysOn de SQL Server o a una instancia de clúster de conmutación por error de SQL Server. MultiSubnetFailover habilita una conmutación por error más rápida para todos los grupos de disponibilidad AlwaysOn y la instancia del clúster de conmutación por error en SQL Server y reducirá significativamente el tiempo de la conmutación por error en las topologías AlwaysOn únicas y de varias subredes. En un clúster de conmutación por error de varias subredes, el cliente intentará conexiones en paralelo. Durante una conmutación por error de subred, OLE DB Driver for SQL Server intentará la conexión TCP.

La propiedad de conexión MultiSubnetFailover indica que la aplicación se está implementando en un grupo de disponibilidad o una instancia de clúster de conmutación por error y que SQL Server intentará conectarse a la base de datos en la instancia principal del controlador OLE DB para SQL Server mediante un intento de conexión a todas las direcciones IP. Cuando se especifica MultiSubnetFailover=Yes para una conexión, el cliente reintenta la conexión TCP más deprisa que los intervalos de retransmisión TCP predeterminados del sistema operativo. Esto permite una reconexión más rápida después de la conmutación por error de un grupo de disponibilidad AlwaysOn o una instancia de clúster de conmutación por error AlwaysOn, y es aplicable a instancias de clúster de conmutación por error y grupos de disponibilidad de una y varias subredes.

Para más información sobre las palabras clave de cadena de conexión, vea Uso de palabras clave de cadena de conexión con el controlador OLE DB para SQL Server.

Si se especifica MultiSubnetFailover=Yes al conectarse a algo que no sea un agente de escucha de grupo de disponibilidad o una instancia de clúster de conmutación por error, el rendimiento puede verse afectado negativamente y, por ello, no se admite.

Utilice las siguientes instrucciones para conectarse a un servidor en un grupo de disponibilidad o una instancia de clúster de conmutación por error:

  • Use la propiedad de conexión MultiSubnetFailover cuando se conecte a una única subred o a varias subredes, ya que mejorará el rendimiento en ambos casos.

  • Para conectarse a un grupo de disponibilidad, especifique el agente de escucha del grupo de disponibilidad como el servidor en la cadena de conexión.

  • La conexión a una instancia de SQL Server configurada con más de 64 direcciones IP producirá un error en la conexión.

  • El comportamiento de una aplicación que usa la propiedad de conexión MultiSubnetFailover no se ve afectado por el tipo de autenticación: autenticación de SQL Server, autenticación Kerberos o autenticación de Windows.

  • Puede aumentar el valor de loginTimeout para tener en cuenta el tiempo de conmutación por error y reducir los reintentos de conexión de la aplicación.

  • No se admiten las 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:

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

  2. Si una aplicación usa ApplicationIntent=ReadWrite (se describe a continuación) y la ubicación de réplica secundaria está configurada para acceso de solo lectura.

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

Actualizar para utilizar clústeres de varias subredes a partir de la creación de reflejo de la base de datos

Se producirá un error de conexión si las palabras clave de conexión MultiSubnetFailover y Failover_Partner se encuentran en la cadena de conexión. También se producirá un error si se usa MultiSubnetFailover y SQL Server devuelve una respuesta del asociado de conmutación por error que indica que forma parte de un par de creación de reflejo de la base de datos.

Si actualiza una aplicación de controlador OLE DB para SQL Server que actualmente use la creación de reflejo de la base de datos en un escenario de varias subredes, debe quitar la propiedad de conexión Failover_Partner y reemplazarla por MultiSubnetFailover establecida en Yes, así como reemplazar el nombre del servidor en la cadena de conexión por una escucha de grupo de disponibilidad. Si usa una cadena de conexión Failover_Partner y MultiSubnetFailover=Yes, el controlador generará un error. En cambio, si usa una cadena de conexión Failover_Partner y MultiSubnetFailover=No (o ApplicationIntent=ReadWrite), la aplicación usará la creación de reflejo de la base de datos.

El controlador devuelve un error si la creación de reflejo de la base de datos se usa en la base de datos principal del grupo de disponibilidad y si MultiSubnetFailover=Yes se usa en la cadena de conexión que se conecta a una base de datos principal en lugar de a un agente de escucha de grupo de disponibilidad.

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:

Si ninguno de esos destinos especiales está disponible, se lee desde 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 la conexión a la 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.

OLE DB

OLE DB Driver for SQL Server admite las palabras clave ApplicationIntent y MultiSubnetFailover.

Las dos palabras clave de cadena de conexión OLE DB se agregaron para admitir Grupos de disponibilidad AlwaysOn en OLE DB Driver for SQL Server:

  • ApplicationIntent
  • MultiSubnetFailover

Para más información sobre las palabras clave de cadena de conexión en el controlador OLE DB, vea Uso de palabras clave de cadena de conexión con el controlador OLE DB para SQL Server.

Intención de aplicaciones

Las propiedades de conexión equivalentes son:

  • SSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRING

Una aplicación de OLE DB Driver for SQL Server puede utilizar uno de los métodos siguientes para especificar la intención de aplicaciones:

  • IDBInitialize::Initialize
    IDBInitialize::Initialize usa el conjunto de propiedades previamente configurado para inicializar el origen de datos y crear el objeto de origen de datos. Especifique la intención de aplicaciones como una propiedad del proveedor o como parte de la cadena de propiedades extendidas.

  • IDataInitialize::GetDataSource
    IDataInitialize::GetDataSource toma una cadena de conexión de entrada que puede contener la palabra clave Application Intent.

  • IDBProperties::SetProperties
    Para establecer el valor de la propiedad ApplicationIntent, llame a IDBProperties::SetProperties pasando la propiedad SSPROP_INIT_APPLICATIONINTENT con valor "ReadWrite" o "ReadOnly" o la propiedad DBPROP_INIT_PROVIDERSTRING con el valor que contiene "ApplicationIntent=ReadOnly" o "ApplicationIntent=ReadWrite".

Puede especificar la intención de aplicaciones en el campo Propiedades de intención de aplicaciones de la pestaña Todo del cuadro de diálogo Propiedades de vínculo de datos.

Cuando se establezcan conexiones implícitas, estas usarán la configuración de la intención de aplicaciones de la conexión primaria. De forma similar, cuando se creen varias sesiones con el mismo origen de datos estas heredarán la configuración de la intención de aplicaciones del origen de datos.

MultiSubnetFailover

Las propiedades de conexión equivalentes son:

  • SSPROP_INIT_MULTISUBNETFAILOVER

  • DBPROP_INIT_PROVIDERSTRING

Una aplicación de OLE DB Driver for SQL Server puede usar uno de los métodos siguientes para establecer la opción MultiSubnetFailover:

  • IDBInitialize::Initialize
    IDBInitialize::Initialize usa el conjunto de propiedades previamente configurado para inicializar el origen de datos y crear el objeto de origen de datos. Especifique la intención de aplicaciones como una propiedad del proveedor o como parte de la cadena de propiedades extendidas.

  • IDataInitialize::GetDataSource
    IDataInitialize::GetDataSource toma una cadena de conexión de entrada que puede contener la palabra clave MultiSubnetFailover.

  • IDBProperties::SetProperties
    Para establecer el valor de propiedad MultiSubnetFailover, llame a IDBProperties::SetProperties pasando la propiedad SSPROP_INIT_MULTISUBNETFAILOVER con el valor VARIANT_TRUE o VARIANT_FALSE o la propiedad DBPROP_INIT_PROVIDERSTRING con el valor que contiene "MultiSubnetFailover=Yes" o "MultiSubnetFailover=No".

Ejemplo

DBPROP rgPropMultisubnet;

rgPropMultisubnet.dwPropertyID = SSPROP_INIT_MULTISUBNETFAILOVER;
rgPropMultisubnet.dwOptions = DBPROPOPTIONS_REQUIRED;
rgPropMultisubnet.dwStatus = DBPROPSTATUS_OK;
rgPropMultisubnet.colid = DB_NULLID;
V_VT(&(rgPropMultisubnet.vValue)) = VT_BOOL;
V_BOOL(&(rgPropMultisubnet.vValue)) = VARIANT_TRUE;

DBPROPSET PropSet;

PropSet.rgProperties = &rgPropMultisubnet;
PropSet.cProperties = 1;
PropSet.guidPropertySet = DBPROPSET_SQLSERVERDBINIT;
IDBProperties* pIDBProperties = NULL;
hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void **)&pIDBProperties);
pIDBProperties->SetProperties(1, &PropSet);

Consulte también

Controlador OLE DB para las características de SQL Server
Uso de palabras clave de cadena de conexión con el controlador OLE DB para SQL Server