Restaurar um backup de log de transação (SQL Server)

Aplica-se a:SQL Server

Você pode restaurar um backup de log de transação no SQL Server usando o SQL Server Management Studio, Transact-SQL ou PowerShell.

Pré-requisitos

Você deve restaurar os backups na ordem em que os criou. Antes de restaurar um backup específico do log de transações, restaure os seguintes backups anteriores sem reverter transações não comprometidas, usando WITH NORECOVERY:

  • O backup completo do banco de dados e, opcionalmente, o último backup diferencial feito antes desse backup do log de transação. O banco de dados deve ter usado o modelo de recuperação completo ou com registro em massa antes da criação do backup completo ou diferencial mais recente.

  • Todos os backups de log de transações realizados após o backup completo do banco de dados ou o backup diferencial (se você restaurar um) e antes desse backup de log de transações. Você deve aplicar backups de log na ordem em que os criou, sem lacunas na cadeia de log.

Para mais informações sobre backups de logs de transações, veja Backups de logs de transações e Aplicar Backups de Logs de Transações.

Permissões

Para um banco de dados existente, RESTORE as permissões são concedidas por padrão aos membros das funções de servidor fixas sysadmin e dbcreator e ao proprietário (dbo) do banco de dados.

As permissões RESTORE são concedidas a funções cuja associação o servidor sempre pode verificar. O servidor pode verificar a associação à função de banco de dados fixa somente quando o banco de dados estiver acessível e íntegro, o que nem sempre é verdade quando RESTORE é executado. Por esse motivo, os membros da função de banco de dados fixa db_owner não têm permissões RESTORE.

Remarks

Para um banco de dados espelhado, ou um banco de dados secundário de grupo de disponibilidade que você ainda não juntou ao grupo de disponibilidade, restaure o último backup de log com a NORECOVERY opção (-NoRecovery no PowerShell). O banco de dados deve permanecer no estado de restauração.

Para um banco de dados secundário de envio de logs, restaure o último backup de log com a NORECOVERY opção ou a STANDBY opção (-StandbyFile no PowerShell). A STANDBY opção oferece acesso somente leitura ao banco de dados entre as restaurações.

Use SQL Server Management Studio.

Aviso

