Conectar clientes a uma sessão de espelhamento de banco de dados (SQL Server)Connect Clients to a Database Mirroring Session (SQL Server)

APLICA-SE A: SimSQL Server NãoBanco de Dados SQL do Azure NãoAzure Synapse Analytics (SQL DW) NãoParallel Data Warehouse APPLIES TO: YesSQL Server NoAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

Para se conectar a uma sessão de espelhamento de banco de dados, um cliente pode usar o SQL ServerSQL Server Native Client ou o .NET Framework Data Provider para o SQL ServerSQL Server.To connect to a database mirroring session, a client can use either SQL ServerSQL Server Native Client or .NET Framework Data Provider for SQL ServerSQL Server. Quando configurados para um banco de dados do SQL Server 2019 (15.x)SQL Server 2019 (15.x) , esses provedores de acesso de dados dão suporte completo ao espelhamento de banco de dados.When configured for a SQL Server 2019 (15.x)SQL Server 2019 (15.x) database, these data access providers both fully support database mirroring. Para obter informações sobre as considerações de programação para usar um banco de dados espelho, consulte Using Database Mirroring.For information about programming considerations for using a mirrored database, see Using Database Mirroring. Além disso, a instância de servidor principal atual deve estar disponível e o logon do cliente deve ter sido criado na instância de servidor.In addition, the current principal server instance must be available and the login of the client must have been created on the server instance. Para obter mais informações, consulte Solução de problemas de usuários órfãos (SQL Server).For more information, see Troubleshoot Orphaned Users (SQL Server). As conexões de cliente com uma sessão de espelhamento de banco de dados não envolvem a instância de servidor testemunha, se essa existir.Client connections to a database mirroring session do not involve the witness server instance, if one exists.

Estabelecendo a conexão inicial com uma sessão de espelhamento de banco de dadosMaking the Initial Connection to a Database Mirroring Session

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.For the initial connection to a mirrored database, a client must supply a connection string that minimally supplies the name of a server instance. Esse nome de servidor exigido deve identificar a instância do servidor principal atual e é conhecido como nome do parceiro inicial.This required server name should identify the current principal server instance and is known as the initial partner name.

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.Optionally, the connection string can also supply the name of another server instance, which should identify the current mirror server instance, for use if the initial partner is unavailable during the first connection attempt. O segundo nome é conhecido como nome do parceiro de failover.The second name is known as the failover partner name.

A cadeia de conexão também deve fornecer um nome de banco de dados.The connection string must also supply a database name. Isso é necessário para habilitar tentativas de failover pelo provedor de acesso de dados.This is necessary to enable failover attempts by the data access provider.

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).On receiving a connection string, the data access provider stores the initial partner name and the failover partner name, if supplied, in a cache in the client's volatile memory (for managed code, the cache is scoped to the application domain). Uma vez em cache, o nome do parceiro inicial nunca é atualizado pelo provedor de acesso de dados.Once cached, the initial partner name is never updated by the data access provider. 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.When the client supplies the failover partner name, the data access provider also stores this failover partner name temporarily in case the provider cannot connect using the initial partner name.

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.A database mirroring session does not protect against server-access problems that are specific to clients, such as when a client computer is having a problems communicating with the network. 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.A connection attempt to a mirrored database can also fail for a variety of reasons that are unrelated to the data-access provider; for example, a connection attempt can fail because the principal server instance is inactive, as occurs when the database is failing over, or because of a network error.

Ao tentar se conectar, o provedor de acesso de dados começa usando o nome do parceiro inicial.When attempting to connect, the data access provider begins by using the initial partner name. 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.If the specified server instance is available and is the current principal server instance, the connection attempt typically succeeds.

Observaçã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.If the mirroring session is paused, the client typically connects to the principal server and the downloads the partner name. Porém, o banco de dados estará indisponível para o cliente até retomar o espelhamento.However, the database is unavailable to the client until mirroring resumes.

