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 ligação é transferida para o servidor espelho, a DataSource propriedade é 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. 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. Note que outro AppDomain ou processo a correr no mesmo ou noutro computador tem sempre o seu pool de ligações, e essas ligações não são reiniciadas. Nesse caso, se a base de dados principal falhar, cada processo ou AppDomain falha uma vez, e o pool é 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 Descrição
Espelhamento de banco de dados Descreve como instalar e configurar o espelhamento no SQL Server.

Consulte também