Fazendo a conexão inicial com uma sessão de espelhamento de banco de dados

Para a conexão inicial com um banco de dados espelho, um cliente deve fornecer uma cadeia de conexão que no mínimo forneça o nome de uma instância de servidor. Esse nome de servidor exigido deve identificar a instância do servidor principal atual e é conhecido como nome do parceiro inicial.

Opcionalmente, a cadeia de conexão também pode fornecer o nome de outra instância de servidor que deverá identificar a instância do servidor espelho atual para uso, se o parceiro inicial estiver indisponível durante a primeira tentativa de conexão. O segundo nome é conhecido como nome do parceiro de failover.

A cadeia de conexão também deve fornecer um nome de banco de dados. Isso é necessário para habilitar tentativas de failover pelo provedor de acesso de dados.

Ao receber uma cadeia de conexão, o provedor de acesso de dados armazena o nome do parceiro inicial e o nome de parceiro de failover, se fornecido, em um cache na memória volátil do cliente (para código gerenciado, o cache é delimitado ao domínio do aplicativo). Uma vez em cache, o nome do parceiro inicial nunca é atualizado pelo provedor de acesso de dados. Quando o cliente fornece o nome de parceiro de failover, o provedor de acesso de dados também armazena temporariamente esse nome, caso o provedor não possa se conectar usando o nome do parceiro inicial.

Uma sessão de espelhamento de banco de dados não protege contra problemas de acesso ao servidor que sejam específicos dos clientes, como quando um computador cliente está tendo problemas de comunicação com a rede. Uma tentativa de conexão com um banco de dados espelho também pode falhar por várias razões não relacionadas ao provedor de acesso de dados; por exemplo, uma tentativa de conexão pode falhar porque a instância do servidor principal está inativa, como acontece quando o banco de dados cai ou por causa de um erro de rede.

Ao tentar se conectar, o provedor de acesso de dados começa usando o nome do parceiro inicial. Se a instância de servidor especificada estiver disponível e for a instância de servidor principal atual, a tentativa de conexão geralmente será bem-sucedida.

ObservaçãoObservação

Se a sessão de espelhamento for pausada, o cliente geralmente fará a conexão com o servidor principal e baixará o nome do parceiro. Porém, o banco de dados estará indisponível para o cliente até retomar o espelhamento.

Se essa tentativa não funcionar, o provedor de acesso de dados tentará o nome do parceiro de failover, se disponível. Se um dos nomes de parceiro identificar o servidor principal atual corretamente, o provedor de acesso de dados em geral terá êxito em abrir a conexão inicial. Na conclusão dessa conexão, o provedor de acesso de dados baixa o nome da instância do servidor do servidor espelho atual. Esse nome é armazenado no cache como o nome do parceiro de failover, substituindo o nome do parceiro de failover fornecido pelo cliente, se houver. Depois disso, o provedor de dados .NET Framework para o SQL Server não atualiza o nome do parceiro de failover. Em contraste, o SQL Server Native Client atualiza o cache sempre que uma conexão subsequente ou redefinição de conexão retorna um nome de parceiro diferente.

A figura a seguir ilustra uma conexão de cliente com o parceiro inicial, Partner_A, para um banco de dados espelho denominado Db_1. Esta figura mostra um caso em que o nome do parceiro inicial fornecido pelo cliente identifica corretamente o servidor principal atual, Partner_A. A tentativa de conexão inicial tem sucesso e o provedor de acesso de dados armazena o nome do servidor espelho (atualmente Partner_B) como o nome do parceiro de failover no cache local. Finalmente, o cliente se conecta à cópia principal do banco de dados Db_1.

Conexão de cliente se o parceiro inicial for o principal

A tentativa de conexão inicial pode falhar, por exemplo, por causa de um erro de rede ou uma instância de servidor inativa. Como o parceiro inicial está indisponível, para que o provedor de acesso de dados tente se conectar ao parceiro de failover, o cliente deve ter fornecido o nome do parceiro de failover na cadeia de conexão.

