Establecer la conexión inicial en una sesión de creación de reflejo de la base de datos

Para la conexión inicial en una base de datos reflejada, un cliente debe suministrar una cadena de conexión que como mínimo proporcione el nombre de una instancia del servidor. Este nombre de servidor requerido debería identificar la instancia del servidor principal actual y se conoce como el nombre del asociado inicial.

Opcionalmente, la cadena de conexión también puede proporcionar el nombre de otra instancia del servidor, que debería identificar la instancia del servidor reflejado actual, para usarla si el asociado inicial no está disponible durante el primer intento de conexión. Este nombre se conoce como el nombre del asociado de conmutación por error.

La cadena de conexión también debe proporcionar el nombre de una base de datos. Esto es necesario para que el proveedor de acceso a datos pueda intentar la conmutación por error.

Al recibir una cadena de conexión, el proveedor de acceso a datos almacena el nombre del asociado inicial y el nombre del asociado de conmutación por error, si se suministran, en una caché en la memoria volátil del cliente (para el código administrado, el ámbito de la caché es el dominio de la aplicación). Una vez almacenado en caché, el proveedor de acceso a datos nunca actualiza el nombre del asociado inicial. Cuando el cliente suministra el nombre del asociado de conmutación por error, el proveedor de acceso a datos también almacena este nombre temporalmente por si el proveedor no se puede conectar usando el nombre del asociado inicial.

Una sesión de creación de reflejo de la base de datos no protege frente a problemas de acceso al servidor que sean específicos de los clientes, como cuando un equipo cliente tiene un problema en la comunicación con la red. Un intento de conexión a una base de datos reflejada también puede generar un error por diversas razones que no tienen que ver con el proveedor de acceso a datos; por ejemplo, debido a que la instancia del servidor principal esté inactiva, como ocurre cuando la base de datos está realizando la conmutación por error, o bien debido a un error de red.

Cuando se intenta la conexión, el proveedor de acceso a datos comienza usando el nombre del asociado inicial. Si la instancia del servidor especificada está disponible y es la instancia del servidor principal actual, el intento de conexión suele tener éxito.

Nota

Si la sesión de creación de reflejo se pone en pausa, el cliente suele conectarse al servidor principal y descargar el nombre del asociado. Sin embargo, la base de datos no está disponible para el cliente hasta que se reanude la creación de reflejo.

Si ese intento no funciona, el proveedor de acceso a datos prueba con el nombre del asociado de conmutación por error, si está disponible. Si otro nombre del asociado identifica correctamente el servidor principal actual, el proveedor de acceso a datos normalmente puede abrir la conexión inicial. Al llevar a cabo esta conexión, el proveedor de acceso a datos descarga el nombre de la instancia del servidor del servidor reflejado actual. Este nombre se almacena en la caché como nombre del asociado de conmutación por error y sobrescribe el nombre proporcionado por el cliente, si hay alguno. Después, el Proveedor de datos de .NET Framework de SQL Server no actualiza el nombre del asociado de conmutación por error. Por el contrario, SQL Server Native Client actualiza la caché siempre que una conexión posterior o el restablecimiento de la conexión devuelvan un nombre del asociado diferente.

En la siguiente ilustración se muestra una conexión del cliente con el asociado inicial, Partner_A, para una base de datos reflejada denominada Db_1. En la ilustración se muestra un caso en el que el nombre del asociado inicial proporcionado por el cliente identifica correctamente el servidor principal actual, Partner_A. El intento de conexión inicial se realiza correctamente y el proveedor de acceso a datos almacena el nombre del servidor reflejado (Partner_B) como nombre del asociado de conmutación por error en la caché local. Finalmente, el cliente se conecta a la copia principal de la base de datos Db_1.

Conexión de cliente si el asociado inicial es una entidad principal

El intento de conexión inicial puede no tener éxito, por ejemplo, debido a un error de red o una instancia del servidor inactiva. Puesto que el asociado inicial no está disponible, para que el proveedor de acceso a datos intente conectarse al asociado de conmutación por error, el cliente deberá haber proporcionado el nombre del asociado de conmutación por error en la cadena de conexión.