Se essa tentativa não funcionar, o provedor de acesso de dados tentará o nome do parceiro de failover, se disponível.If that attempt does not work, the data access provider tries the failover partner name, if available. 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.If either partner name correctly identifies the current principal server, the data access provider normally succeeds in opening the initial connection. Na conclusão dessa conexão, o provedor de acesso de dados baixa o nome da instância do servidor do servidor espelho atual.On completing this connection, the data access provider downloads the server instance name of the current mirror server. Esse nome é armazenado no cache como o nome do parceiro de failover, substituindo o nome do parceiro de failover fornecido pelo cliente, se houver.This name is stored in the cache as the failover partner name, overwriting the client-supplied failover partner name, if any. Depois disso, o provedor de dados .NET Framework para o SQL ServerSQL Server não atualiza o nome do parceiro de failover.Thereafter, the .NET Framework Data Provider for SQL ServerSQL Server does not update the failover partner name. Em contraste, o SQL ServerSQL Server Native Client atualiza o cache sempre que uma conexão subsequente ou redefinição de conexão retorna um nome de parceiro diferente.In contrast, SQL ServerSQL Server Native Client updates the cache whenever a subsequent connection or connection reset returns a different partner name.

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.The following figure illustrates a client connection to the initial partner, Partner_A, for a mirrored database named 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.This figure shows a case in which the initial partner name supplied by the client correctly identifies the current principal server, Partner_A. A tentativa de conexão inicial tem sucesso e o provedor de acesso a dados armazena o nome do servidor espelho (atualmente Partner_B) como o nome do parceiro de failover no cache local.The initial connection attempt succeeds, and the data access provider stores the name of the mirror server (currently Partner_B) as the failover partner name in the local cache. Finalmente, o cliente se conecta à cópia principal do banco de dados Db_1 .Finally, the client connects to the principal copy of the Db_1 database.

Conexão de cliente se o parceiro inicial for o principalClient connection if initial partner is 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.The initial connection attempt may fail, for example, because of a network error or an inactive server instance. 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.Because the initial partner is unavailable, for the data access provider to attempt to connect to the failover partner, the client must have supplied the failover partner name in the connection string.

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).In that case, if the failover partner name is unavailable, the original connection attempt continues until the network connection timeout or an error is returned (just as for a non-mirrored database).

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:When the failover partner name is supplied in the connection string, the behavior of the data access provider depends on the network protocol and operating system of the client, as follows:

  • Para TCP/IP, as tentativas de conexão são governadas por um algoritmo de nova tentativa de conexão específico ao espelhamento de banco de dados.For TCP/IP, the connection attempts are regulated by a connection retry algorithm that is specific to database mirroring. 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.The connection retry algorithm determines the maximum time (the retry time) allotted for opening a connection in a given connection attempt.

  • Para outros protocolos de redeFor other network protocols

    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.If an error occurs or if the initial partner is unavailable, the initial connection attempt waits until the network connection timeout period expires or the login timeout period expires on the data access provider. Geralmente, essa espera é de 20 a 30 segundos.Typically, this wait is on the order of 20 to 30 seconds. Depois disso, se o tempo limite do provedor de acesso de dados não tiver expirado, ele tentará se conectar ao parceiro de failover.Thereafter, if the data access provider has not timed out, it attempts to connect to the failover partner. 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á.If the connection timeout period expires before the connection succeeds or the failover partner is unavailable, the connection attempt fails. 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.If failover partner is available within the login timeout period and is now the principal server, the connection attempt normally succeeds.

Cadeias de conexão para um banco de dados espelhoConnection Strings for a Mirrored Database

A cadeia de conexão fornecida pelo cliente contém informações que o provedor de acesso de dados usa para se conectar ao banco de dados.The connection string supplied by the client contains information that the data access provider uses to connect to the database. Esta seção discute as palavras-chave especificamente relevantes para conexão com um banco de dados espelhado usando um SQL ServerSQL Server Native Client ODBC Driver Connection.This section discusses the keywords that are specifically relevant for connecting to a mirrored database using a SQL ServerSQL Server Native Client ODBC Driver Connection.

Atributo de redeNetwork Attribute

A cadeia de conexão deve conter o atributo Network para especificar o protocolo de rede.The connection string should contain the Network attribute to specify the network protocol. Isso assegura que o protocolo de rede especificado persista entre conexões com parceiros diferentes.This ensures that the specified network protocol persists between connections to different partners. O melhor protocolo por conectar a um banco de dados espelho é o TCP/IP.The best protocol for connecting to a mirrored database is 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:To ensure that the client requests TCP/IP for every connection to the partners, a connection string supplies the following attribute:

Network=dbmssocn;   

Importante

