SQL Server Suporte Nativo de Cliente para Alta Disponibilidade, Recuperação de Desastres

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)

Importante

SQL Server Native Client (SNAC) não é fornecido com:

  • SQL Server 2022 (16.x) e versões posteriores
  • SQL Server Management Studio 19 e versões posteriores

O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdado não são recomendados para o desenvolvimento de novos aplicativos.

Para novos projetos, use um dos seguintes drivers:

Para o SQLNCLI fornecido como componente do Mecanismo de Base de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção ao Ciclo de Vida de Suporte .

Este tópico discute o suporte ao SQL Server Native Client (adicionado no SQL Server 2012 (11.x)) para grupos de disponibilidade Always On. Para mais informações sobre grupos de disponibilidade Always On, consulte Availability Group Listeners, Connectivity do Cliente e Failover de Aplicações (SQL Server),Criação e Configuração de Grupos de Disponibilidade (SQL Server),Clustering por Failover e Grupos de Disponibilidade Sempre Ligados (SQL Server), e Ativos Secundários: Réplicas Secundárias Legíveis (Always On Availability Groups).

Pode especificar o ouvinte do grupo de disponibilidade de um dado grupo de disponibilidade na cadeia de conexão. Se uma aplicação cliente nativa do SQL Server estiver ligada a uma base de dados num grupo de disponibilidade que faz failover, a ligação original é quebrada e a aplicação tem de abrir uma nova ligação para continuar o trabalho após o failover.

Se não estiver a ligar-se a um ouvinte de grupo de disponibilidade, e se vários endereços IP estiverem associados a um nome de host, o SQL Server Native Client irá iterar sequencialmente por todos os endereços IP associados à entrada DNS. Isso pode ser demorado se o primeiro endereço IP retornado pelo servidor DNS não estiver vinculado a nenhuma placa de interface de rede (NIC). Ao ligar-se a um ouvinte de grupo de disponibilidade, o SQL Server Native Client tenta estabelecer ligações a todos os endereços IP em paralelo e, se uma tentativa de ligação for bem-sucedida, o driver descarta quaisquer tentativas de ligação pendentes.

Note

Aumentar o tempo limite de ligação e implementar uma lógica de nova tentativa de ligação aumentará a probabilidade de uma aplicação estabelecer ligação a um grupo de disponibilidade. Além disso, como uma ligação pode falhar devido a um failover de grupo de disponibilidade, deve implementar lógica de retentativa de ligação, tentando novamente uma ligação falhada até que esta se reconecte.

Ligação com MultiSubnetFailover

Especifique sempre MultiSubnetFailover=Sim ao ligar-se a um ouvinte de grupo de disponibilidade do SQL Server 2012 ou a uma Instância de Cluster de Failover do SQL Server 2012. O MultiSubnetFailover permite um failover mais rápido para todos os Grupos de Disponibilidade e instâncias do cluster de failover no SQL Server 2012 e reduzirá significativamente o tempo de failover para topologias Always On de uma e múltiplas sub-redes. Durante um failover de várias sub-redes, o cliente tentará conexões em paralelo. Durante um failover de sub-rede, o SQL Server Native Client tenta agressivamente a ligação TCP.

A propriedade de ligação MultiSubnetFailover indica que a aplicação está a ser implementada num grupo de disponibilidade ou Instância de Cluster de Failover, e que o SQL Server Native Client tentará ligar-se à base de dados na instância principal do SQL Server tentando ligar-se a todos os endereços IP. Quando MultiSubnetFailover=Yes é especificado para uma ligação, o cliente tenta novamente as tentativas de ligação TCP mais rapidamente do que os intervalos padrão de retransmissão TCP do sistema operativo. Isso permite uma reconexão mais rápida após o failover de um Grupo de Disponibilidade Always On ou de uma Instância de Cluster de Failover Always On e é aplicável a Grupos de Disponibilidade de sub-rede única e múltipla e Instâncias de Cluster de Failover.

Para mais informações sobre palavras-chave de cadeia de ligação, consulte Using Connection String Keywords with SQL Server Native Client.

Especificar MultiSubnetFailover=Sim ao ligar-se a algo que não seja um ouvinte de grupo de disponibilidade ou uma Instância de Cluster de Failover pode resultar num impacto negativo no desempenho, e não é suportado.

Use as seguintes diretrizes para se ligar a um servidor num grupo de disponibilidade ou numa Instância de Cluster de Failover:

  • Use a propriedade de ligação MultiSubnetFailover ao ligar-se a uma única sub-rede ou multi-sub-redes; Vai melhorar o desempenho de ambos.

  • Para se conectar a um grupo de disponibilidade, especifique o ouvinte do grupo de disponibilidade como servidor na sua cadeia de conexão.

  • A conexão com uma instância do SQL Server configurada com mais de 64 endereços IP causará uma falha de conexão.

  • O comportamento de uma aplicação que utiliza a propriedade de ligação MultiSubnetFailover não é afetado consoante o tipo de autenticação: Autenticação SQL Server, Autenticação Kerberos ou Autenticação Windows.

  • Pode aumentar o valor do loginTimeout para acomodar o tempo de failover e reduzir as tentativas de ligação à aplicação.

  • Não há suporte para transações distribuídas.

