Partilhar via


Espelhamento de banco de dados (SQL Server)

Aplica-se a:SQL Server

Atenção

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Para alta disponibilidade, utilize grupos de disponibilidade Always On.

Importante

O espelhamento de banco de dados no SQL Server é uma tecnologia distinta do espelhamento de banco de dados do Microsoft Fabric. O espelhamento para o Fabric oferece uma melhoria no desempenho analítico, a capacidade de unificar o seu património de dados com o OneLake no Fabric e um acesso aberto aos seus dados em formato Delta Parquet.

Com o Mirroring to Microsoft Fabric, você pode replicar continuamente seu conjunto de dados existente diretamente no OneLake in Fabric, incluindo dados do SQL Server 2016+, Banco de Dados SQL do Azure, Instância Gerenciada SQL do Azure, Cosmos DB, Oracle, Snowflake e muito mais.

O espelhamento de banco de dados é uma solução para aumentar a disponibilidade de um banco de dados SQL Server. O espelhamento é implementado por banco de dados e funciona apenas com bancos de dados que usam o modelo de recuperação completa.

Para obter informações sobre suporte para espelhamento de banco de dados, restrições, pré-requisitos, recomendações para configurar servidores parceiros e recomendações para implantar espelhamento de banco de dados, consulte Pré-requisitos, restrições e recomendações para espelhamento de banco 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 disponibilidade de um banco de dados.

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

  • Aumenta a proteção de dados.

    O espelhamento de banco de dados fornece redundância completa ou quase completa dos dados, dependendo se o modo de operação é de alta segurança ou 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 em execução no SQL Server 2008 (10.0.x) Enterprise ou 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 consegue ler uma página solicita uma nova cópia do outro parceiro. Se essa solicitação for bem-sucedida, a página ilegível será substituída pela cópia, que geralmente resolve o erro. Para mais informações, consulte Reparo Automático de Páginas (Grupos de Disponibilidade: Espelhamento de Bases de Dados).

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

    Para minimizar o tempo de inatividade de um banco de dados espelhado, você pode atualizar sequencialmente as instâncias do SQL Server que estão hospedando os parceiros de failover. Isso incorrerá no tempo de inatividade de apenas um único failover. Essa forma de atualização é conhecida como atualização contínua. Para obter mais informações, consulte Atualizando instâncias espelhadas.

Termos e definições de espelhamento de banco de dados

Failover automático

O processo pelo qual, quando o servidor principal se torna indisponível, o servidor espelho assume a função de servidor principal e coloca sua cópia do banco de dados online como o banco de dados principal.

Parceiros de failover

As duas instâncias de servidor (o servidor principal ou o servidor espelho) que atuam como parceiros de alternância de função para um banco de dados espelhado.

Serviço forçado

Um failover iniciado pelo proprietário do banco de dados após a falha do servidor principal que transfere o serviço para o banco de dados espelho enquanto ele está em um estado desconhecido.

Modo de alto desempenho

A sessão de espelhamento de banco de dados opera de forma assíncrona e usa apenas o servidor principal e o servidor espelho. A única forma de mudança de função é o serviço forçado (com possível perda de dados).

Modo de alta segurança

A sessão de espelhamento de banco de dados opera de forma síncrona e, opcionalmente, usa uma testemunha, bem como o servidor principal e o servidor espelho.

Failover manual

Um failover iniciado pelo proprietário do banco de dados, enquanto o servidor principal ainda está em execução, que transfere o serviço do banco de dados principal para o banco de dados espelho enquanto eles estão em um estado sincronizado.

Banco de dados espelho

A cópia do banco de dados que normalmente é totalmente sincronizada com o banco de dados principal.

Servidor espelho

Em uma configuração de espelhamento de banco de dados, a instância do servidor na qual o banco de dados espelho reside.

Base de dados principal

No espelhamento de banco de dados, um banco de dados de leitura-gravação cujos registros de log de transações são aplicados a uma cópia somente leitura do banco de dados (um banco de dados espelho).

Servidor principal

No espelhamento de banco de dados, o parceiro cujo banco de dados é atualmente o banco de dados principal.

Fila de refazer

Registros de log de transações recebidos que estão aguardando no disco de um servidor espelho.

Funções

O servidor principal e o servidor espelho executam funções principais e de espelho complementares. Opcionalmente, a função de testemunha é desempenhada por uma terceira instância do servidor.

Mudança de função

A assunção do papel principal pelo espelho.

Fila de envio

Registros de log de transações não enviados que se acumularam no disco de log do servidor principal.

Session

A relação que ocorre durante o espelhamento do banco de dados entre o servidor principal, o servidor espelho e o servidor testemunha (se presente).

