Visão geral do espelhamento de banco de dados

O espelhamento de banco de dados é uma solução de software usada, essencialmente, para aumentar a disponibilidade do banco de dados. O espelhamento é implementado por base de banco de dados e só funciona com bancos de dados que usam o modelo de recuperação completa. Os modelos de recuperação simples e bulk-logged não oferecem suporte ao espelhamento de banco de dados. Por isso, todas as operações em massa são sempre totalmente registradas. O espelhamento de banco de dados funciona com qualquer nível de compatibilidade de banco de dados para o qual haja suporte.

ObservaçãoObservação

Você não pode espelhar os bancos de dados master, msdb, tempdb ou model.

O espelhamento de banco de dados mantém duas cópias de um único banco de dados que devem estar localizadas em instâncias do servidor diferentes do Mecanismo de banco de dados do SQL Server. Geralmente, essas instâncias do servidor estão em localidades diferentes dos computadores. Uma instância do servidor atua como banco de dados para clientes (o servidor principal). A outra instância funciona como servidor em espera ativa ou passiva (o servidor espelho), dependendo da configuração e do estado da sessão de espelhamento. Quando uma sessão de espelhamento de banco de dados é sincronizada, o espelhamento de banco de dados fornece um servidor em espera ativa que oferece suporte rápido a failover , sem que haja perda de dados de transações confirmadas. Quando a sessão não é sincronizada, o servidor espelho fica, normalmente, disponível como servidor em espera passiva (com possível perda de dados).

Benefícios do espelhamento de banco de dados

O espelhamento de banco de dados é uma estratégia simples que oferece os seguintes benefícios:

  • Aumenta a proteção dos dados.

    O espelhamento de banco de dados fornece completa ou quase completa redundância de dados, dependendo se o modo operacional é de alta segurança ou de alto desempenho. Para obter mais informações, consulte "Modos de operação", mais adiante neste tópico.

    Um parceiro de espelhamento de banco de dados executado no SQL Server 2008 Enterprise ou em versões posteriores tenta resolver automaticamente determinados tipos de erros que impedem a leitura de uma página de dados. O parceiro que não está habilitado para ler uma página solicita uma cópia atualizada de outro parceiro. Se essa solicitação tiver êxito, a página ilegível será substituída pela cópia, o que geralmente resolve o erro. Para obter mais informações, consulte Reparo automático de página durante uma sessão de espelhamento de banco de dados.

  • Aumenta a disponibilidade de um banco de dados.

    No caso de desastre, no modo de segurança alta com failover automático, o failover coloca rapidamente online a cópia do banco de dados em espera (sem perda de dados). Nos outros modos de operação, o administrador do banco de dados tem a possibilidade de forçar o serviço (com possível perda de dados) para a cópia do banco de dados em espera. Para obter mais informações, consulte "Troca de função” mais adiante neste tópico.

  • Aumenta a disponibilidade do banco de dados de produção durante as atualizações.

    Para minimizar o tempo de inatividade de um banco de dados espelho, atualize de forma sequencial as instâncias do SQL Server que participam da sessão de espelhamento de banco de dados. Isso ocasionará o tempo de inatividade de um único failover. Essa forma de atualização é conhecida como atualização sem interrupção. Para obter mais informações, consulte Como instalar um service pack em um sistema com tempo de inatividade mínimo para bancos de dados espelhados.

Como funciona o espelhamento de banco de dados

Os servidores principal e espelho comunicam e cooperam entre si como parceiros na sessão de espelhamento de banco de dados. Os dois parceiros executam funções complementares na sessão: a função principal e a função de espelho. Em um dado momento, um parceiro executa a função principal e o outro parceiro executa a função espelho. Cada parceiro é descrito como proprietário de sua função atual. O parceiro que possui a função principal é conhecido como servidor principal, e a sua cópia do banco de dados é o banco de dados principal atual. O parceiro que possui a função espelho é conhecido como servidor espelho, e a sua cópia de banco de dados é o banco de dados espelho atual. Quando o espelhamento de banco de dados é implantado em um ambiente de produção, o banco de dados principal é o banco de dados de produção.

O espelhamento de banco de dados compreende refazer cada operação de inserção, atualização e exclusão, que ocorre no banco de dados principal, no banco de dados espelho o mais rápido possível. Para refazer a operação, envie um fluxo de registros de log de transações ativo para o servidor espelho, que aplica os registros de log ao banco de dados espelho, na sequência, com a maior rapidez possível. Ao contrário da replicação, que trabalha no nível lógico, o espelhamento de banco de dados trabalha no nível do registro de log físico. A partir do SQL Server 2008, o servidor principal compacta o fluxo de registros do log de transações antes de enviá-lo ao servidor espelho. Essa compactação do log ocorre em todas as sessões de espelhamento.

Modos de operação

Uma sessão de espelhamento de banco de dados executa com operação síncrona ou assíncrona. No modo operacional assíncrono, as transações são confirmadas sem esperar que o servidor espelho grave o log no disco, o que maximiza o desempenho. Na operação síncrona, a transação é confirmada em ambos os parceiros, mas à custa da latência de transação aumentada.

Há dois modos operacionais de espelhamento. Um deles, o modo de segurança alta que oferece suporte à operação síncrona. No modo de segurança alta, quando uma sessão é iniciada, o servidor espelho sincroniza rapidamente o banco de dados espelho com banco de dados principal. Assim que os bancos de dados são sincronizados, a transação é confirmada em ambos os parceiros, a custa do aumento de latência da transação.

