Partilhar via


Espelhamento de banco de dados no SQL Server

Baixar ADO.NET

Observação

O espelhamento de banco de dados no SQL Server é uma tecnologia distinta do Espelhamento de Banco de Dados do Microsoft Fabric.

O espelhamento de banco de dados no SQL Server permite manter uma cópia, ou espelho, de um banco de dados do SQL Server em um servidor em espera. Usar o espelhamento garante que sempre existam duas cópias separadas dos dados, fornecendo alta disponibilidade e redundância completa de dados. O Provedor do Microsoft SqlClient para SQL Server fornece um suporte implícito para executar o espelhamento de bancos de dados. O desenvolvedor não precisará executar ações depois que o cliente tiver sido configurado para usar um banco de dados SQL Server. Além disso, o objeto SqlConnection é compatível com um modo de conexão explícito que permite fornecer o nome de um servidor parceiro de failover no ConnectionString.

A sequência de eventos simplificada a seguir ocorre para um objeto SqlConnection direcionado a um banco de dados configurado para espelhamento:

  1. O aplicativo cliente se conectará com êxito ao banco de dados principal, depois o servidor enviará de volta o nome do servidor parceiro, que o cliente armazenará em cache.
  2. Se o servidor contendo o banco de dados principal falhar ou a conectividade for interrompida, o status da transação e da conexão será perdido. O aplicativo cliente tenta restabelecer uma conexão com o banco de dados principal e falha.
  3. O aplicativo cliente tenta então, de forma transparente, estabelecer uma conexão com o banco de dados espelho no servidor parceiro. Caso tenha êxito, a conexão será redirecionada ao banco de dados espelho, que, então, se tornará o novo banco de dados principal.

Especificar o parceiro de failover na cadeia de conexão

Caso forneça o nome de um servidor parceiro de failover na cadeia de conexão e o banco de dados principal não esteja disponível durante a conexão do aplicativo cliente, o cliente tentará executar uma conexão com o parceiro de failover de modo transparente.

";Failover Partner=PartnerServerName"

Caso omita o nome do servidor parceiro de failover e o banco de dados principal não esteja disponível durante a primeira conexão do aplicativo cliente, um objeto SqlException ocorrerá.

Quando um objeto SqlConnection for aberto com êxito, o servidor retornará o nome do parceiro de failover, que substituirá todos os valores fornecidos na cadeia de conexão.

Observação

Especifique, de forma explícita, o nome do banco de dados ou do catálogo inicial na cadeia de conexão para cenários de espelhamento de banco de dados. Se o cliente receber informações de failover em uma conexão que não tem um banco de dados ou um catálogo inicial explicitamente especificado, as informações de failover não serão armazenadas em cache e o aplicativo não tentará fazer o failover se o servidor principal falhar. Se uma cadeia de conexão tiver um valor para o parceiro de failover, mas nenhum valor para o banco de dados ou o catálogo inicial, uma InvalidArgumentException será gerada.

Recuperar o nome do servidor atual

Quando um failover ocorrer, será possível recuperar o nome do servidor ao qual a conexão atual está conectada usando a propriedade DataSource de um objeto SqlConnection. O seguinte fragmento de código recupera o nome do servidor ativo, presumindo que as referências da variável de conexão são um SqlConnection aberto.

Quando um evento de failover ocorrer e a conexão for transferida para o servidor espelho, a propriedade DataSource será atualizada para refletir o nome do espelho.

string activeServer = connection.DataSource;

Comportamento de espelhamento do SqlClient

O cliente sempre tentará se conectar ao servidor principal. Se houver falha, ele experimentará o parceiro de failover. Se o banco de dados espelho já tiver sido substituído para a função principal no servidor do parceiro, a conexão terá êxito e o novo mapeamento de espelho principal será enviado para o cliente e armazenado em cache pelo tempo de vida da chamada AppDomain. Ele não será colocado em um armazenamento persistente e não estará disponível para conexões futuras em um AppDomain ou processo diferente. No entanto, ele estará disponível para executar conexões posteriormente dentro do mesmo AppDomain. Outro AppDomain ou processo em execução no mesmo computador ou em um computador diferente sempre terá um pool de conexões. Além disso, essas conexões não serão redefinidas. Nesse caso, se o banco de dados primário falhar, cada processo ou AppDomain falhará uma vez, e o pool será automaticamente limpo.

Observação

O suporte ao espelhamento no servidor é configurado com base no banco de dados. Se operações de manipulação de dados forem executadas em relação a outros bancos de dados não inclusos no conjunto principal/espelho, seja usando nomes com várias partes ou alterando o banco de dados atual, as alterações desses outros bancos de dados não serão propagadas em caso de falhas. Nenhum erro é gerado quando os dados são modificados em um banco de dados não espelhado. O desenvolvedor deve avaliar o possível impacto das operações.

Próximas etapas

Recursos de espelhamento de bancos de dados

Para obter uma documentação conceitual e informações sobre como configurar, implantar e administrar o espelhamento, confira os recursos a seguir na documentação do SQL Server.

Recurso Descrição
Espelhamento de Banco de Dados Descreve como definir e configurar o espelhamento no SQL Server.