Compartilhar 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 sequê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, poderã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 sequência de restauração

Uma sequê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 sequê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 sequência de restauração para identificar a meta do point-in-time da restauração. Se a espera for muito longa na sequência, a sequência falhará. Forneça informações de parada com tempo suficiente na sequê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 sequência de restauração parcial excluir qualquer grupo de arquivos FILESTREAM, não haverá suporte para a restauração do momento determinado. É possível forçar a sequência de restauração para continuar. Contudo, os grupos de arquivos FILESTREAM omitidos de sua 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 subsequentes. Se você especificar CONTINUE_AFTER_ERROR, a sequência de restauração parcial terá êxito e o grupo de arquivos FILESTREAM se tornará irrecuperável.

Exemplo: restauração point-in-time

No exemplo a seguir, a sequê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 subsequente

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 sequê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 sequê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.