Nesse caso, se o nome do parceiro de failover estiver indisponível, a tentativa de conexão original continuará até o tempo limite de conexão de rede ou um erro seja retornado (da mesma maneira que para um banco de dados não espelhado).

Quando o nome do parceiro de failover é fornecido na cadeia de conexão, o comportamento do provedor de acesso de dados dependerá do protocolo de rede e do sistema operacional do cliente, como segue:

  • Para TCP/IP, se o cliente estiver executando o Microsoft Windows XP ou versão posterior, as tentativas de conexão serão reguladas por um algoritmo de nova tentativa de conexão específico do espelhamento de banco de dados. O algoritmo de nova tentativa de conexão determina o tempo máximo (o tempo de nova tentativa) designado para abrir uma conexão em uma determinada tentativa de conexão. Para obter mais informações, consulte Usando palavras-chave da cadeia de conexão com o SQL Server Native Client.

  • Para outros protocolos de rede e para clientes que não estão executando o Microsoft Windows XP ou versões posteriores

    Se um erro ocorrer ou se o parceiro inicial estiver indisponível, a tentativa inicial de conexão aguardará até o fim do tempo limite para conexão na rede ou para logon, no provedor de acesso de dados. Geralmente, essa espera é de 20 a 30 segundos. Depois disso, se o tempo limite do provedor de acesso de dados não tiver expirado, ele tentará se conectar ao parceiro de failover. Se o tempo limite expirar antes que a conexão aconteça ou o parceiro de failover esteja indisponível, a tentativa de conexão falhará. Se o parceiro de failover estiver disponível dentro do tempo limite de logon e agora for o servidor principal, a tentativa de conexão geralmente será bem-sucedida.

Sequências de conexão para um banco de dados espelho

A cadeia de conexão fornecida pelo cliente contém informações que o provedor de acesso de dados usa para conexão com o banco de dados. Esta seção discute as palavras-chave especificamente relevantes para conexão com um banco de dados espelho usando um SQL Server Native Client ODBC Driver Connection. Para obter informações sobre as palavras-chave de cadeia de conexão, consulte Usando palavras-chave da cadeia de conexão com o SQL Server Native Client.

Atributo de rede

A cadeia de conexão deve conter o atributo Network para especificar o protocolo de rede. Isso assegura que o protocolo de rede especificado persista entre conexões com parceiros diferentes. O melhor protocolo por conectar a um banco de dados espelho é o TCP/IP. Para garantir que o cliente solicite o TCP/IP em cada conexão com os parceiros, uma cadeia de conexão fornece o seguinte atributo:

Network=dbmssocn; 
Observação importanteImportante

Recomendamos manter o TCP/IP no topo de uma lista de protocolos do cliente. Porém, se a cadeia de conexão especificar o atributo Network, isso substituirá a ordem da lista.

Alternativamente, para garantir que o cliente solicite pipes nomeados para cada conexão com os parceiros, uma cadeia de conexão fornece o seguinte atributo:

Network=dbnmpntw; 
Observação importanteImportante

Como pipes nomeados não usam o algoritmo de nova tentativa TCP/IP, em muitos casos, uma tentativa de conexão de pipes nomeados pode exceder o tempo limite antes da conexão com um banco de dados espelho.

Atributo de servidor

A cadeia de conexão deve conter um atributo Server que forneça o nome do parceiro inicial que deverá identificar a instância do servidor principal atual.

A forma mais simples de identificar a instância do servidor é especificando seu nome, <server_name>[\\<SQL_Server_instance_name>]. Por exemplo:

Server=Partner_A;

ou

Server=Partner_A\Instance_2;

No entanto, quando o nome do sistema for usado, o cliente deverá executar uma pesquisa DNS para obter o endereço IP do servidor e uma consulta com o Navegador do SQL Server para obter o número da porta do servidor em que o parceiro reside. Essas pesquisas e consultas podem ser ignoradas especificando o endereço IP e número da porta do parceiro no atributo Server, em vez de especificar o nome do servidor. Isso é recomendado para minimizar a possibilidade de demoras externas durante a conexão com aquele parceiro.

ObservaçãoObservação