Em uma restauração típica, você seleciona os backups de log junto com os backups de dados e diferenciais na caixa de diálogo Restaurar Banco de Dados .

  1. Conecte-se à instância apropriada do Mecanismo de Banco de Dados do SQL Server. No Pesquisador de Objetos, selecione o nome do servidor para expandir a árvore de servidores.

  2. Expanda os Bancos de dados. Selecione um banco de dados de usuário, ou expanda Bancos de Dados do Sistema e selecione um banco de dados do sistema.

  3. Clique com o botão direito no banco de dados, aponte para Tarefas, aponte para Restaurar e então selecione Registro de Transações. A caixa de diálogo Restaurar Log de Transações é aberta.

    Observação

    Se o Registro de Transações não estiver disponível, talvez seja necessário restaurar um backup completo ou diferencial primeiro. Use a caixa de diálogo Restaurar Banco de Dados.

  4. Na página Geral , na caixa de lista de Banco de Dados , selecione o banco de dados. A lista mostra apenas bancos de dados no estado de restauração.

  5. Para especificar a origem e localização dos conjuntos de backup a serem restaurados, selecione uma das seguintes opções:

    • De backups anteriores do banco de dados

      Selecione o banco de dados a restaurar na lista suspensa. A lista contém apenas bancos de dados com backups registrados no histórico de backup do msdb.

    • De arquivo ou fita

      Clique no botão Procurar (...) para abrir a caixa de diálogo Selecionar dispositivos de backup. Na caixa Tipo de mídia de backup , selecione um tipo de dispositivo. Para adicionar um ou mais dispositivos à caixa de mídia de backup , selecione Adicionar.

      Depois de adicionar os dispositivos que deseja, selecione OK para voltar à página Geral .

  6. Na grade Selecione os backups de log de transações a serem restaurados, selecione os backups a serem restaurados. A lista mostra os backups de logs de transações disponíveis para o banco de dados selecionado. A tabela lista backups de logs na ordem dos números de sequência de log (LSNs) que eles contêm, e você deve restaurá-los nessa ordem.

    A tabela a seguir lista os cabeçalhos de coluna da grade e descreve seus valores.

    Cabeçalho Valor
    Restaurar Caixas selecionadas indicam os conjuntos de backup a serem restaurados.
    Nome Nome do conjunto de backup.
    Componente Componente com backup: Banco de Dados, Arquivo ou <em branco> (para logs de transações).
    Banco de dados Nome do banco de dados envolvido na operação de backup.
    Data de Início A data e hora do início da operação de backup, apresentadas na configuração regional do cliente.
    Data de Conclusão Data e hora de término da operação de backup, apresentadas na configuração regional do cliente.
    Primeiro LSN Número de sequência de log da primeira transação no conjunto de backup. Deixe em branco para backup de arquivos.
    Último LSN Número de sequência de log da última transação no conjunto de backup. Deixe em branco para backup de arquivos.
    LSN do Ponto de Verificação Número de sequência de log do ponto de verificação mais recente no momento em que o backup foi criado.
    LSN completo Número de sequência de log do backup de banco de dados completo mais recente.
    Servidor Nome da instância do Mecanismo de Banco de Dados que executou a operação de backup.
    Nome de usuário Nome do usuário que realizou a operação de backup.
    Tamanho Tamanho do conjunto de backup em bytes.
    Posição Posição do conjunto de backup no volume.
    Validade Data e hora de vencimento do conjunto de backup.
  7. Selecione uma das opções a seguir:

    • Momento específico

      Mantenha o padrão (Mais recente possível), ou selecione o botão de navegar para abrir a caixa de diálogo Restaurar no Ponto no Tempo e selecione uma data e hora específicas.

    • Transação marcada

      Restaure o banco de dados a uma transação previamente marcada. Essa opção abre a caixa de diálogo Selecionar Transação Marcada. A grade nesta caixa de diálogo lista as transações marcadas nos backups de log de transações selecionados.

      Por padrão, a operação de restauração vai até, mas exclui, a transação marcada. Para incluir a transação marcada na restauração, selecione Incluir transação marcada.

      A tabela a seguir lista os cabeçalhos de coluna da grade e descreve seus valores.

      Cabeçalho Valor
      <em branco> Exibe uma caixa de seleção para selecionar a marca.
      Marca de transação Nome da transação marcada especificado pelo usuário quando a transação foi confirmada.
      Data Data e hora de confirmação da transação. A data e hora da transação são exibidas conforme registrado na tabela logmarkhistory no msdb, não na data e hora do computador cliente.
      Descrição Descrição da transação marcada, se houver, especificada pelo usuário quando a transação foi confirmada.
      LSN Número de sequência de log da transação marcada.
      Banco de dados Nome do banco de dados em que a transação marcada foi confirmada.
      Nome de usuário Nome do usuário do banco de dados que confirmou a transação marcada.
  8. Para visualizar ou selecionar as opções avançadas, escolha Opções no painel Selecionar uma página.

  9. Na seção Opções de restauração, selecione uma das seguintes opções:

    • Preservar as configurações de replicação (WITH KEEP_REPLICATION)

      Preserva as configurações de replicação quando você restaura um banco de dados publicado em um servidor diferente daquele onde o banco foi criado.

      Essa opção está disponível apenas com a opção Deixe o banco de dados pronto para uso ao reverter transações não comprometidas... (descrita adiante), que equivale a restaurar um backup com a opção RECOVERY .

      Selecionar essa opção é equivalente a usar a opção KEEP_REPLICATION em uma instrução Transact-SQL RESTORE .

    • Perguntar antes de restaurar cada backup

      Antes de cada backup feito após o primeiro, essa opção abre a caixa de diálogo Continue with Restore, que pergunta se você quer continuar a sequência de restauração. A caixa de diálogo mostra o nome do próximo conjunto de mídias (se disponível), o nome do conjunto de backup e a descrição do conjunto de backup.

      Essa opção é especialmente útil quando você precisa trocar fitas por diferentes conjuntos de mídia, por exemplo, quando o servidor tem apenas um dispositivo de fita. Selecione OK apenas quando estiver pronto para continuar.

      Se você selecionar Não, o banco de dados permanece no estado de restauração. Você pode continuar a sequência de restauração depois, a partir da última restauração que foi concluída. Se o próximo backup for um backup de dados ou diferencial, use a tarefa Restaurar Banco de Dados novamente. Se o backup seguinte for um backup de log, use a tarefa Restaurar Log de Transações .

    • Acesso restrito ao banco de dados restaurado (WITH RESTRICTED_USER)

      Disponibiliza o banco de dados restaurado apenas para os membros do db_owner, dbcreatorou sysadmin.

      Selecionar essa opção é equivalente a usar a opção RESTRICTED_USER em uma instrução Transact-SQL RESTORE .

  10. No estado de recuperação, especifique o estado do banco de dados após a operação de restauração.

    • Deixe o banco de dados pronto para uso revertendo as transações não confirmadas. Logs adicionais de transações não podem ser restaurados. (RESTORE COM RECUPERAÇÃO)

      Recupera o banco de dados. Essa opção é equivalente à opção RECOVERY em uma instrução Transact-SQL RESTORE.

      Escolha essa opção apenas se não tiver outros backups de log para restaurar.

    • Deixe o banco de dados inoperacional e não reverta transações não confirmadas. Os logs de transações adicionais podem ser restaurados. (RESTORE WITH NORECOVERY)

      Deixa o banco de dados não recuperado, no estado RESTORING . Essa opção é equivalente a usar a opção NORECOVERY em uma instrução Transact-SQL RESTORE.

      Quando você escolhe essa opção, a opção Preservar as configurações de replicação não está disponível.

    • Deixar o banco de dados no modo somente leitura. Desfaça as transações não confirmadas, mas salve as ações de desfazer em um arquivo, para que os efeitos da recuperação possam ser revertidos. (RESTORE WITH STANDBY)

      Deixa o banco de dados no estado de espera. Essa opção é equivalente a usar a opção STANDBY em uma instrução Transact-SQL RESTORE .

      Essa opção requer um arquivo de standby.

  11. Se você deixar o banco de dados em modo somente leitura, especifique um nome de arquivo em espera na caixa de texto Arquivo em espera. Você pode procurar o arquivo em espera ou digitar seu caminho na caixa de texto.