Recomendamos manter o TCP/IP no topo da lista de protocolos de um cliente.We recommend keeping TCP/IP at the top of a client's protocol list. No entanto, se a cadeia de conexão especificar o atributo Network , isso substituirá a ordem da lista.However, if the connection string specifies the Network attribute, this overrides the list order.

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:Alternatively, to ensure that the client requests named pipes for every connection to the partners, a connection string supplies the following attribute:

Network=dbnmpntw;   

Importante

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.Because named pipes does not use the TCP/IP retry algorithm, in many cases, a named pipes connection attempt may time out before connecting to a mirrored database.

Atributo de servidorServer Attribute

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.The connection string must contain a Server attribute that supplies the initial partner name, which should identify the current principal server instance.

A forma mais simples de identificar a instância do servidor é especificando seu nome, <server_name> [ \ <SQL_Server_instance_name> ].The simplest way to identify the server instance is by specifying its name , <server_name>[\<SQL_Server_instance_name>]. Por exemplo:For example:

Server=Partner_A;

ouor

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 SQL Server Browser para obter o número de porta do servidor em que o parceiro reside.However, when the system name is used, the client must perform a DNS lookup to obtain the IP address of the server and a SQL Server Browser query to obtain the port number of the server on which the partner resides. Essas pesquisas e consultas podem ser ignoradas especificando o endereço IP e o número de porta do parceiro no atributo Server , em vez de especificar o nome do servidor.Those lookups and queries can be bypassed by specifying the IP address and port number of the partner in the Server attribute, rather than specifying the server name. Isso é recomendado para minimizar a possibilidade de atrasos externos durante a conexão com esse parceiro.This is recommended to minimize the possibility of external delays while connecting to that partner.

Observação

Uma consulta com o SQL Server Browser será necessária se a cadeia de conexão especificar o nome da instância nomeada, e não a porta.A SQL Server Browser query is necessary if the connection string specifies the named instance name and not the port.

Para especificar o endereço IP e a porta, o atributo Server usa o formato Server= <ip_address> , <port> , por exemplo:To specify the IP address and port, the Server attribute takes the following form, Server=<ip_address>,<port>, for example:

Server=123.34.45.56,4724;   

Observação

O endereço IP pode ser o IP Versão 4 (IPv4) ou IP Versão 6 (IPv6).The IP address can be IP Version 4 (IPv4) or IP Version 6 (IPv6).

Atributo de banco de dadosDatabase Attribute

Além disso, a cadeia de conexão deve especificar o atributo Database para fornecer o nome do banco de dados espelho.In addition, the connection string must specify the Database attribute to supply the name of the mirrored database. Se o banco de dados estiver indisponível quando o cliente tentar se conectar, uma exceção é ativada.If the database is unavailable when the client attempts to connect, an exception is raised.

Por exemplo, para se conectar expressamente ao banco de dados AdventureWorks no servidor principal Partner_A, um cliente usa a seguinte cadeia de conexão:For example, to expressly connect to the AdventureWorks database on the principal server Partner_A, a client uses the following connection string:

" Server=Partner_A; Database=AdventureWorks "

Observação

Essa cadeia de caracterse omite informações de autenticação.This string omits authentication information.

Importante

O agrupamento do prefixo de protocolo com o atributo Server (Server=tcp: <servername> ) é incompatível com o atributo Network e a especificação do protocolo em ambos os locais provavelmente resultará em um erro.Bundling the protocol prefix with the Server attribute (Server=tcp:<servername>) is incompatible with the Network attribute, and specifying the protocol in both places will likely result in an error. Portanto, recomendamos que uma cadeia de conexão especifique o protocolo usando o atributo Network e especifique somente o nome do servidor no atributo Server ("Network=dbmssocn; Server= <servername> ").Therefore, we recommend that a connection string specify the protocol using the Network attribute and specify only the server name in the Server attribute ("Network=dbmssocn; Server=<servername>").

Atributo de parceiro de failoverFailover Partner Attribute

Além do nome do parceiro inicial, o cliente pode especificar também o nome do parceiro de failover, que deve identificar a instância do servidor espelho atual.In addition to the initial partner name, the client can also specify failover partner name, which should identify the current mirror server instance. O parceiro de failover é especificado por uma das palavras-chave para o atributo do parceiro de failover.The failover partner is specified by one of the keywords for the failover partner attribute. A palavra-chave desse atributo depende da API em uso.The keyword for this attribute depends on the API that you are using. A tabela a seguir lista estas palavras-chave:The following table lists these keywords:

