Idioma

Espelhamento de banco de dados no SQL Server

O espelhamento de bases de dados no SQL Server permite-lhe manter uma cópia, ou espelho, de uma base de dados do SQL Server num servidor de espera. O espelhamento garante que duas cópias separadas dos dados existam o tempo todo, proporcionando alta disponibilidade e redundância completa de dados. Depois de configurar o espelhamento de base de dados para uma base de dados SQL Server, a Microsoft. Data.SqlClient suporta-a sem código cliente adicional. Também pode especificar um servidor parceiro de failover na ConnectionString propriedade.

A seguinte sequência de eventos ocorre quando o SqlConnection objeto tem como alvo uma base de dados configurada 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 string 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 omitir o nome do servidor parceiro de failover e a base de dados principal não estiver disponível quando a aplicação cliente se conecta pela primeira vez, o fornecedor de dados lança SqlException.

Quando o SqlConnection servidor abre com sucesso, o servidor devolve o nome do parceiro de failover. Esse nome substitui o valor na cadeia de ligaçã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

Após um failover, use a DataSource propriedade para recuperar o nome do servidor ligado. O fragmento de código seguinte assume que a variável de ligação faz referência a uma instância aberta da SqlConnection classe.

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, tenta o parceiro de recuperação. 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, está disponível para ligaçõ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