Utilizar Transact-SQL

Importante

Para evitar ambiguidades, especifique explicitamente WITH NORECOVERY ou WITH RECOVERY em cada instrução RESTORE, especialmente em scripts.

  1. Para cada backup de log de transação antes do último na sua sequência de restauração, execute uma instrução RESTORE LOG com os seguintes valores:

    • O nome do banco de dados ao qual aplicar o log de transações.
    • O dispositivo de backup que contém o backup do log de transações.
    • A cláusula NORECOVERY.

    O exemplo a seguir mostra a sintaxe básica, onde <database_name> é o nome do banco de dados e <backup_device> é o nome do dispositivo que contém o backup do log.

    RESTORE LOG <database_name>
    FROM <backup_device>
    WITH NORECOVERY
    [ ; ]
    

    Se sua sequência de restauração tiver apenas um backup de log, pule essa etapa.

  2. Para o último backup de log na sua sequência de restauração, use um dos seguintes métodos para recuperar o banco de dados:

    • Recupere o banco de dados como parte da última RESTORE LOG instrução:

      RESTORE LOG <database_name>
      FROM <backup_device>
      WITH RECOVERY;
      GO
      
    • Recupere o banco de dados depois, com uma instrução separada RESTORE DATABASE :

      RESTORE LOG <database_name>
      FROM <backup_device>
      WITH NORECOVERY;
      
      RESTORE DATABASE <database_name>
      WITH RECOVERY;
      GO
      

      O banco de dados permanece no estado de restauração após a última instrução RESTORE LOG. Você pode verificar se restaurou todos os backups de log necessários e então recuperar o banco de dados. Essa abordagem é frequentemente útil para uma restauração para um ponto específico no tempo.