Se o encaminhamento apenas de leitura não estiver em vigor, a ligação a uma localização secundária de réplica num grupo de disponibilidade falhará nas seguintes situações:

  1. Se o local da réplica secundária não estiver configurado para aceitar conexões.

  2. Se uma aplicação usar ApplicationIntent=ReadWrite (discutido abaixo) e a localização da réplica secundária estiver configurada para acesso apenas de leitura.

Uma ligação falhará se uma réplica primária estiver configurada para rejeitar cargas de trabalho apenas de leitura e a cadeia de ligação contiver ApplicationIntent=ReadOnly.

Atualizando para usar clusters de várias sub-redes a partir do espelhamento de banco de dados

Ocorrerá um erro de ligação se as palavras-chave MultiSubnetFailover e Failover_Partner connection estiverem presentes na cadeia de ligação. Também ocorrerá um erro se for usado MultiSubnetFailover e o SQL Server devolver uma resposta do parceiro de failover indicando que faz parte de um par de espelhamento da base de dados.

Se atualizar uma aplicação SQL Server Native Client que atualmente utiliza espelhamento de base de dados para um cenário multi-sub-net, deve remover a propriedade de ligação Failover_Partner e substituí-la por MultiSubnetFailover definida para Yes e substituir o nome do servidor na cadeia de ligação por um ouvinte de grupo de disponibilidade. Se uma cadeia de ligação usar Failover_Partner e MultiSubnetFailover=Sim, o driver gerará um erro. No entanto, se uma cadeia de ligação usar Failover_Partner e MultiSubnetFailover=Não (ou ApplicationIntent=ReadWrite), a aplicação usará espelhamento de base de dados.

O driver devolverá um erro se for usado espelhamento de base de dados na base de dados principal do grupo de disponibilidade, e se MultiSubnetFailover=Yes for usado na cadeia de ligação que se liga a uma base de dados primária em vez de um ouvinte de grupo de disponibilidade.

Especifique a intenção da aplicação

Podes especificar a palavra-chave ApplicationIntent na tua cadeia de ligação. Os valores atribuíveis são ReadWrite (o padrão) ou ReadOnly.

Quando defines ApplicationIntent=ReadOnly, o cliente solicita uma carga de trabalho de leitura ao ligar. O servidor impõe a intenção no momento da ligação e durante uma USE instrução de base de dados.

A palavra-chave ApplicationIntent não funciona com bases de dados antigas só de leitura.

Alvos do ReadOnly

Quando uma ligação escolhe ReadOnly, a ligação é atribuída a qualquer uma das seguintes configurações especiais que possam existir para a base de dados:

  • Sempre ligado. Uma base de dados pode permitir ou não a leitura de cargas de trabalho na base de dados do grupo de disponibilidade alvo. Esta escolha é controlada através da utilização da cláusula ALLOW_CONNECTIONS das instruções Transact-SQL PRIMARY_ROLE e SECONDARY_ROLE.

  • Geo-replication

  • Expansão horizontal de leitura

Se nenhum desses alvos especiais estiver disponível, a base de dados regular é consultada.

A palavra-chave ApplicationIntent permite o encaminhamento só de leitura.

Roteio de somente leitura

O encaminhamento só de leitura é uma funcionalidade que pode garantir a disponibilidade de uma réplica de uma base de dados só de leitura. Para permitir o encaminhamento apenas de leitura, aplicam-se todas as seguintes condições:

  • Tem de estabelecer ligação a um listener do grupo de disponibilidade Always On.

  • A ApplicationIntent palavra-chave da cadeia de conexão deve ser definida como ReadOnly.

  • O administrador da base de dados deve configurar o grupo de disponibilidade para ativar o encaminhamento apenas de leitura.

Várias ligações que usam roteamento apenas de leitura podem não se ligar todas à mesma réplica de apenas leitura. Modificações na sincronização da base de dados ou alterações na configuração de roteamento do servidor podem resultar em ligações dos clientes a diferentes réplicas de leitura apenas.

Pode garantir que todos os pedidos só de leitura se liguem à mesma réplica só de leitura não passando um escutador de grupo de disponibilidade para a palavra-chave Server da cadeia de ligação. Em vez disso, especifique o nome da instância de apenas leitura.

