Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
O espelhamento de banco de dados no SQL Server é uma tecnologia distinta do espelhamento de banco de dados do Microsoft Fabric.
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 existem sempre duas cópias separadas dos dados, proporcionando alta disponibilidade e redundância completa dos dados. O Microsoft SqlClient Provider para SQL Server fornece suporte implícito para espelhamento de bases de dados. O programador não precisa de fazer nada depois de o cliente ter sido configurado para uma base de dados SQL Server. Além disso, o SqlConnection objeto suporta um modo de ligação explícito que permite fornecer o nome de um servidor parceiro de failover no ConnectionStringarquivo .
A seguinte sequência simplificada de eventos ocorre para um SqlConnection objeto destinado a um banco de dados configurado para espelhamento:
- A aplicação cliente liga-se com sucesso à base de dados principal, e o servidor envia de volta o nome do servidor parceiro, que o cliente armazena em cache.
- 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.
- 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.
Especificar o parceiro de failover na string de ligação
Se fornecer o nome de um servidor parceiro de failover na cadeia de ligação e a base de dados principal não estiver disponível quando a aplicação cliente se liga, o cliente tentará de forma transparente uma ligação com o parceiro de failover.
";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 liga pela primeira vez, então ocorre um SqlException.
Quando a SqlConnection é aberto com sucesso, o servidor devolve o nome do parceiro de failover, que substitui quaisquer valores fornecidos na string de conexão.
Observação
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.
Recuperar o nome atual do servidor
Quando ocorre um failover, pode recuperar o nome do servidor ao qual a ligação atual está conectada usando a propriedade DataSource de um objeto SqlConnection. 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 muda para o servidor espelho, a propriedade DataSource atualiza-se para refletir o nome do espelho.
string activeServer = connection.DataSource;
Comportamento de espelhamento do SqlClient
O cliente tenta sempre ligar-se ao servidor principal. 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 está armazenado em armazenamento persistente e não está disponível para futuras ligações num AppDomain ou processo diferente. No entanto, está disponível para ligações posteriores dentro do mesmo AppDomain. Outro AppDomain ou processo em execução no mesmo ou noutro computador tem sempre o seu próprio pool de ligações, e essas ligações não são redefinidas. Nesse caso, se a base de dados principal falhar, cada processo ou AppDomain falha uma vez e o pool é automaticamente limpo.
Observação
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.
Próximos passos
Recursos de espelhamento de bases de dados
Para documentação conceptual e informações sobre configuração, implementação e administração do espelhamento, consulte os seguintes recursos na documentação do SQL Server.
| Resource | Description |
|---|---|
| Espelhamento de banco de dados | Descreve como instalar e configurar o espelhamento no SQL Server. |