APIAPI Palavra-chave do atributo de parceiro de failoverKeyword for failover partner attribute
Provedor OLE DBOLE DB Provider FailoverPartnerFailoverPartner
Driver ODBCODBC Driver Failover_PartnerFailover_Partner
ADO ( ActiveX Data Object)ActiveX Data Objects (ADO) Failover PartnerFailover Partner

A forma mais simples de identificar a instância do servidor é pelo seu nome do sistema, <server_name> [ \ <SQL_Server_instance_name> ].The simplest way to identify the server instance is by its system name, <server_name>[\<SQL_Server_instance_name>].

Como alternativa, o endereço IP e número da porta podem ser fornecidos no atributo Failover Partner .Alternatively, the IP address and port number can be supplied in the Failover Partner attribute. 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 SQL Server Browser.If the initial connection attempt fails during the first connection to the database, the attempt to connect to the failover partner will be freed from relying on DNS and SQL Server Browser. 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 SQL Server Browser.Once a connection is established, the failover partner name will be overwritten with the failover partner name, so if a failover occurs, the redirected connections will require DNS and SQL Server Browser.

Observaçã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.When only the initial partner name is provided, application developers do not need to take any action or write any code except about how to reconnect.

Observação

Desenvolvedores de aplicativos de código gerenciado fornecem o nome do parceiro de failover no ConnectionString do objeto SqlConnection .Managed code application developers supply the failover partner name in the ConnectionString of the SqlConnection object. 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 MicrosoftMicrosoft .NET Framework SDK.For information on using this connection string, see "Database Mirroring Support in the .NET Framework Data Provider for SQL Server" in the ADO.NET documentation, which is part of the MicrosoftMicrosoft .NET Framework SDK.

Cadeia de conexão de exemploExample Connection String

Por exemplo, para fazer a conexão explícita com o banco de dados AdventureWorks 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:For example, to explicitly connect using TCP/IP to the AdventureWorks database on either Partner_A or Partner_B, a client application that uses the ODBC Driver could supply the following connection string:

"Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks; 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á:Alternatively, the client could use the IP address and port number to identify the initial partner, Partner_A; for example, if the IP address is 250.65.43.21 and the port number is 4734, the connection string would be:

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

Algoritmo de nova tentativa de conexão (para conexões TCP/IP)Connection Retry Algorithm (for TCP/IP Connections)

Para uma conexão TCP/IP, quando ambos os nomes de parceiro estiverem no cache, o provedor de acesso a dados aderirá a um algoritmo de nova tentativa de conexão.For a TCP/IP connection, when both partner names are in the cache, the data access provider adheres to a connection retry algorithm. Isto é verdade tanto para fazer a conexão inicial para a sessão como para reconectar depois de perder uma conexão estabelecida.This is true both for making the initial connection to the session and for reconnecting after losing an established connection. Quando uma conexão tiver sido estabelecida, completar os passos de pré-logon e logon leva tempo adicional.Once a connection has been opened, completing the pre-login and login steps takes additional time.

Observação

O tempo gasto para abrir uma conexão pode exceder o tempo de retentar por causa de fatores externos, como lookups de DNS lento, controlador/Kerberos Key Distribution Center (KDC) de domínio lento, tempo gasto contatando o SQL Server Browser, congestão de rede e outros.The time spent in opening a connection can exceed the retry time because of external factors, such as slow DNS lookups, slow domain controller/Kerberos Key Distribution Center (KDC), time spent contacting SQL Server Browser, network congestion, and so forth. Tais fatores externos podem impedir um cliente de conectar a um banco de dados espelho.Such external factors can prevent a client from connecting to a mirrored database. Além disso, fatores externos podem fazer uma conexão levar mais tempo para abrir do que o tempo estimado para retentar.Also, external factors can cause a connection to take longer to open than the allotted retry time. Para obter informações sobre como ignorar o DNS e o SQL Server Browser para a tentativa de conexão com o parceiro inicial, consulte Estabelecendo a conexão inicial com uma sessão de espelhamento de banco de dadosanteriormente neste tópico.For information on bypassing DNS and SQL Server Browser for connection attempt to the initial partner, see Making the Initial Connection to a Database Mirroring Session, earlier in this topic.