Exemplos (Transact-SQL)

Por padrão, o banco de dados AdventureWorks2025 usa o modelo de recuperação simples. Os exemplos a seguir exigem backups feitos sob o modelo de recuperação completa. Antes de criar esses backups, execute a seguinte instrução para alterar o modelo de recuperação:

ALTER DATABASE AdventureWorks2025
SET RECOVERY FULL;

A mudança para o modelo de recuperação completa só ocorre após o primeiro backup de dados. Faça um backup completo do banco de dados para iniciar a cadeia de logs.

Os exemplos a seguir restauram os backups em uma instância onde o AdventureWorks2025 banco de dados não existe, como um servidor diferente.

A. Aplique um único backup de log de transação

O exemplo a seguir restaura o AdventureWorks2025 banco de dados a partir de um backup completo em um dispositivo de backup chamado AdventureWorks2025_1. Em seguida, ele aplica o primeiro backup do log de transação a partir de um dispositivo de backup chamado AdventureWorks2025_log. Finalmente, ele recupera o banco de dados.

RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
     NORECOVERY;
GO

RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO

B. Aplique múltiplos backups de logs de transações

O exemplo a seguir restaura o AdventureWorks2025 banco de dados a partir de um backup completo em um dispositivo de backup chamado AdventureWorks2025_1. Em seguida, aplicam-se, um a um, os três primeiros backups de log de transação de um dispositivo de backup chamado AdventureWorks2025_log. Finalmente, ele recupera o banco de dados.

RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
     NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 2,
     NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 3,
     NORECOVERY;
GO

RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO

Usar PowerShell

Use o cmdlet Restore-SqlDatabase e defina o parâmetro -RestoreAction como Log. Inclua o -NoRecovery parâmetro para cada restauração na sequência, exceto a última. Omita -NoRecovery na última restauração de log para recuperar o banco de dados.

Observação

Esses exemplos exigem o SqlServer módulo. Para obter mais informações, consulte SQL Server PowerShell Provider.

Para a sintaxe completa, veja Restore-SqlDatabase.

Exemplos (PowerShell)

Os exemplos a seguir restauram os backups em uma instância onde o AdventureWorks2025 banco de dados não existe, como um servidor diferente.

A. Aplique um único backup de log de transação

O exemplo a seguir restaura o AdventureWorks2025 banco de dados a partir de um backup completo do banco de dados, deixando o banco de dados no estado de restauração. Em seguida, ele aplica um backup do log de transações e recupera o banco de dados.

$instance = "Computer\Instance"

$fullRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_full.bak"
    RestoreAction  = "Database"
    NoRecovery     = $true
}
Restore-SqlDatabase @fullRestore

$logRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_log1.trn"
    RestoreAction  = "Log"
}
Restore-SqlDatabase @logRestore

B. Aplique múltiplos backups de logs de transações

O exemplo a seguir restaura o backup completo do banco de dados e então aplica três backups de log de transação em sequência. Toda restauração, exceto a última, usa -NoRecovery, então a última restauração do log recupera o banco de dados.

$instance = "Computer\Instance"
$logBackups = @(
    "C:\Backup\AdventureWorks2025_log1.trn",
    "C:\Backup\AdventureWorks2025_log2.trn",
    "C:\Backup\AdventureWorks2025_log3.trn"
)

$fullRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_full.bak"
    RestoreAction  = "Database"
    NoRecovery     = $true
}
Restore-SqlDatabase @fullRestore

for ($i = 0; $i -lt $logBackups.Count; $i++) {
    $isLast = ($i -eq $logBackups.Count - 1)
    $logRestore = @{
        ServerInstance = $instance
        Database       = "AdventureWorks2025"
        BackupFile     = $logBackups[$i]
        RestoreAction  = "Log"
        NoRecovery     = -not $isLast
    }
    Restore-SqlDatabase @logRestore
}