Depois que uma sessão de espelhamento é iniciada ou retomada, o processo pelo qual os registros de log do banco de dados principal acumulados no servidor principal são enviados para o servidor espelho, que grava esses registros de log em disco o mais rápido possível para alcançar o servidor principal.

Segurança das transações

Uma propriedade de banco de dados específica de espelhamento que determina se uma sessão de espelhamento de banco de dados opera de forma síncrona ou assíncrona. Existem dois níveis de segurança: FULL e OFF.

Witness

Para uso somente com o modo de alta segurança, uma instância opcional do SQL Server que permite que o servidor espelho reconheça quando iniciar um failover automático. Ao contrário dos dois parceiros de failover, a testemunha não serve o banco de dados. Apoiar o failover automático é o único papel da testemunha.

Visão geral do espelhamento de banco de dados

O espelhamento de banco de dados mantém duas cópias de um único banco de dados que residem em instâncias diferentes do Mecanismo de Banco de Dados do SQL Server. Normalmente, essas instâncias residem em computadores em locais diferentes. Quando o espelhamento de banco de dados é iniciado, uma instância inicia uma relação, conhecida como sessão de espelhamento de banco de dados, com outra instância.

Uma instância de servidor serve o banco de dados para clientes (o servidor principal). A outra instância atua como um servidor de espera quente ou quente (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 de espera ativa que oferece suporte a failover rápido sem perda de dados de transações confirmadas. Quando a sessão não está sincronizada, o servidor espelho normalmente está disponível como um servidor de espera quente (com possível perda de dados).

Os servidores principal e espelho se comunicam e cooperam como parceiros em uma sessão de espelhamento de banco de dados. Os dois parceiros desempenham funções complementares na sessão: o papel principal e o papel de espelho. A qualquer momento, um parceiro desempenha a função principal e o outro parceiro desempenha a função de espelho. Cada parceiro é descrito como dono do seu papel atual. O parceiro proprietário da função principal é conhecido como servidor principal e sua cópia do banco de dados é o banco de dados principal atual. O parceiro proprietário da função de espelho é conhecido como servidor espelho e sua cópia do 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 envolve refazer todas as operações de inserção, atualização e exclusão que ocorrem no banco de dados principal no banco de dados espelho o mais rápido possível. O refazer é feito enviando um fluxo de registros de log de transações ativas para o servidor espelho, que aplica registros de log ao banco de dados espelho, em sequência, o mais rápido possível. Ao contrário da replicação, que funciona no nível lógico, o espelhamento de banco de dados funciona no nível do registro de log físico. A partir do SQL Server 2008 (10.0.x), o servidor principal compacta o fluxo de registros de log de transações antes de enviá-lo para o servidor espelho. Essa compactação de log ocorre em todas as sessões de espelhamento.

Observação

Uma determinada instância de servidor pode participar de várias sessões simultâneas de espelhamento de banco de dados com parceiros iguais ou diferentes. Uma instância de servidor pode ser um parceiro em algumas sessões e uma testemunha em outras sessões. A instância do servidor espelho deve estar executando a mesma edição do SQL Server.

Nesta secção:

Modos de operação

Uma sessão de espelhamento de banco de dados é executada com operação síncrona ou assíncrona. Sob operação assíncrona, 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, uma transação é confirmada em ambos os parceiros, mas ao custo do aumento da latência da transação.

Existem dois modos de operação de espelhamento. Um deles, o modo de alta segurança , suporta operação síncrona. No modo de alta segurança, quando uma sessão é iniciada, o servidor espelho sincroniza o banco de dados espelho com o banco de dados principal o mais rápido possível. Assim que os bancos de dados são sincronizados, uma transação é confirmada em ambos os parceiros, ao custo do aumento da latência da transação.

O segundo modo de operação, o modo de alto desempenho, é executado de forma assíncrona. O servidor espelho tenta acompanhar os registros de log enviados pelo servidor principal. O banco de dados espelho pode ficar um pouco atrás do banco de dados principal. No entanto, normalmente, a lacuna entre os bancos de dados é pequena. No entanto, a lacuna pode se tornar significativa se o servidor principal estiver sob uma carga de trabalho pesada 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. Ele não espera por 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 permite que o servidor principal seja executado com latência mínima de transação, com o risco potencial de alguma perda de dados.

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

Captura de tela de Parceiros em uma sessão de espelhamento de banco de dados.

O modo de alta segurança com failover automático requer uma terceira instância do servidor, conhecida como testemunha. Ao contrário dos dois parceiros, a testemunha não serve a base de dados. A testemunha suporta failover automático verificando se o servidor principal está ativo e funcionando. O servidor espelho inicia o failover automático somente se o espelho e a testemunha permanecerem conectados um ao outro depois que ambos tiverem sido desconectados do servidor principal.

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

Captura de tela de 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ção

Estabelecer uma nova sessão de espelhamento ou adicionar uma testemunha a uma configuração de espelhamento existente requer que todas as instâncias de servidor envolvidas executem a mesma versão do SQL Server. No entanto, quando você estiver atualizando para o SQL Server 2008 (10.0.x) ou uma versão posterior, as versões das instâncias envolvidas podem variar. Para obter mais informações, consulte Atualizando instâncias espelhadas.

Segurança de Transação e Modos de Operação

Se um modo de operação é assíncrono ou síncrono depende da configuração de segurança da transação. Se você usar exclusivamente o SQL Server Management Studio para configurar o espelhamento de banco de dados, as configurações de segurança de transação serão definidas automaticamente quando você selecionar o modo de operação.

Se você usar Transact-SQL para configurar o espelhamento de banco de dados, deverá entender como definir a segurança da transação. A segurança da SAFETY transação é controlada pela propriedade da ALTER DATABASE declaração. Em um banco de dados que está sendo espelhado, SAFETY é FULL ou OFF.

  • Se a opção estiver definida como FULL, a SAFETY operação de espelhamento do banco de dados será síncrona, após a fase inicial de sincronização. Se uma testemunha estiver definida no modo de alta segurança, a sessão suporta failover automático.

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

Para obter mais informações, consulte Modos operacionais de espelhamento de banco de dados.

Mudança de função

No contexto de uma sessão de espelhamento de banco de dados, as funções principal e de espelho são normalmente intercambiáveis em um processo conhecido como alternância de função. A troca de função envolve a transferência da função principal para o servidor espelho. Na troca de função, o servidor espelho atua como o parceiro de failover para o servidor principal. Quando ocorre uma mudança de função, o servidor espelho assume a função principal e coloca sua cópia do banco de dados online como o novo banco de dados principal. O antigo servidor principal, se disponível, assume a função de espelho e seu banco de dados se torna o novo banco de dados espelho. Potencialmente, os papéis podem alternar para frente e para trás repetidamente.

Existem as três formas seguintes de mudança de função.

  • Failover automático

    Isso requer o modo de alta segurança 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.

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

  • Failover manual

    Isso requer um modo de alta segurança. Os parceiros devem estar conectados uns aos outros, e o banco de dados já deve estar sincronizado.

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

    No modo de alto desempenho e no modo de alta segurança sem failover automático, forçar o serviço é possível se o servidor principal tiver falhado e o servidor espelho estiver disponível.

    Importante

    O modo de alto desempenho destina-se a ser executado sem testemunha. Mas 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 ficar online, os aplicativos cliente poderão se recuperar rapidamente reconectando-se ao banco de dados.

Sessões simultâneas

Uma determinada instância de servidor pode participar de várias sessões simultâneas de espelhamento de banco de dados (uma vez por banco de dados espelhado) com as mesmas instâncias de servidor ou instâncias diferentes. Muitas vezes, uma instância de servidor serve exclusivamente como parceiro ou testemunha em todas as suas sessões de espelhamento de banco de dados. No entanto, como cada sessão é independente das outras sessões, uma instância do servidor pode atuar como parceiro em algumas sessões e como testemunha em outras sessões. Por exemplo, considere as quatro sessões a seguir entre três instâncias de servidor (SSInstance_1, SSInstance_2, e SSInstance_3). Cada instância do servidor serve como parceiro em algumas sessões e como testemunha em outras:

Instância do servidor Sessão para a base de dados A Sessão para a base de dados B Sessão para a base de dados C Sessão para base de dados D
SSInstance_1 Witness Parceiro Parceiro Parceiro
SSInstance_2 Parceiro Witness Parceiro Parceiro
SSInstance_3 Parceiro Parceiro Witness Witness

A figura a seguir ilustra duas instâncias de servidor que estão participando como parceiros juntas em duas sessões de espelhamento. Uma sessão é para um banco de dados chamado Db_1 e a outra sessão é para um banco de dados chamado Db_2.

Captura de tela de duas instâncias de servidor em duas sessões simultâneas.

Cada uma das bases de dados é independente das outras. Por exemplo, uma instância de servidor pode inicialmente ser o servidor espelho para dois bancos de dados. Se um desses bancos de dados fizer failover, a instância do servidor se tornará o servidor principal do banco de dados com failover enquanto permanece o servidor espelho do outro banco de dados.

Como outro exemplo, considere uma instância de servidor que seja o servidor principal de dois ou mais bancos de dados em execução no modo de alta segurança com failover automático, Se a instância do servidor falhar, todos os bancos de dados farão failover automaticamente para seus respetivos bancos de dados espelho.

Ao configurar uma instância de servidor para operar como parceiro e testemunha, certifique-se de que o ponto de extremidade de espelhamento de banco de dados ofereça suporte a ambas as funções (para obter mais informações, consulte O ponto de extremidade de espelhamento de banco de dados (SQL Server)). Além disso, certifique-se de que o sistema tem recursos suficientes para reduzir a contenção de recursos.

Observação

Como os bancos de dados espelhados são independentes uns dos outros, os bancos de dados não podem fazer failover como um grupo.

Conexões de cliente

O suporte de conexão de cliente para sessões de espelhamento de banco de dados é fornecido pelo Microsoft .NET Data Provider for SQL Server. Para obter mais informações, consulte Conectar clientes a uma sessão de espelhamento de banco de dados (SQL Server).

Impacto da pausa de uma sessão no log de transações principal

A qualquer momento, o proprietário do banco de dados pode pausar uma sessão. A pausa preserva o estado da sessão ao remover o espelhamento. Quando uma sessão é pausada, o servidor principal não envia novos registros de log para o servidor espelho. Todos esses registros permanecem ativos e se acumulam no log de transações do banco de dados principal. Enquanto uma sessão de espelhamento de banco de dados permanecer pausada, o log de transações não poderá ser truncado. Portanto, se a sessão de espelhamento do banco de dados for pausada por muito tempo, o log poderá ser preenchido.

Para obter mais informações, consulte Pausando e retomando o espelhamento de banco de dados (SQL Server).

Configurar sessão de espelhamento de banco de dados

Antes que uma sessão de espelhamento possa começar, o proprietário do banco de dados ou o administrador do sistema deve criar o banco de dados espelho, configurar pontos de extremidade e logons e, em alguns casos, criar e configurar certificados. Para obter mais informações, consulte Configurando o espelhamento de banco de dados (SQL Server).

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

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

Nesta secção

Pré-requisitos, restrições e recomendações para espelhamento de banco de dados Descreve os pré-requisitos e recomendações para configurar o espelhamento de banco de dados.

Modos de operação de espelhamento de banco de dados Contém informações sobre os modos de operação síncrono e assíncrono para sessões de espelhamento de banco de dados e sobre como alternar funções de parceiro durante uma sessão de espelhamento de banco de dados.

Testemunha de espelhamento de banco de dados Descreve a função de uma testemunha no espelhamento de banco de dados, como usar uma única testemunha em várias sessões de espelhamento, recomendações de software e hardware para testemunhas e a função da testemunha no failover automático. Também contém informações sobre como adicionar ou remover uma testemunha.

Alternância de função durante uma sessão de espelhamento de banco de dados (SQL Server) Contém informações sobre como alternar funções de parceiro durante uma sessão de espelhamento de banco de dados, incluindo failover automático, failover manual e serviço forçado (com possível perda de dados). Além disso, contém informações sobre como estimar a interrupção do serviço durante a troca de função.

Possíveis falhas durante o espelhamento do banco de dados Discute problemas físicos, do sistema operacional e do SQL Server, incluindo erros rígidos e erros de software, que podem causar uma falha em uma sessão de espelhamento de banco de dados. Discute como o mecanismo de tempo limite de espelhamento responde a erros de software.

O ponto de extremidade de espelhamento de banco de dados (SQL Server) Discute como o ponto de extremidade de espelhamento de banco de dados funciona.

Configurando o espelhamento de banco de dados (SQL Server) Contém tópicos sobre os pré-requisitos, recomendações e etapas para configurar o espelhamento de banco de dados.

Conectar clientes a uma sessão de espelhamento de banco de dados (SQL Server) Contém tópicos que abrangem atributos de cadeia de conexão de cliente e os algoritmos para conectar e reconectar um cliente a um banco de dados espelhado.

Pausando e retomando o espelhamento de banco de dados (SQL Server) Discute o que acontece enquanto o espelhamento de banco de dados é pausado, incluindo o impacto no truncamento do log de transações, e contém descrições sobre como pausar e retomar o espelhamento de banco de dados.

Removendo espelhamento de banco de dados (SQL Server) Discute o impacto da remoção do espelhamento e contém descrições sobre como encerrar uma sessão

Monitorando o espelhamento de banco de dados (SQL Server) Contém informações sobre como usar o Monitor de Espelhamento de Banco de Dados ou os procedimentos armazenados dbmmonitor para monitorar o espelhamento de banco de dados ou sessões.

Tarefas de configuração

Usando o SQL Server Management Studio

Usando Transact-SQL

Usando o Transact-SQL ou o SQL Server Management Studio

Tarefas administrativas

Transact-SQL

SQL Server Management Studio (Estúdio de Gestão do Servidor SQL)