Se uma tentativa de conexão falhar ou o tempo de nova tentativa expirar antes da conexão acontecer, o provedor de acesso de dados tentará o outro parceiro.If a connection attempt fails or the retry time expires before it succeeds, the data access provider tries the other partner. Se uma conexão não for aberta neste ponto, o provedor tentará alternadamente os nomes do parceiro inicial e do failover, até que uma conexão seja aberta ou o período de logon expire. O período do tempo limite de logon padrão é de 15 segundos.If a connection is not opened by this point, the provider alternately tries the initial and failover partner names, until a connection is opened or the login period times out. The default login time-out period is 15 seconds. Nós recomendamos que o período de tempo limite de logon seja pelo menos de 5 segundos.We recommend that the login time-out period be at least 5 seconds. Especificar um período de tempo limite menor poderia impedir quaisquer das tentativas de conexão de ter êxito.Specifying a smaller time-out period might prevent any of the connection attempts from succeeding.

O tempo da retentar é uma porcentagem do período de logon.The retry time is a percentage of the login period. O tempo da retentar para uma tentativa de conexão é maior em cada turno sucessivo.The retry time for a connection attempt is larger in each successive round. No primeiro turno, o tempo de retentar para cada das duas tentativas é de 8 por cento do período de logon total.In the first round, the retry time for each of the two attempts is 8 percent of the total login period. Em cada turno sucessivo, o algoritmo de retentar aumenta o tempo máximo de retentar pela mesma quantia.In each successive round, the retry algorithm increases the maximum retry time by the same amount. Assim, o retentar para as primeiras oito tentativas de conexão é como se segue:Thus, the retry times for the first eight connection attempts is as follows:

8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%

O tempo de retentar é calculado usando a seguinte fórmula:The retry time is calculated using the following formula:

RetryTime = PreviousRetryTime +( 0.08 * LoginTimeout )RetryTime = PreviousRetryTime +( 0.08 *LoginTimeout)

Onde PreviousRetryTime é inicialmente 0.Where PreviousRetryTime is initially 0.

Por exemplo, se usar o período de intervalo de logon padrão de 15 segundos, LoginTimeout = 15.For example, if using the default login time-out period of 15 seconds, LoginTimeout = 15. Nesse caso, os tempos de nova tentativa alocados nos primeiros três turnos são os seguintes:In this case, the retry times allotted in the first three rounds are as follows:

RoundRound Cálculo deRetryTimeRetryTime calculation Tempo de nova tentativa por tentativaRetry time per attempt
11 0 +( 0,08 * 15 )0 +( 0.08 * 15 ) 1,2 segundos1.2 seconds
22 1,2 +( 0,08 * 15 )1.2 +( 0.08 * 15 ) 2,4 segundos2.4 seconds
33 2,4 +( 0,08 * 15 )2.4 +( 0.08 * 15 ) 3,6 segundos3.6 seconds
44 3,6 +( 0,08 * 15 )3.6 +( 0.08 * 15 ) 4,8 segundos4.8 seconds

A figura a seguir ilustra esses tempos de nova tentativa em tentativas de conexão sucessivas, todas elas com tempos limite esgotados.The following figure illustrates these retry times for successive connection attempts, each of which times out.

Atrasos máximos de repetições para um tempo limite de logon de 15 segundosMaximum retry delays for 15 second login timeout

Para o período limite de logon padrão, o tempo máximo estimado para os primeiros três turnos de tentativas de conexão é de 14.4 segundos.For the default login time-out period, the maximum time allotted to the first three rounds of connection attempts is 14.4 seconds. Se toda tentativa fosse usar tudo de seu tempo estimado, só 0.6 segundo de tempo restaria antes do período de logon expirar. Naquele caso, o quarto turno seria reduzido, permitindo só uma tentativa rápida final para conectar usando o nome de parceiro inicial.If every attempt were to use all of its allotted time, only 0.6 seconds of time would remain before the login period times out. In that case, the fourth round would be curtailed, allowing only a final quick attempt to connect using the initial partner name. Porém, uma tentativa de conexão pode falhar em menos tempo do que seu tempo estimado, particularmente em turnos posteriores.However, a connection attempt may fail in less than its allotted retry time, particularly in later rounds. Por exemplo, receber um erro de rede pode fazer com que uma tentativa termine antes que o tempo de retentar expire.For example, receiving a network error can cause an attempt to end before the retry time expires. Se as primeiras tentativas falharem devido a um erro de rede, haveria tempo adicional disponível para o quarto turno e, talvez, turnos adicionais.If earlier attempts fail due to a network error, additional time would be available for the fourth round and, perhaps, additional rounds.

