Compreendendo como a restauração e a recuperação de backups funcionam no SQL Server

Este tópico é relevante para todos os bancos de dados do SQL Server.

Restauração é o processo de copiar dados de um backup e aplicar transações em log aos dados para fazer roll-forward até o ponto de recuperação de destino. Um backup de dados ou diferencial contém registros de log de transações suficientes para permitir roll-froward nas transações ativas como parte da restauração de cada backup. Cada backup contém também log suficiente para reverter transações não confirmadas para trazer o banco de dados a um estado operacional consistente e utilizável. O processo de reverter transações não confirmadas, se houver, e trazer o banco de dados online é conhecido como recuperação.

O conjunto de roll forward

O processo de aplicar alterações de log aos dados de um banco de dados para avançar os dados em tempo é conhecido como roll-forward. O conjunto de todos os dados restaurados é chamado conjunto de roll forward. Um conjunto de roll forward é definido pela restauração de um ou mais backups completos, como um banco de dados ou backup parcial, ou um conjunto de backups de arquivo. Se uma instrução RESTORE especificar grupos de arquivos, arquivos ou páginas, só esses itens serão incluídos no conjunto de roll forward. Caso contrário, todos os arquivos no backup que está sendo restaurado são incluídos no conjunto de roll forward. Se o backup completo contiver registros de log, será feito roll-forward dos dados restaurados usando esse log.

ObservaçãoObservação

Se você especificar um grupo de arquivos durante a restauração, a restauração abrangerá todo o grupo de arquivos como ele existe atualmente. Isso inclui qualquer arquivo adicionado ao grupo de arquivos desde que o backup foi feito. Para obter mais informações, consulte Controlando a criação de arquivos adicionados durante o roll-forward.

Para backups diferenciais, se qualquer arquivo foi adicionado ao banco de dados desde a base diferencial, a restauração de um backup diferencial pode sobrescrever páginas no conjunto de roll forward com dados do backup diferencial. Para obter mais informações, consulte Usando backups diferenciais.

A restauração de um backup diferencial só atualizará uma página se a página estiver no conjunto de roll forward, se estiver contida no backup e a instrução RESTORE listar a página ou seu arquivo, ou não listar nenhum arquivo ou páginas.

Nos modelos de recuperação completa e com log de operações em massa, o backup do log deve ser feito separadamente. Depois de restaurar dados e (opcionalmente) backups diferenciais, você normalmente restaura os backups de log subsequentes para trazer o banco de dados até o ponto da falha. A restauração de um backup de log faz roll-foward de todas as páginas no conjunto de roll forward. Para obter mais informações sobre backups de log, consulte Trabalhando com backups de log de transações.

Sequências da restauração

Cada cenário de restauração é implementado usando uma ou mais etapas de restauração (operações), denominada sequência de restauração. Cada operação corresponde a uma instrução individual Transact-SQL RESTORE. Uma sequência de restauração move os dados afetados por uma ou mais das fases de restauração.

Para obter mais informações sobre a sequência de restauração Transact-SQL e como construí-las, consulte Trabalhando com seqüências de restauração em bancos de dados do SQL Server.

Fases da restauração

Uma restauração é um processo de várias fases. As possíveis fases de uma restauração incluem as fases de cópia de dados, a ação refazer (roll-forward) e desfazer (reversão):

  • A fase de cópia de dados envolve a cópia de todos os dados, log e páginas de índice da mídia de backup de um banco de dados para os arquivos do banco de dados.

  • A fase refazer aplica as transações em log aos dados copiados do backup para fazer roll-forward desses dados até o ponto de recuperação. Nesse ponto, um banco de dados tem, geralmente, transações não confirmadas e está em um estado inutilizável. Nesse caso, uma fase desfazer é necessária como parte da recuperação do banco de dados.

  • A fase desfazer, que é a primeira parte da recuperação, reverte até as transações não confirmadas e disponibiliza o banco de dados aos usuários. Após a fase reversão, os backups subsequentes não podem ser restaurados.

O restante desta seção examina essas fases mais detalhadamente.

Fase de cópia de dados

A primeira fase em qualquer processo de restauração é a fase de cópia de dados. A fase de cópia de dados inicializa o conteúdo do banco de dados, os arquivos ou as páginas que estão sendo restauradas. Essa fase é executada pelo banco de dados de restauração, pelos arquivos de restauração e pelas operações de página de restauração usando backups diferenciais ou completos.

A fase de cópia de dados envolve a cópia dos dados de um ou mais backups completos e, opcionalmente, backups diferenciais e depois o reajuste do conteúdo do banco de dados afetado, arquivos ou páginas ao ponto em que foram capturados por esses backups.

A página ou o arquivo mais antigo no conjunto de roll forward determina o ponto de partida para a próxima fase: refazer (roll forward).

Fase refazer (roll-forward)

Refazer (ou roll-forward) é o processo de refazer alterações registradas nos dados do conjunto de roll forward para avançar os dados no tempo. Para realizar o roll-forward, o Mecanismo de banco de dados do SQL Server processa backups de log à medida que eles são restaurados , iniciando pelo log contido nos backups completos.

A restauração evita roll-forward desnecessário. Normalmente, se os dados eram somente leitura no momento do backup e permaneceram como tal, um roll-forward é desnecessário e é ignorado.