En ese caso, si el nombre del asociado de conmutación por error no está disponible, el intento de conexión original continúa hasta que la conexión de red agota el tiempo de espera o se devuelve un error (igual que en una base de datos no reflejada).

Cuando en la cadena de conexión se proporciona el nombre del asociado de conmutación por error, el comportamiento del proveedor de acceso a datos depende del protocolo de red y del sistema operativo del cliente, según se explica a continuación:

  • Con TCP/IP, si el cliente ejecuta Microsoft Windows XP o posterior, los intentos de conexión se regulan mediante un algoritmo de reintento de conexión específico de la creación de reflejo de la base de datos. El algoritmo de reintento de conexión determina el tiempo máximo (el tiempo de reintento) asignado para abrir una conexión en un intento de conexión dado. Para obtener más información, consulte Usar palabras clave de cadena de conexión con SQL Server Native Client.

  • En el caso de otros protocolos de red y clientes que no ejecutan Microsoft Windows XP o posterior

    Si se produce un error o si el asociado inicial no está disponible, el intento de conexión inicial espera hasta que los períodos de tiempo de espera de la conexión de red o del inicio de sesión expiran en el proveedor de acceso a datos. Generalmente, esta espera es del orden de 20 a 30 segundos. Después, si el proveedor de acceso a datos no ha agotado el tiempo de espera, intenta conectarse al asociado de conmutación por error. Si el período de tiempo de espera de conmutación por error expira antes de que la conexión tenga éxito o si el asociado de conmutación por error no está disponible, el intento de conexión no tiene éxito. Si el asociado de conmutación por error está disponible dentro del período de tiempo de espera de inicio de sesión y es ahora el servidor principal, el intento de conexión normalmente tiene éxito.

Cadenas de conexión para una base de datos reflejada

La cadena de conexión proporcionada por el cliente incluye información que el proveedor de acceso a datos utiliza para conectarse a la base de datos. En esta sección se explican las palabras clave que están relacionadas específicamente con la conexión a una base de datos reflejada mediante una conexión del controlador ODBC de SQL Server Native Client. Para obtener información acerca de todas las palabras clave de la cadena de conexión, vea Usar palabras clave de cadena de conexión con SQL Server Native Client.

Atributo Network

La cadena de conexión debería contener el atributo Network para especificar el protocolo de red. De este modo se asegura que el protocolo de red especificado persiste entre conexiones a asociados diferentes. El mejor protocolo para conectarse a una base de datos reflejada es TCP/IP. Para garantizar que el cliente solicite TCP/IP para cada conexión con los asociados, una cadena de conexión proporciona el atributo siguiente:

Network=dbmssocn; 
Nota importanteImportante

Se recomienda mantener TCP/IP al principio de la lista de protocolos del cliente. Sin embargo, si la cadena de conexión especifica el atributo Network, reemplaza el orden de la lista.

O bien, para garantizar que el cliente solicite canalizaciones con nombre para cada conexión a los asociados, una cadena de conexión proporciona el atributo siguiente:

Network=dbnmpntw; 
Nota importanteImportante

Dado que las canalizaciones con nombre no usan el algoritmo de reintento TCP/IP, en muchos casos, un intento de conexión a canalizaciones con nombre puede agotar el tiempo de espera antes de conectarse a una base de datos reflejada.

Atributo Server

La cadena de conexión debe contener un atributo Server que proporciona el nombre del asociado inicial, que debería identificar la instancia del servidor principal actual.

La forma más sencilla de identificar la instancia del servidor es especificando su nombre, <nombreDelServidor>[\<nombreDeLaInstanciaDeSQLServer>]. Por ejemplo:

Server=Partner_A;

O bien:

Server=Partner_A\Instance_2;

Sin embargo, cuando se usa el nombre del sistema, el cliente debe realizar una búsqueda DNS para obtener la dirección IP del servidor y una consulta del Explorador de SQL Server para obtener el número de puerto del servidor en el que reside el asociado. Estas búsquedas y consultas pueden omitirse especificando la dirección IP y el número de puerto del asociado en el atributo Server, en lugar de especificar el nombre de servidor. Esto se recomienda para reducir la posibilidad de que se produzcan retardos externos mientras se conecta a ese asociado.

Nota

Se necesita una consulta del Explorador de SQL Server si la cadena de conexión especifica el nombre de la instancia con nombre y no el puerto.