Outra causa de uma tentativa falha é uma instância de servidor inativa, como acontece quando uma instância de servidor estiver comprometida numa interrupção de seu banco de dados.Another cause of a failed attempt is an inactive server instance, as occurs when a server instance is engaged in failing over its database. Neste caso, um atraso é imposto para impedir clientes de sobrecarregar os parceiros com uma sucessão rápida de tentativas de conexão.In this case, a retry delay is imposed to prevent clients from overloading the partners with a rapid succession of connection attempts.

Observação

Quando ambos os nomes de parceiros estiverem disponíveis, se o período de tempo de limite de logon for infinito, o cliente tentará se reconectar indefinidamente aos servidores, alternando entre o nome de parceiro inicial e o nome de parceiro de failover.When both partner names are available, if the login time-out period is infinite, the client attempts to reconnect to the servers indefinitely, alternating between the initial partner name and the failover partner name.

Atrasos de nova tentativa durante o failoverRetry Delays During Failover

Se um cliente tentar se conectar a um parceiro que está em failover, o parceiro responderá imediatamente que é inativo.If a client attempts to connect to a partner that is failing over, the partner immediately responds that it is inactive. Neste caso, cada turno de tentativas de conexão é muito mais breve que o tempo de retentar estimado.In this case, each round of connection attempts are much briefer than the allotted retry time. Isso significa que muitos turnos de tentativas de conexão poderiam acontecer antes que o período de logon expire. Para evitar a sobrecarrega dos parceiros com uma série rápida de tentativas de conexão durante um failover, o provedor de acesso de dados adiciona um breve retardo ao retentar depois de cada turno de retentar.This means that many rounds of connection attempts could happen before the login period times out. To avoid overloading the partners with a rapid series of connection attempts during a failover, the data access provider adds a brief retry delay after each retry cycle. A duração de um determinado retardo ao retentar é determinada pelo algoritmo de retardo ao retentar.The length of a given retry delay is determined by the retry-delay algorithm. Depois do primeiro turno, o retardo é 100 milissegundos.After the first round, the delay is 100 milliseconds. Após cada um dos três turnos, o retardo ao repetir dobra – para 200, 400 e 800.After each of the next three rounds, the retry delay doubles-to 200, 400, and 800. Em todos os últimos turnos, o atraso de nova tentativa é de 1 segundo até que a tentativa de conexão tenha êxito ou expire.For all later rounds, the retry delay is 1 second until the connection attempt succeeds or times out.

Observação

Se a instância de servidor for parada, então a solicitação de conexão falhará imediatamente.If the server instance is stopped, then the connection request fails immediately.

A figura seguinte ilustra como o atraso de nova tentativa afeta as tentativas de conexão durante um failover manual, no qual os parceiros trocam suas funções.The following figure illustrates how the retry delay affects connection attempts during a manual failover, in which the partners switch their roles. O período de tempo limite de logon padrão é de 15 segundos.The login time-out period is 15 seconds.

Algoritmo de repetição-atrasoRetry-delay algorithm

Reconectando uma sessão de espelhamento de banco de dadosReconnecting to a Database Mirroring Session

Se uma conexão estabelecida com uma sessão de espelhamento de banco de dados falhar por qualquer motivo, por exemplo, devido a um failover de espelhamento de banco de dados, e o aplicativo tentar se reconectar ao servidor inicial, o provedor de acesso de dados poderá tentar se reconectar usando o nome de parceiro de failover armazenado no cache do cliente.If an established connection to a database mirroring session fails for any reason, for example, due to a database mirroring failover, and the application attempts to reconnect to the initial server, the data access provider can attempt to reconnect using the failover partner name stored in the client's cache. Porém, a reconexão não é automática.Reconnecting is not automatic, however. O aplicativo deve se dar conta do erro.The application must become aware of the error. Então, o aplicativo precisa fechar a conexão com falha e abrir uma conexão nova que use os mesmos atributos de cadeia de caracteres de conexão.Then, the application needs to close the failed connection and open a new connection using the same connection string attributes. Neste momento, o provedor de acesso de dados redireciona a conexão ao parceiro de failover.At this point, the data access provider redirects the connection to the failover partner. Se a instância de servidor identificada por este nome for atualmente o servidor principal, a tentativa de conexão normalmente terá sucesso.If the server instance identified by this name is currently the principal server, the connection attempt usually succeeds. Caso estiver obscuro se uma transação foi confirmada ou revertida, o aplicativo deve inspecionar o estado da transação, da mesma maneira como ao reconectar a uma instância de servidor autônoma.If it is unclear whether a transaction was committed or rolled back, the application must check on the state of the transaction, in the same way as when reconnecting to a stand-alone server instance.