O segundo modo de operação, o modo de alto desempenho, é executado assincronamente. O servidor espelho tenta preservar os registros de log enviados pelo servidor principal. O banco de dados espelho pode ficar um pouco defasado em relação ao banco de dados principal. Entretanto, normalmente a defasagem entre os bancos de dados é pequena. Porém, a defasagem pode tornar-se significante se o servidor principal estiver com grande carga de trabalho ou se o sistema do servidor espelho estiver sobrecarregado.

No modo de alto desempenho, assim que o servidor principal envia um registro de log para o servidor espelho, o servidor principal envia uma confirmação para o cliente. O servidor principal não aguarda uma confirmação do servidor espelho. Isso significa que as transações são confirmadas sem esperar que o servidor espelho grave o log no disco. Essa operação assíncrona habilita o servidor principal para executar com latência de transação mínima e com grande chance de que alguns dados sejam perdidos.

Todas as sessões de espelhamento de banco de dados oferecem suporte somente a um servidor principal e a um servidor espelho. Essa configuração é mostrada na ilustração a seguir.

Parceiros em uma sessão de espelhamento de banco de dados

O modo de segurança alta com failover automático requer a instância de um terceiro servidor, conhecido como testemunha. Ao contrário dos dois parceiros, a testemunha não atende ao banco de dados. A testemunha oferece suporte a failover automático, verificando se o servidor principal está instalado e funcionando. O servidor espelho apenas iniciará o failover automático se o espelho e a testemunha permanecerem conectados um ao outro depois de serem desconectados do servidor principal.

A ilustração a seguir mostra uma configuração com testemunha.

Uma sessão de espelhamento que inclui uma testemunha

Para obter mais informações, consulte "Troca de função” mais adiante neste tópico.

ObservaçãoObservação

O estabelecimento de uma sessão de espelhamento nova ou adicionar uma testemunha a uma configuração de espelhamento existente requer que todas as instâncias de servidor envolvidas estejam sendo executadas na mesma versão do SQL Server. No entanto, ao atualizar para o SQL Server 2008 ou posterior, as versões das instâncias envolvidas podem variar. Para obter mais informações, consulte Como minimizar o tempo de inatividade de bancos de dados espelhados durante a atualização de instâncias do servidor.

Segurança de transação e modos de operação

O que vai determinar se um modo de operação é assíncrono ou síncrono é a configuração de segurança da transação. Caso somente o SQL Server Management Studio seja usado para configurar o espelhamento de banco de dados, as definições de segurança da transação serão configuradas automaticamente quando o modo de operação for selecionado.

Se o Transact-SQL for usado para configurar o espelhamento de banco de dados, será necessário saber como definir a segurança de transação. A segurança de transação é controlada pela propriedade SAFETY da instrução ALTER DATABASE. Em um banco de dados que está sendo espelhado, SAFETY é FULL ou OFF.

  • Se a opção SAFETY for definida como FULL, a operação de espelhamento de banco de dados será síncrona, depois da fase de sincronização inicial. Se a testemunha for definida no modo de segurança alta, a sessão oferecerá suporte ao failover automático.

  • Se a opção SAFETY for definida como OFF, a operação de espelhamento de banco de dados será assíncrona. A sessão é executada em modo de alto desempenho e a opção WITNESS também deve ser OFF.

Para obter mais informações, consulte Configurações Transact-SQL e modos de operação de espelhamento de banco de dados.

Troca de função

No contexto da sessão de espelhamento de banco de dados, as funções principal e espelho podem ser, normalmente, alternadas em um processo conhecido como troca de função. A troca de função envolve a transferência da função principal ao servidor espelho. Na troca de função, o servidor espelho funciona como parceiro de failover do servidor principal. Quando ocorre a troca de função, o servidor espelho assume a função principal e coloca online a sua cópia do banco de dados, como banco de dados principal novo. O servidor principal anterior, se disponível, assume a função de espelho e seu banco de dados se torna o novo banco de dados espelho. Potencialmente, as funções podem ser alternadas de forma repetida.

Estas são as três formas de troca de função existentes.

  • Failover automático

    Requer modo de segurança alta e a presença do servidor espelho e de uma testemunha. O banco de dados já deve estar sincronizado e a testemunha deve estar conectada ao servidor espelho.

    A função da testemunha é verificar se um determinado servidor parceiro está instalado e funcionando. Se o servidor espelho perder a conexão com o servidor principal, mas a testemunha ainda estiver conectada, o servidor espelho não iniciará o failover. Para obter mais informações, consulte Testemunha de espelhamento de banco de dados.

  • Failover manual

    Requer modo de segurança alta. Os parceiros devem estar conectados entre si e o banco de dados já deve estar sincronizado.

  • Serviço forçado (com possível perda de dados)

    Nos modos de alto desempenho e de segurança alta sem failover automático, é possível forçar o serviço se o servidor principal falhar e o servidor espelho estiver disponível.

    Observação importanteImportante

    O modo de alto desempenho destina-se a executar sem uma testemunha. Porém, se existir uma testemunha, forçar o serviço requer que a testemunha esteja conectada ao servidor espelho.

Em qualquer cenário de troca de função, assim que o novo banco de dados principal estiver online, para recuperar rapidamente os aplicativos cliente, reconecte-os ao banco de dados.

Interoperabilidade e coexistência com outros recursos de mecanismo de banco de dados

O espelhamento de banco de dados pode ser usado com os recursos ou componentes do SQL Server a seguir.

Suporte a espelhamento de banco de dados

Desde o SQL Server 2005 Service Pack 1 (SP1), os parceiros e as testemunhas de espelhamento de banco de dados são suportados pelas Edições Standard e Enterprise. Mas os parceiros devem usar a mesma edição, e o espelhamento de banco de dados assíncrono (modo de alto desempenho) é suportado apenas na Enterprise Edition. As testemunhas também são suportadas pelas Edições Workgroup e Express.