Para especificar la dirección IP y el puerto, el atributo Server toma el formato siguiente, Server=<direcciónIP>,<puerto>, por ejemplo:

Server=123.34.45.56,4724; 

Nota

La dirección IP puede ser IP Versión 4 (IPv4) o IP Versión 6 (IPv6).

Atributo Database

Además, la cadena de conexión debe especificar el atributo Database para proporcionar el nombre de la base de datos reflejada. Si la base de datos no está disponible cuando el cliente intente conectarse, se producirá una excepción.

Por ejemplo, para conectarse expresamente a la base de datos AdventureWorks2008R2 del servidor principal Partner_A, un cliente usa la cadena de conexión siguiente:

" Server=Partner_A; Database=AdventureWorks2008R2 "

Nota

En esta cadena se omite la información de autenticación. Para obtener información acerca de las palabras clave para la autenticación integrada, vea Usar palabras clave de cadena de conexión con SQL Server Native Client.

Nota importanteImportante

La combinación del prefijo del protocolo con el atributo Server (Server=tcp:<nombreDelServidor>) es incompatible con el atributo Network, y si se especifica el protocolo en ambos lugares, probablemente se producirá un error. Por lo tanto, se recomienda que una cadena de conexión especifique el protocolo con el atributo Network y únicamente incluya el nombre del servidor en el atributo Server ("Network=dbmssocn; Server=<nombreDelServidor>").

Atributo Failover Partner

Además del nombre del asociado inicial, el cliente puede especificar también el nombre del asociado de conmutación por error, que debería identificar la instancia del servidor reflejado actual. Una de las palabras clave especifica el asociado de conmutación por error para el atributo de asociado de conmutación por error. La palabra clave para este atributo depende de la API que está utilizando. En la tabla siguiente se enumeran estas palabras clave.

API

Palabra clave para el atributo de asociado de conmutación por error

Proveedor OLE DB

FailoverPartner

Controlador ODBC

Failover_Partner

Objetos de datos ActiveX (ADO)

Failover Partner

Para obtener más información sobre las palabras clave de estas API, vea Usar palabras clave de cadena de conexión con SQL Server Native Client.

La forma más sencilla de identificar la instancia del servidor es por el nombre de su sistema, <nombreDelServidor>[\<nombreDeLaInstanciaDeSQLServer>].

O bien, la dirección IP y el número de puerto pueden proporcionarse en el atributo Failover Partner. Si el intento de conexión inicial no tiene éxito durante la primera conexión a la base de datos, el intento de conectarse al asociado de conmutación por error no tendrá que retransmitirse en DNS y el Explorador de SQL Server. Una vez que se establezca la conexión, el nombre del asociado de conmutación por error se sobrescribirá con el nombre del asociado de conmutación por error, de modo que, si se produce una conmutación por error, las conexiones redirigidas requerirán DNS y el Explorador de SQL Server.

Nota

Si sólo se proporciona el nombre del asociado inicial, los programadores de la aplicación no necesitarán realizar ninguna acción ni escribir ningún código para volver a conectarse.

Nota

Los programadores de aplicaciones de código administrado proporcionan el nombre del asociado de conmutación por error en la cadena ConnectionString del objeto SqlConnection. Para obtener información acerca de cómo utilizar esta cadena de conexión, vea el apartado sobre la compatibilidad de la creación de reflejo de la base de datos del proveedor de datos de .NET Framework para SQL Server en la documentación de ADO.NET, que forma parte del SDK de Microsoft .NET Framework.

Ejemplo de cadena de conexión

Por ejemplo, para conectarse explícitamente con TCP/IP a la base de datos AdventureWorks2008R2 en Partner_A o Partner_B, una aplicación cliente podría que use el controlador ODBC proporcionar la cadena de conexión siguiente:

"Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks2008R2; Network=dbmssocn"

O bien, el cliente podría usar la dirección IP y el número de puerto para identificar al asociado inicial, Partner_A; por ejemplo, si la dirección IP es 250.65.43.21 y el número de puerto es 4734, la cadena de conexión sería:

"Server=250.65.43.21,4734; Failover_Partner=Partner_B; Database=AdventureWorks2008R2; Network=dbmssocn"