A reconexão se assemelha a uma conexão inicial para a qual a cadeia de caracteres de conexão forneceu um nome de parceiro de failover.Reconnecting resembles an initial connection for which the connection string supplied a failover partner name. Se a primeira tentativa de conexão falhar, as tentativas de conexão alternarão seguidamente entre o nome do parceiro inicial e o nome do parceiro de failover até que o cliente conecte ao servidor principal ou o provedor de acesso de dados expire o tempo limite.If the first connection attempt fails, connection attempts alternate back and forth between the initial partner name and failover partner name until either the client connects to the principal server or the data access provider times out.

Observação

SQL ServerSQL Server O Native Client verifica se ele se conecta a uma instância de servidor principal, mas não se essa instância é o parceiro da instância de servidor especificado no nome de parceiro inicial da cadeia de conexão.Native Client verifies that it connects to a principal server instance but not whether this instance is the partner of server instance specified in the initial partner name of the connection string.

Se as conexões usarem TCP/IP, o algoritmo de nova tentativa de conexão determinará o período de tempo designado para as tentativas de conexão em cada turno.If the connections use TCP/IP, the connection retry algorithm determines the amount of time allotted to the connection attempts in each round.

Importante

Se o cliente for desconectado do banco de dados, o provedor de acesso de dados não tentará reconectar.If the client gets disconnected from the database, the data access provider does not attempt to reconnect. O cliente deverá emitir uma solicitação de conexão nova.The client must issue a new connection request. Também, se um aplicativo desligar ao perder a conexão, perderá os nomes do parceiro em cache.Also, if an application shuts down on losing the connection, it will lose the cached partner names. Se a conexão se perder porque o servidor principal ficou indisponível, o único modo pelo qual o aplicativo pode se reconectar ao servidor espelho é fornecendo o nome do parceiro de failover em sua cadeia de conexão.If the connection was lost because the principal server became unavailable, the only way that the application can reconnect to the mirror server is by supplying the failover partner name in its connection string.

Impacto do redirecionamento em um aplicativo clienteImpact of Redirection on a Client Application

Depois de um failover, o provedor de acesso a dados redireciona a conexão com a instância do servidor principal atual.After a failover, the data access provider redirects the connection to the current principal server instance. Porém, a redireção é transparente aos clientes.However, the redirection is transparent to clients. Para um cliente, uma conexão redirecionada parece ser uma conexão com a instância de servidor identificada pelo nome do parceiro inicial.To a client, a redirected connection appears to be a connection to the server instance identified by the initial partner name. Quando o parceiro inicial for atualmente o servidor espelho, o cliente poderá parecer estar conectado ao servidor espelho e atualizando o banco de dados espelho.When the initial partner is currently the mirror server, the client can appear to be connected to the mirror server and updating the mirror database. Porém, de fato o cliente foi redirecionado ao parceiro de failover que é o banco de dados principal atual e o cliente está atualizando o banco de dados principal novo.Actually, however, the client has been redirected to the failover partner, which is the current principal database, and the client is updating the new principal database.

Depois de ser redirecionado ao parceiro de failover, um cliente pode experimentar resultados inesperados ao usar uma instrução USE Transact-SQLTransact-SQL para usar um banco de dados diferente.After being redirected to the failover partner, a client can experience unexpected results when using a Transact-SQLTransact-SQL USE statement to use a different database. Isso poderá acontecer se a instância do servidor principal atual (o parceiro de failover) tiver um conjunto de bancos de dados diferente do servidor principal original (o parceiro inicial).This can happen if the current principal server instance (the failover partner) has a different set of databases than the original principal server (the initial partner).

O impacto de um nome de parceiro de failover desatualizadoThe Impact of a Stale Failover Partner Name

