Compartilhar via


Espelhamento de banco de dados no SQL Server

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. O espelhamento garante que haja sempre duas cópias distintas dos dados, garantindo alta disponibilidade e redundância completa dos dados. O provedor de dados .NET para o SQL Server fornece suporte implícito para espelhamento de banco de dados, de modo que o desenvolvedor não precisa realizar nenhuma ação ou gravar código quando tiver sido configurado para um banco de dados do SQL Server. Além disso, o objeto SqlConnection oferece suporte a um modo de conexão explícito que permite fornecer o nome de um servidor de 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 conecta com sucesso ao banco de dados principal, e o servidor envia de volta o nome do servidor de parceiro, que é então armazenado em cache no cliente.

  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.

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á uma conexão de forma transparente com o parceiro de failover se o banco de dados principal estiver indisponível quando o aplicativo cliente se conectar pela primeira vez.

";Failover Partner=PartnerServerName"

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

Quando uma SqlConnection for aberta com êxito, o nome do parceiro de failover será retornado ao servidor e substituirá qualquer valor fornecido 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.

Recuperando o nome do servidor atual

Em caso de failover, é possível recuperar o nome do servidor com o qual a conexão atual é realizada 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 ocorre um evento de failover e a conexão é alternada 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 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 é armazenado no armazenamento persistente e não está disponível para conexões subsequentes em um AppDomain diferente ou processo. No entanto, 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 falhar, cada processo ou AppDomain falha uma vez, e o pool é 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.

Recursos de espelhamento de banco de dados

Para obter a documentação conceitual e as 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 definir e configurar o espelhamento no SQL Server.

Confira também