O encaminhamento só de leitura pode demorar mais tempo do que estabelecer ligação ao servidor primário. Isto acontece porque o encaminhamento apenas de leitura liga-se primeiro ao primário e depois procura o melhor secundário legível disponível. Devido a estas várias etapas, deve aumentar o seu login tempo limite para, pelo menos, 30 segundos.

ODBC

Foram adicionadas duas palavras-chave de cadeia de ligação ODBC para suportar grupos de disponibilidade Always On no SQL Server Native Client:

  • Intenção do aplicativo

  • MultiSubnetFailover

Para mais informações sobre palavras-chave de cadeia de ligação ODBC no SQL Server Native Client, consulte Using Connection String Keywords with SQL Server Native Client.

As propriedades equivalentes de ligação são:

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

Para mais informações sobre as propriedades da ligação ODBC no SQL Server Native Client, consulte SQLSetConnectAttr.

A funcionalidade das palavras-chave ApplicationIntent e MultiSubnetFailover será exposta no ODBC Data Source Administrator para DSNs que utilizam o driver SQL Server Native Client, a partir do SQL Server 2012 (11.x).

Uma aplicação ODBC Native Client do SQL Server pode usar uma de três funções para estabelecer a ligação:

Função Description
SQLBrowseConnect A lista de servidores devolvida pelo SQLBrowseConnect não inclui VNNs. Só verá uma lista de servidores sem qualquer indicação se o servidor é autónomo, ou um servidor primário ou secundário num cluster Windows Server Failover Clustering (WSFC) que contém duas ou mais instâncias do SQL Server ativadas para grupos de disponibilidade Always On. Se se ligar a um servidor e tiver uma falha, pode ser porque se ligou a um servidor e a definição ApplicationIntent não é compatível com a configuração do servidor.

Como o SQLBrowseConnect não reconhece servidores num cluster Windows Server Failover Clustering (WSFC) que contenha duas ou mais instâncias do SQL Server ativadas para grupos de disponibilidade Always On, o SQLBrowseConnect ignora a palavra-chave da cadeia de ligação MultiSubnetFailover.
SQLConnect O SQLConnect suporta tanto o ApplicationIntent como o MultiSubnetFailover através de um nome de fonte de dados (DSN) ou propriedades de ligação.
SQLDriverConnect O SQLDriverConnect suporta ApplicationIntent e MultiSubnetFailover através de palavras-chave de cadeia de ligação, propriedades de ligação ou DSN.

OLE DB

O OLE DB no SQL Server Native Client não suporta a palavra-chave MultiSubnetFailover.

O OLE DB no SQL Server Native Client suportará a intenção da aplicação. A intenção da aplicação comportar-se-á da mesma forma para aplicações OLE DB que para aplicações ODBC (ver acima).

Uma palavra-chave de cadeia de ligação do OLE DB adicionada para suportar grupos de disponibilidade Always On no SQL Server Native Client:

  • Intenção da Aplicação

Para mais informações sobre palavras-chave de cadeia de ligação no SQL Server Native Client, consulte Using Connection String Keywords with SQL Server Native Client.

As propriedades equivalentes de ligação são:

  • SSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRING

Uma aplicação SQL Server Native Client OLE DB pode usar um dos métodos para especificar a intenção da aplicação:

IDBInitialize::Inicialize
O IDBInitialize::Initialize utiliza o conjunto de propriedades previamente configurado para inicializar a fonte de dados e criar o objeto fonte de dados. Especifique a intenção da aplicação como propriedade do fornecedor ou como parte da cadeia de propriedades estendidas.

IDataInitialize::GetDataSource
IDataInitialize::GetDataSource recebe uma cadeia de ligação de entrada que pode conter a palavra-chave Application Intent .

IDBProperties::GetProperties
IDBProperties::GetProperties recupera o valor da propriedade que está atualmente definida na fonte de dados. Pode recuperar o valor da Intenção de Aplicação através da propriedade DBPROP_INIT_PROVIDERSTRING e da propriedade SSPROP_INIT_APPLICATIONINTENT.

IDBProperties::SetProperties
Para definir o valor da propriedade ApplicationIntent , chame IDBProperties::SetProperties passando a propriedade SSPROP_INIT_APPLICATIONINTENT com valor "ReadWrite" ou "ReadOnly" ou DBPROP_INIT_PROVIDERSTRING propriedade com valor contendo "ApplicationIntent=ReadOnly" ou "ApplicationIntent=ReadWrite".

Pode especificar a intenção de aplicação no campo Propriedades de Intenção de Aplicação do separador Todos na caixa de diálogo Propriedades do Enlace de Dados .

Quando as ligações implícitas são estabelecidas, a ligação implícita utilizará a definição de intenção de aplicação da ligação pai. De forma semelhante, múltiplas sessões criadas a partir da mesma fonte de dados herdarão a definição de intenção de aplicação da fonte.