O administrador do banco de dados pode alterar o parceiro de failover a qualquer momento.The database administrator can change the failover partner at any time. Portanto, um nome de parceiro de failover fornecido pelo cliente pode estar desatualizado ou obsoleto.Therefore, a client-supplied failover partner name might be out of date, or stale. Por exemplo, considere um nome de parceiro de failover Partner_B que é substituído por outra instância de servidor, Partner_C.For example, consider a failover partner named Partner_B that is replaced by another server instance, Partner_C. Se um cliente fornecer Partner_B como o nome do parceiro de failover, este nome estará desatualizado.Now, if a client supplies Partner_B as the failover partner name, that name is stale. Quando o nome do parceiro de failover fornecido pelo cliente está desatualizado, o comportamento do provedor de acesso de dados é equiparado ao caso em que um nome de parceiro de failover não é fornecido pelo cliente.When the client-supplied failover partner name is stale, the behavior of the data access provider equates to the case in which a failover partner name is not supplied by the client.

Por exemplo, considere uma situação em que um cliente usa uma cadeia de conexão para uma série de quatro tentativas de conexão.For example, consider situation in which a client uses one connection string for a series of four connection attempts. Na cadeia de conexão, o nome do parceiro inicial é Partner_A e o nome do parceiro de failover é Partner_B:In the connection string, the initial partner name is Partner_A, and the failover partner name is Partner_B:

"Server=Partner_A; Failover Partner=Partner_B; Database=AdventureWorks"  

A tabela a seguir mostra quatro configurações de parceiro e indica para cada uma se essa cadeia de conexão funciona para conexão com o cliente pela primeira vez.The following table shows four partner configurations and indicates for each whether this connection string works for connecting the client for the first time.

Observação

Um aplicativo pode rastrear alterações de configuração e alterar sua cadeia de conexão.An application can track configuration changes and change its connection string accordingly. Isso requer código extra, mas reduz a carga administrativa.This requires extra code but reduces the administrative burden.

ConfiguraçãoConfiguration Servidor principalPrincipal server Servidor espelhoMirror server Comportamento ao tentar conexão especificando Partner_A e Partner_BBehavior when attempting to connect specifying Partner_A and Partner_B
Configuração de espelhamento original.Original mirroring configuration. Partner_APartner_A Partner_BPartner_B O Partner_A é armazenado em cache como o nome do parceiro inicial.Partner_A is cached as the initial partner name. O cliente tem sucesso na conexão com o Partner_A.The client succeeds in connecting to Partner_A. O cliente baixa o nome do servidor espelho, Partner_B, e o coloca em cache, ignorando o nome do parceiro de failover fornecido pelo cliente.The client downloads the name of mirror server, Partner_B, and caches it, ignoring the client-supplied failover partner name.
O Partner_A experimenta um problema de hardware e ocorre failover (desconectando clientes).Partner_A experiences a hardware failure, and failover occurs (disconnecting clients). Partner_BPartner_B nonenone O Partner_A ainda está no cache como o nome do parceiro inicial, mas o nome do parceiro de failover fornecido pelo cliente, Partner_B, permite que o cliente faça conexão com o servidor principal atual.The Partner_A is still cached as the initial partner name, but the client-supplied failover partner name, Partner_B, permits the client to connect to the current principal server.
O administrador do banco de dados interrompe o espelhamento (desconectando os clientes), substitui Partner_A por Partner_C e reinicializa o espelhamento.The database administrator stops mirroring (disconnecting clients), replaces Partner_A with Partner_C, and restarts mirroring. Partner_BPartner_B Partner_CPartner_C O cliente tenta se conectar com o Partner_A e não consegue; então o cliente tenta o Partner_B (o servidor principal atual) e tem sucesso.The client attempts to connect to Partner_A and fails; then the client tries Partner_B (the current principal server) and succeeds. O provedor de acesso de dados carrega o nome do servidor espelho atual, Partner_C, e o coloca em cache como o nome do parceiro de failover atual.The data access provider downloads the name of the current mirror server, Partner_C, and caches it as the current failover partner name.
O failover do serviço é enviado manualmente para o Partner_C (desconectando os clientes).Service is manually failed over to Partner_C (disconnecting clients). Partner_CPartner_C Partner_BPartner_B O cliente tenta conexão com o Partner_A inicialmente, e depois com o Partner_B.Client attempts to connect to Partner_A initially, and then to Partner_B. Os dois nomes falham, e finalmente o tempo limite da solicitação de conexão se esgota e falha.Both names fail, and eventually the connection request times out and fails.

Consulte TambémSee Also

Espelhamento de banco de dados (SQL Server) Database Mirroring (SQL Server)
Possíveis falhas durante espelhamento de banco de dadosPossible Failures During Database Mirroring