Partilhar via


Espelhamento de banco de dados no SQL Server

O espelhamento de banco de dados no SQL Server permite que você mantenha uma cópia ou espelho de um banco de dados do SQL Server em um servidor em espera. O espelhamento garante que duas cópias separadas dos dados existam o tempo todo, proporcionando alta disponibilidade e redundância completa de dados. O Provedor de Dados .NET para SQL Server fornece suporte implícito para espelhamento de banco de dados, para que o desenvolvedor não precise executar nenhuma ação ou escrever qualquer código depois de ter sido configurado para um banco de dados do SQL Server. Além disso, o objeto oferece suporte a SqlConnection um modo de conexão explícito que permite fornecer o nome de um servidor parceiro de failover no ConnectionString.

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

  1. O aplicativo cliente se conecta com êxito ao banco de dados principal e o servidor envia de volta o nome do servidor parceiro, que é armazenado em cache no cliente.

  2. Se o servidor que contém o banco de dados principal falhar ou a conectividade for interrompida, o estado da conexão e da transação será perdido. O aplicativo cliente tenta restabelecer uma conexão com o banco de dados principal e falha.

  3. Em seguida, o aplicativo cliente tenta estabelecer de forma transparente uma conexão com o banco de dados espelho no servidor parceiro. Se for bem-sucedida, a conexão será redirecionada para o banco de dados espelho, que se tornará o novo banco de dados principal.

Especificando o parceiro de failover na cadeia de conexão

Se você fornecer o nome de um servidor de parceiro de failover na cadeia de conexão, o cliente tentará de forma transparente uma conexão com o parceiro de failover se o banco de dados principal não estiver disponível quando o aplicativo cliente se conectar pela primeira vez.

";Failover Partner=PartnerServerName"

Se você omitir o nome do servidor parceiro de failover e o banco de dados principal estiver indisponível quando o aplicativo cliente se conectar pela primeira vez, um SqlException será gerado.

Quando um SqlConnection é aberto com êxito, o nome do parceiro de failover é retornado pelo servidor e substitui quaisquer valores fornecidos na cadeia de conexão.

Nota

Você deve especificar explicitamente o catálogo inicial ou o nome do banco de dados 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 tenha um catálogo ou banco de dados inicial explicitamente especificado, as informações de failover não serão armazenadas em cache e o aplicativo não tentará fazer 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 catálogo ou banco de dados inicial, um InvalidArgumentException será gerado.

Recuperando o nome do servidor atual

No caso de um failover, você pode recuperar o nome do servidor ao qual a conexão atual está realmente conectada usando a DataSource propriedade de um SqlConnection objeto. O fragmento de código a seguir recupera o nome do servidor ativo, supondo que a variável de conexão faça referência a um arquivo .SqlConnection

Quando ocorre um evento de failover e a conexão é trocada para o servidor espelho, a propriedade DataSource é atualizada para refletir o nome do espelho.

Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;

Comportamento de espelhamento SqlClient

O cliente sempre tenta se conectar ao servidor principal atual. Se falhar, ele tenta o parceiro de failover. Se o banco de dados espelho já tiver sido alternado para a função principal no servidor parceiro, a conexão será bem-sucedida e o novo mapeamento de espelho principal será enviado ao cliente e armazenado em cache durante o tempo de vida da chamada AppDomain. Ele não é armazenado em armazenamento persistente e não está disponível para conexões subsequentes em um AppDomain ou processo diferente. No entanto, ele está disponível para conexões subsequentes dentro do mesmo AppDomain. Observe que outro AppDomain ou processo em execução no mesmo computador ou em um computador diferente sempre tem seu pool de conexões, e essas conexões não são redefinidas. Nesse caso, se o banco de dados primário ficar inativo, cada processo ou AppDomain falhará uma vez e o pool será automaticamente limpo.

Nota

O suporte ao espelhamento no servidor é configurado por banco de dados. Se as operações de manipulação de dados forem executadas em outros bancos de dados não incluídos no conjunto principal/espelho, usando nomes de várias partes ou alterando o banco de dados atual, as alterações nesses outros bancos de dados não se propagarão em caso de falha. Nenhum erro é gerado quando os dados são modificados em um banco de dados que não é espelhado. O promotor deve avaliar o possível impacto de tais operações.

Recursos de espelhamento de banco de dados

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

Recurso Description
Espelhamento de banco de dados Descreve como instalar e configurar o espelhamento no SQL Server.

Consulte também