Uma consulta com o Navegador do SQL Server será necessária se a cadeia de conexão especificar o nome de instância nomeado e não a porta.

Para especificar o endereço IP e a porta, o atributo Server toma a seguinte forma Server=<ip_address>,<port>, por exemplo:

Server=123.34.45.56,4724; 
ObservaçãoObservação

O endereço IP pode ser o IP Versão 4 (IPv4) ou IP Versão 6 (IPv6).

Atributo de banco de dados

Além disso, a cadeia de conexão deve especificar o atributo Database para fornecer o nome do banco de dados espelho. Se o banco de dados estiver indisponível quando o cliente tentar se conectar, uma exceção é ativada.

Por exemplo, para se conectar expressamente ao banco de dados AdventureWorks2008R2 no servidor Partner_A principal, um cliente usa a seguinte cadeia de conexão:

" Server=Partner_A; Database=AdventureWorks2008R2 "

ObservaçãoObservação

Essa cadeia de caracterse omite informações de autenticação. Para obter informações sobre as palavras-chave para autenticação integrada, consulte Usando palavras-chave da cadeia de conexão com o SQL Server Native Client.

Observação importanteImportante

O agrupamento do prefixo de protocolo com o atributo Server (Server=tcp:<nomedoservidor>) é incompatível com o atributo Network e especificar o protocolo em ambos os lugares provavelmente resultará em erro. Portanto, recomendamos que uma cadeia de conexão especifique o protocolo usando o atributo Network e especifique somente o nome de servidor no atributo Server ("Network=dbmssocn; Server=<nomedoservidor>").

Atributo de parceiro de failover

Além do nome do parceiro inicial, o cliente pode especificar também nome do parceiro de failover que deve identificar a instância do servidor espelho atual. O parceiro de failover é especificado por uma das palavras-chave para o atributo do parceiro de failover. A palavra-chave desse atributo depende da API em uso. A tabela a seguir lista estas palavras-chave:

API

Palavra-chave do atributo de parceiro de failover

Provedor OLE DB

FailoverPartner

Driver ODBC

Failover_Partner

ADO ( ActiveX Data Object)

Failover Partner

Para obter mais informações sobre as palavras-chave dessas APIs, consulte Usando palavras-chave da cadeia de conexão com o SQL Server Native Client.

A forma mais simples de identificar a instância do servidor é pelo nome de sistema, <server_name>[\<SQL_Server_instance_name>].

Alternativamente, podem ser fornecidos o endereço IP e número da porta no atributo Failover Partner. Se a tentativa de conexão inicial falhar durante a primeira conexão com o banco de dados, a tentativa para se conectar ao parceiro de failover não precisará depender do DNS e do Navegador do SQL Server. Quando uma conexão é estabelecida, o nome do parceiro de failover será sobrescrito com o nome do parceiro de failover, assim, se um failover acontecer, as conexões redirecionadas necessitarão do DNS e do Navegador do SQL Server.

ObservaçãoObservação

Quando só o nome do parceiro inicial é fornecido, os desenvolvedores de aplicativos não precisam tomar nenhuma ação ou gravar nenhum código, exceto sobre como se reconectar.

ObservaçãoObservação

Desenvolvedores de aplicativos de código gerenciado fornecem o nome do parceiro de failover no ConnectionString do objeto SqlConnection. Para obter informações sobre como usar essa cadeia de conexão, consulte “Suporte ao espelhamento de banco de dados no Provedor de Dados .NET Framework para SQL Server" na documentação ADO.NET que é parte do Microsoft .NET Framework SDK.

Cadeia de conexão de exemplo

Por exemplo, para fazer a conexão explícita com o banco de dados AdventureWorks2008R2 usando o TCP/IP em Partner_A ou Partner_B, um aplicativo cliente que utiliza o driver ODBC pode fornecer a seguinte cadeia de conexão:

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

Alternativamente, o cliente pode usar o endereço IP e número da porta para identificar o parceiro inicial, Partner_A; por exemplo, se o endereço IP for 250.65.43.21 e o número da porta for 4734, a cadeia de conexão será:

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