Utilização do Espelhamento de Base de Dados no Cliente Nativo do SQL Server

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

Note

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Em vez disso, use os grupos de disponibilidade Always On.

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 .

O espelhamento de bases de dados, introduzido no SQL Server 2005 (9.x), é uma solução para aumentar a disponibilidade da base de dados e a redundância de dados. O SQL Server Native Client fornece suporte implícito para espelhamento de bases de dados, pelo que o programador não precisa de escrever qualquer código ou tomar qualquer outra ação depois de este ter sido configurado para a base de dados.

O espelhamento de bases de dados, que é implementado por base de dados, mantém uma cópia de uma base de dados de produção SQL Server num servidor de espera. Este servidor é um servidor de espera quente ou morno, dependendo da configuração e do estado da sessão de espelhamento da base de dados. Um servidor de espera quente suporta failover rápido sem perda de transações comprometidas, e um servidor de espera quente suporta forcing service (com possível perda de dados).

A base de dados de produção é chamada de base de dados principal, e a cópia de reserva é chamada de base de dados espelhada. A base de dados principal e a base de dados espelhada devem residir em instâncias separadas do SQL Server (instâncias do servidor), e devem residir em computadores separados, se possível.

A instância do servidor de produção, chamada servidor principal, comunica com a instância do servidor de reserva, chamada servidor espelho. Os servidores principal e os servidores espelho atuam como parceiros dentro de uma sessão de espelhamento de base de dados. Se o servidor principal falhar, o servidor espelho pode transformar a sua base de dados na base de dados principal através de um processo chamado failover. Por exemplo, Partner_A e Partner_B são dois servidores parceiros, com a base de dados principal inicialmente em Partner_A como servidor principal, e a base de dados espelhada a residir em Partner_B como servidor espelho. Se Partner_A ficar offline, a base de dados na Partner_B pode fazer failover para se tornar a base de dados principal atual. Quando Partner_A volta a juntar-se à sessão de espelhamento, torna-se o servidor espelho e a sua base de dados torna-se a base de dados espelhada.

Configurações alternativas de espelhamento de bases de dados oferecem diferentes níveis de desempenho e segurança de dados, e suportam diferentes formas de failover. Para mais informações, consulte Espelhamento de Base de Dados (SQL Server).

É possível usar um alias ao especificar o nome da base de dados espelhada.

Note

Para informações sobre tentativas iniciais de ligação e tentativas de reconexão a uma base de dados espelhada, veja Conectar Clientes a uma Sessão de Espelhamento de Base de Dados (SQL Server).

Considerações sobre programação

Quando o servidor principal da base de dados falha, a aplicação cliente recebe erros em resposta a chamadas de API, que indicam que a ligação à base de dados foi perdida. Quando isto acontece, quaisquer alterações não comprometidas na base de dados são perdidas e a transação atual é revertida. Se isto acontecer, a aplicação deve fechar a ligação (ou libertar o objeto fonte de dados) e reabri-la. A ligação é redirecionada de forma transparente para a base de dados espelhada, que agora atua como servidor principal.

Quando é estabelecida uma conexão, o servidor principal envia ao cliente a identificação do seu servidor parceiro de contingência, para ser usada em caso de contingência. Quando uma aplicação tentou estabelecer uma ligação após a falha do servidor principal, o cliente não conhece a identidade do parceiro de failover. Para permitir que os clientes tenham a oportunidade de lidar com este cenário, uma propriedade de inicialização e uma palavra-chave cadeia de ligação associada permitem ao cliente especificar a identidade do parceiro de failover por si só. O atributo cliente é usado apenas neste cenário; se o servidor principal estiver disponível, este não é utilizado. Se o servidor parceiro de failover fornecido pelo cliente não se referir a um servidor a atuar como parceiro de failover, a ligação é recusada pelo servidor. Para permitir que as aplicações se adaptem às alterações de configuração, a identidade do parceiro de failover real pode ser determinada inspecionando o atributo após a ligação ter sido estabelecida. Deve considerar armazenar em cache a informação do parceiro para atualizar a cadeia de ligação ou criar uma estratégia de retentativa caso a primeira tentativa de ligação falhe.

Note

Deve especificar explicitamente a base de dados a ser usada por uma ligação se quiser usar esta funcionalidade numa DSN, cadeia de ligação ou propriedade/atributo de conexão. O SQL Server Native Client não tentará fazer failover para a base de dados parceira se isso não for feito.

O espelhamento é uma funcionalidade da base de dados. Aplicações que utilizam múltiplas bases de dados podem não conseguir explorar esta funcionalidade.

Além disso, os nomes dos servidores não distinguem maiúsculas e minúsculas, mas os nomes das bases de dados são distinguíveis de maiúsculas e minúsculas. Deves, portanto, certificar-te de que usas a mesma carcaça nos DSNs e nas strings de ligação.

Fornecedor SQL Server Native Client OLE DB

O fornecedor SQL Server Native Client OLE DB suporta espelhamento de base de dados através de atributos de conexão e cadeia de ligação. A propriedade SSPROP_INIT_FAILOVERPARTNER foi adicionada ao conjunto de propriedades DBPROPSET_SQLSERVERDBINIT, e a palavra-chave FailoverPartner é um novo atributo cadeia de ligação para DBPROP_INIT_PROVIDERSTRING. Para obter mais informações, consulte Usando palavras-chave de cadeia de conexão com SQL Server Native Client.

A cache de failover é mantida enquanto o fornecedor estiver carregado, o que é até que o CoUninitialize seja chamado ou desde que a aplicação tenha uma referência a algum objeto gerido pelo fornecedor OLE DB do SQL Server Native Client, como um objeto fonte de dados.

Para detalhes sobre o suporte do fornecedor de OLE DB do SQL Server Native Client para espelhamento de bases de dados, consulte Propriedades de Inicialização e Autorização.

Driver ODBC de Cliente Nativo do SQL Server

O driver ODBC do SQL Server Native Client suporta espelhamento de base de dados através de atributos de ligação e cadeia de ligação. Especificamente, o atributo SQL_COPT_SS_FAILOVER_PARTNER foi adicionado para uso com as funções SQLSetConnectAttr e SQLGetConnectAttr; e a palavra-chave Failover_Partner foi adicionada como um novo atributo cadeia de ligação.

A cache de failover é mantida enquanto a aplicação tiver pelo menos um handle de ambiente atribuído. Por outro lado, perde-se quando o último handle do ambiente é deallocated.

Note

O ODBC Driver Manager foi melhorado para suportar a especificação do nome do servidor de failover.