Share via


Práticas recomendadas para recuperar um banco de dados em um ponto de recuperação específico

Este tópico só é relevante para os bancos de dados do SQL Server que usam os modelos de recuperação bulk-logged ou completo. Ele apresenta algumas práticas recomendadas para restaurar um ponto de recuperação específico de um banco de dados (um momento determinado, uma transação marcada ou um LSN (número da seqüência de log)).

Usar STANDBY para Localizar um Momento Determinado Desconhecido

Às vezes, você quer restaurar um banco de dados para um momento determinado específico, mas não sabe que momento determinado melhor atende à sua meta de recuperação (ou seja, o ponto de recuperação ideal). Para encontrar esse ponto de recuperação, é possível usar RESTORE … WITH STANDBY **=**nome_do_arquivo_em_espera com uma cláusula STOPAT cuja hora de destino é anterior ao ponto de recuperação que você está procurando. Uma operação de restauração STANDBY recupera o banco de dados para acesso somente leitura, o que permite inspecionar o banco de dados para procurar o ponto de recuperação ideal.

Usando uma série de operações de restauração STANDBY, é possível usar roll forward de maneira incremental no arquivo de dados primário (e, opcionalmente, outros arquivos de dados) até encontrar o ponto de recuperação ideal. Depois de identificar o ponto de recuperação ideal, é possível usar roll forward novamente no banco de dados, especificando WITH STOPAT para especificar o ponto de recuperação ideal como o momento determinado de destino. Quando alcançar o momento determinado de destino, restaure o banco de dados parcial usando a opção WITH RECOVERY.

Os arquivos restantes, se houver, podem então ser restaurados e recuperados para que estejam consistentes com o banco de dados. Depois de restaurar a última restauração completa de log, restaure o primeiro backup de log feito após o ponto de recuperação designado.

Para obter mais informações sobre a opção STANDBY, consulte Argumentos de RESTORE (Transact-SQL).

Especificar com antecedência o point-in-time em uma seqüência de restauração

Uma seqüência de restauração consiste em uma ou mais operações de restauração que movem dados por uma ou mais etapas da restauração. Quanto mais informações forem fornecidas sobre a intenção da seqüência, menos probabilidade terá de experimentar erros que possam exigir que você recomece. Para uma restauração point-in-time, o Mecanismo de Banco de Dados do SQL Server usa informações especificadas no início (e durante) uma seqüência de restauração para identificar a meta do point-in-time da restauração. Se a espera for muito longa na seqüência, a seqüência falhará. Forneça informações de parada com tempo suficiente na seqüência de restauração para garantir que a restauração não vá além da meta point-in-time.

Se você pretender parar em um ponto de recuperação específico, comunique essa intenção a cada instrução RESTORE LOG (usando STOPAT, STOPBEFOREMARK ou STOPATMARK), com a opção RECOVERY. Quando as opções RECOVERY e STOPAT são usadas em conjunto, se o backup de log de transações não contiver o tempo solicitado (por exemplo, se o tempo especificado estiver além do tempo coberto pelo log de transações), um aviso será gerado e o banco de dados permanecerá sem recuperação. Quando o ponto de recuperação é alcançado, o banco de dados é recuperado e uma tentativa para restaurar outro backup de log falha. Usar as opções RECOVERY e STOPAT juntas na restauração de um backup de log assegura que nenhuma restauração de log jamais ultrapasse o ponto de parada.

Observação importanteImportante

Se uma seqüência de restauração parcial excluir qualquer grupo de arquivos FILESTREAM, não haverá suporte para a restauração point-in-time. É 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á sucesso e o grupo de arquivos ILESTREAM ficará irrecuperável.

Exemplo: restauração point-in-time

No exemplo a seguir, a seqüência de restauração começa a declarar a intenção de parar em um determinado momento ao aplicar o primeiro backup de log. Nesse exemplo, o momento da parada ocorre no primeiro backup de log, após o backup diferencial.

RESTORE DATABASE database_name FROM full_backup 
    WITH NORECOVERY;
RESTORE DATABASE database_name FROM full_differential_backup 
    WITH NORECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;

O sucesso da restauração de um log especificado depende se o tempo está no intervalo capturado por um backup de log, como descrito na tabela seguir.

Relação de tempo com o intervalo capturado pelo backup de log:

Efeito

O tempo está antes do intervalo.

A restauração falha e não ocorre roll-forward.

O tempo está durante o intervalo.

A última restauração é bem-sucedida e o banco de dados é recuperado.

O tempo está depois do intervalo.

O roll-forward é bem-sucedido, mas o banco de dados não é recuperado porque o tempo não foi alcançado.

Declarar o ponto de parada em cada instrução RESTORE subseqüente

Um ponto de parada é específico da instrução que estabelece a opção STOPAT, STOPBEFOREMARK ou STOPATMARK. Se você omitir essa opção de uma instrução RESTORE, o backup completo será restaurado.

À medida que a seqüência de restauração point-in-time progride, você pode alterar o ponto de recuperação especificando um valor novo para tempo, supondo que o banco de dados ainda não tenha excedido o novo tempo.

ObservaçãoObservação

As opções STOPBEFOREMARK e STOPATMARK têm dois parâmetros, mark_name e lsn_number. O parâmetro mark_name que identifica uma marca de transação em um backup de log só tem suporte nas instruções RESTORE LOG. O parâmetro lsn_number que especifica um número de seqüência de log tem suporte nas instruções RESTORE DATABASE e RESTORE LOG.

Histórico de alterações

Conteúdo Atualizado

Seção "Usar STANDBY para localizar um momento determinado desconhecido" corrigida para esclarecer que WITH STANDBY apenas permite desfazer os efeitos do processo de recuperação.