O ponto de recuperação

A meta do roll-forward é retornar os dados a seu estado original no ponto de recuperação. O ponto de recuperação é o ponto especificado pelo usuário para recuperação do conjunto de dados. No modelo de recuperação completa, você pode especificar o ponto de recuperação como um point-in-time específico, uma transação marcada ou um número de sequência de log. No modelo de recuperação com log de operações em massa, você só poderá restaurar a um point-in-time específico se nenhuma operação em massa tiver sido executada desde o backup de log anterior.

Consistência da fase refazer

Na fase refazer, sempre é feito roll-forward dos dados até um ponto em que haja consistência da fase refazer com o estado do banco de dados no ponto de recuperação. Foi feito roll-forward de todos os dados até um ponto em que a fase desfazer pode ocorrer.

O estado do banco de dados é definido pelo arquivo primário, como segue:

  • Se o arquivo primário estiver sendo restaurado, o ponto de recuperação determinará o estado do banco de dados inteiro. Por exemplo, se um banco de dados estiver sendo recuperado para um point-in-time, um pouco antes de uma tabela ter sido acidentalmente cancelada, todo o banco de dados deverá ser restaurado até aquele mesmo point-in-time.

  • Se o arquivo primário não estiver sendo restaurado, o estado do banco de dados será conhecido e será feito roll-forward dos dados restaurados até um ponto de recuperação operacionalmente consistente com o banco de dados. O SQL Server força isto.

Porém, o banco de dados pode conter alterações feitas por transações não confirmadas no ponto de recuperação. Para restauração online, os dados são recuperados a um point-in-time consistente com o estado atual da parte online do banco de dados.

Um backup diferencial ignora o roll-forward até momento em que backup diferencial foi feito. As páginas no conjunto de roll forward são substituídas pelas mais recentes do backup diferencial.

Fase desfazer (reversão) e recuperação

Depois que a fase refazer fez roll-forward de todas as transações em log , um banco de dados normalmente contém alterações feitas por transações não confirmadas no ponto de recuperação. Isso torna os dados com roll-forward operacionalmente inconsistentes. O processo de recuperação abre o log de transações para identificar transações não confirmadas. Transações não confirmadas são desfeitas com roll-forward, a menos que tenham bloqueios que impeçam que outras transações vejam os dados operacionalmente inconsistentes. Essa etapa é chamada de desfazer (ou fase reversão). Se os dados já forem operacionalmente consistentes no início do processo de recuperação, a fase desfazer será ignorada. Depois que o banco de dados estiver operacionalmente consistente, a recuperação trará o banco de dados online.

Depois que um ou mais backups foram restaurados, a recuperação normalmente inclui as fases refazer e desfazer. Qualquer backup completo ou diferencial contém registros de log de transações suficientes para permitir que os dados naquele backup sejam recuperados a um estado autoconsistente.

ObservaçãoObservação

Durante uma recuperação de falha ou um failover de espelhamento de banco de dados, o SQL Server 2005 Enterprise Edition e versões posteriores permitem que os usuários acessem o banco de dados durante a fase desfazer. Isso é conhecido como recuperação rápida. A recuperação rápida é possível porque transações não confirmadas no momento da falha readquirem todos os bloqueios que tinham antes da falha. Enquanto essas transações estão sendo revertidas, seus bloqueios as protegem de interferência dos usuários.

Relação das opções RECOVERY e NORECOVERY com as fases de restauração

Uma instrução RESTORE específica termina após a fase refazer ou continua pela fase desfazer, dependendo se a instrução especificou WITH NORECOVERY, como segue:

  • WITH RECOVERY inclui as fases refazer e desfazer, e recupera o banco de dados; os backups adicionais não podem ser restaurados. Esse é o padrão.

    Se o conjunto de roll forward não tiver roll-forward suficiente para ficar consistente com o banco de dados, a fase desfazer não poderá ocorrer. O Mecanismo de Banco de Dados emite um erro e a recuperação para.

    Se o conjunto de roll forward estiver consistente com o banco de dados, a recuperação será executada e o banco de dados poderá ser trazido online.

  • WITH NORECOVERY omite a fase desfazer para preservar transações não confirmadas. A omissão da fase desfazer permite restaurar outros backups para fazer o roll-forward do banco de dados no tempo. Ocasionalmente, RESTORE WITH NORECOVERY faz roll-forward dos dados até o momento em que estejam consistentes com o banco de dados. Nesses casos, o Mecanismo de Banco de Dados emite uma mensagem informando que o conjunto de roll forward pode ser recuperado agora usando a opção RECOVERY.

    Para obter informações sobre conjuntos de roll-forward, consulte Compreendendo como a restauração e a recuperação de backups funcionam no SQL Server.

ObservaçãoObservação

Uma terceira alternativa, WITH STANDBY, está fora do escopo deste tópico.

Para obter uma descrição detalhada dessas opções RESTORE, consulte RESTORE (Transact-SQL).

Caminhos de recuperação

Um caminho de recuperação é um conjunto exclusivo de transformações que evoluíram o banco de dados com o passar do tempo mantendo sua consistência. Para obter informações sobre caminhos de recuperação e conceitos relacionados de bifurcações e ramificações de recuperação, consulte Caminhos de recuperação.