Idioma
Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O espelhamento de banco de dados em SQL Server permite manter uma cópia ou espelho de um banco de dados 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. Depois de configurar o espelhamento de banco de dados para um banco de dados SQL Server, Microsoft.Data.SqlClient dá suporte a ele sem código de cliente adicional. Você também pode especificar um servidor parceiro de failover na propriedade ConnectionString.
A seguinte sequência de eventos ocorre quando o SqlConnection objeto tem como destino um banco de dados configurado para espelhamento:
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.
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.
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 não estiver disponível quando o aplicativo cliente se conectar pela primeira vez, o provedor gerará SqlException.
Quando o SqlConnection for aberto com êxito, o servidor retornará o nome do parceiro de failover. Esse nome substitui o valor no 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
Após um failover, use a DataSource propriedade para recuperar o nome do servidor conectado. O fragmento de código a seguir pressupõe que a variável de conexão faz referência a uma instância aberta da classe SqlConnection.
Quando ocorre um evento de failover e a conexão é alternada 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 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. |