Restaurando um banco de dados para um ponto em um backup

 Este tópico só é relevante para os bancos de dados do SQL Server que usam os modelos de recuperação bulk-logged ou completo.

Pode ser necessário restaurar e recuperar um banco de dados em um momento específico, marca ou em um determinado LSN (número de seqüência de log), antes do momento da falha. Por exemplo, se uma transação alterou incorretamente alguns dados, é possível restaurar o banco de dados em um ponto de recuperação anterior à entrada dos dados incorretos. Qualquer restauração que especifique o ponto de recuperação do banco de dados é conhecida como recuperação em um momento determinado.

A ilustração a seguir mostra a restauração em um ponto de recuperação no meio do log de transações, realizada no tempo t9. As alterações feitas no restante desse backup e no backup de log subseqüente realizadas no tempo t10 são descartadas.

Restaurando para o ponto no meio de um backup de log

O ponto de recuperação de destino é especificado usando uma das opções a seguir:

  • Um momento específico no log de transações.

  • Uma marca nomeada que foi inserida em um registro de log de transações.

  • Um LSN (número de seqüência de log).

ObservaçãoObservação

A recuperação em um LSN é um recurso especializado destinado a fornecedores de ferramentas e é improvável que seja de uso geral.

A restauração de um momento especificado ou de uma transação especificada será sempre feita a partir de um backup de log, de modo que o ponto de recuperação de destino deve existir no backup de log de transações. Para restaurar um banco de dados para uma transação ou momento específico, determine o ponto de recuperação de destino em uma cláusula STOPAT, STOPATMARK ou STOPBEFOREMARK. Em cada instrução RESTORE LOG da seqüência de restauração, especifique a transação ou o tempo de destino em uma cláusula STOPAT, STOPATMARK ou STOPBEFOREMARK idêntica. Ao aplicar o backup de log que contém o ponto de recuperação, será possível recuperar somente as transações anteriores ao ponto em questão.

Como um pré-requisito para uma restauração pontual, você deve restaurar primeiro um backup de banco de dados completo cujo ponto de extremidade seja anterior ao ponto de recuperação de destino. Para ajudar a identificar qual backup de banco de dados restaurar, opcionalmente, você pode especificar a cláusula WITH STOPAT, STOPATMARK ou STOPBEFOREMARK em uma instrução RESTORE DATABASE para gerar um erro, se um backup de dados for muito recente para o tempo de destino especificado. Mas o backup de dados completo será sempre restaurado, mesmo que ele contenha o tempo de destino.

ObservaçãoObservação

O backup de log deve estar no mesmo caminho de recuperação do backup de banco de dados completo ou parcial que será restaurado no início da seqüência de restauração pontual.

Quando a recuperação é concluída, o horário do banco de dados é determinado pelo ponto de recuperação no qual o arquivo primário foi recuperado. As restaurações subseqüentes, caso existam, precisam ter pontos de recuperação consistentes com o banco de dados no momento determinado.

Se uma seqüência de restauração parcial excluir qualquer grupo de arquivos FILESTREAM, não haverá suporte para a restauração em um momento determinado. É possível forçar a seqüência de restauração a continuar. Contudo, os grupos de arquivos FILESTREAM que são omitidos da instrução RESTORE nunca poderão ser restaurados. Para forçar uma restauração pontual, especifique a opção CONTINUE_AFTER_ERROR juntamente com a opção STOPAT, STOPATMARK ou STOPBEFOREMARK, que você também deve especificar nas instruções RESTORE LOG subseqüentes. Se você especificar CONTINUE_AFTER_ERROR, a seqüência de restauração parcial terá êxito e o grupo de arquivos FILESTREAM ficará irrecuperável.

ObservaçãoObservação

No modelo de recuperação bulk-logged, se um backup de log contiver alterações registradas em massa, a recuperação point-in-time não será possível para um ponto dentro desse backup. O banco de dados deve ser recuperado ao término do backup de log de transações.

Nesta seção