Recuperando para uma transação marcada

Este tópico é relevante apenas para os bancos de dados que contêm transações marcadas e que usam modelos de recuperação bulk-logged ou completos.

Para obter mais informações sobre os requisitos para restauração de um ponto de recuperação específico, consulte Restaurando um banco de dados para um ponto em um backup.

O SQL Server oferece suporte para inserir marcas nomeadas no log de transações permitindo a recuperação dessa marca específica. As marcas de log são transações específicas e são inseridas apenas se as suas transações associadas forem confirmadas. Desse modo, as marcas podem ser ligadas ao trabalho específico e você pode recuperá-las em um ponto que inclua ou exclua esse trabalho.

Antes de você inserir marcas nomeadas no log de transações, considere o seguinte:

  • Como as marcas de transação consomem espaço de log, só as use para transações que têm um papel significativo na estratégia de recuperação de banco de dados.

  • Depois que a transação marcada é confirmada, uma linha é inserida na tabela logmarkhistory no msdb.

  • Se uma transação marcada abrange vários bancos de dados no mesmo servidor de banco de dados ou em servidores diferentes, as marcas devem ser registradas nos logs de todos os bancos de dados afetados. Para obter mais informações, consulte Usando transações marcadas (modelo de recuperação completa).

ObservaçãoObservação

Para obter mais informações sobre como marcar transações, consulte Usando transações marcadas (modelo de recuperação completa).

Sintaxe Transact-SQL para inserir marcas nomeadas em um log de transações

Para inserir marcas nos logs de transação, use a instrução BEGIN TRANSACTION e a cláusula WITH MARK [descrição]. A marca é nomeada igual à transação. A descrição opcional é uma descrição textual da marca, não o nome da marca. Por exemplo, o nome da transação e da marca criado na seguinte instrução BEGIN TRANSACTION é Tx1:

BEGIN TRANSACTION Tx1 WITH MARK 'not the mark name, just a description'  

O log de transações registra o nome da marca (nome da transação), descrição, banco de dados, usuário, informações datetime e o LSN (Log Sequence Number). As informações datetime são usadas com o nome da marca exclusivamente para identificar a marca.

Para obter informações sobre como inserir uma marca em uma transação que abrange vários bancos de dados, consulte Usando transações marcadas (modelo de recuperação completa).

Sintaxe Transact-SQL para recuperar a uma marca

Quando você assinala uma transação marcada usando uma instrução RESTORE LOG, você pode usar uma das cláusulas seguintes para parar na marca ou imediatamente antes dela:

  • Use a cláusula WITH STOPATMARK = '<mark_name>' para especificar que a transação marcada é o ponto de recuperação.

    O STOPATMARK roll-forward até a marca e inclui a transação marcada no roll-forward.

  • Use a cláusula WITH STOPATMARK = '<mark_name>' para especificar que o log de eventos que está imediatamente antes da marca é o ponto de recuperação.

    O STOPATMARK roll-forward até a marca e exclui a transação marcada do roll-forward.

Ambas as opções STOPATMARK e STOPBEFOREMARK aceitam uma cláusula opcional AFTER datetime. Quando o datetime é usado, os nomes da marca não têm que ser exclusivos.

Se AFTER datetime for omitido, o roll-forward será interrompido na primeira marca que tenha o nome especificado. Se AFTER datetime for especificado, o roll-forward será interrompido na primeira marca que tem o nome especificado, exatamente em ou depois de datetime.

ObservaçãoObservação

Como em todas as operações de restauração point-in-time, não é permitido recuperar a uma marca quando o banco de dados estiver passando por operações com log de operações em massa.

Para restaurar a uma transação marcada

Como restaurar um banco de dados para uma transação marcada (SQL Server Management Studio)

RESTORE (Transact-SQL)

Preparando os backups de log

Para este exemplo, uma estratégia de backup apropriada para estes bancos de dados relacionados seria a seguinte:

  1. Use o modelo de recuperação completa para ambos os bancos de dados.

  2. Crie um backup completo de cada banco de dados.

    Os backups dos bancos de dados podem ser feitos consecutivamente ou simultaneamente.

  3. Antes de fazer o backup do log de transações, marque uma transação que execute em todos os bancos de dados. Para obter mais informações sobre como criar transações marcadas, consulte Usando transações marcadas (modelo de recuperação completa).

  4. Faça o backup do log de transações em cada banco de dados.

Recuperando um banco de dados a uma transação marcada

Para restaurar o backup

  1. Crie backups da parte final do log dos bancos de dados não danificados, se possível.

  2. Restaure o backup completo mais recente do banco de dados de cada banco de dados.

  3. Identifique a transação marcada mais recente disponível em todos os backups de log de transações. Essa informação é armazenada na tabela logmarkhistory no banco de dados msdb em cada servidor.

  4. Identifique os backups de log para todos os bancos de dados relacionados que contêm essa marca.

  5. Restaure cada backup de log, parando na transação marcada.

  6. Recupere cada banco de dados.