locked
Erro ao restaurar backup transacional. RRS feed

  • Pergunta

  • Caros colegas, tenho um backup completo de uma base  e um backup transacional. Fiz o restore completo e depois quando fui restaurar o backup transacional deu o seguinte erro:

     

    The preceding  restore operation did not specify WITH NORECOVERY or WITH STANDBY. Restart the restore sequence, specifying  WITH NORECOVERY or WITH STANDBY for all but the final step. RESTORE LOG is terminating abnormally.

     

    Alguém sabe me dizer o que pode ser esse erro.

    Grata!!!

    segunda-feira, 24 de novembro de 2008 13:23

Respostas

  • Olá Larac aqui está tudo o que precisa saber sobre backup e restore transacional:

     


    Backup de log transacional, minimiza as perdas em caso de necessidade de restaurarmos uma base de dados devido à algum problema com ela ou mesmo com o servidor, e para vamos utilizar os seguintes comandos:

    Restore Database meudb From disk 'c:\backup\meudb.bak' With NoRecovery
    Restore Log meudb From disk = 'c:\backup\meudb.trn' With File = 1, NoRecovery
    Restore Log meudb From disk = 'c:\backup\meudb.trn' With File = 2, Recovery



    Utilizando o comando acima, estamos restaurando o último backup full realizado e posteriormente aplicando 2 backups de log transacional que realizamos, tenham atenção quanto à opção NORECOVERY que visa garantir a indisponibilidade da base de dados durante o processo e também à opção FILE que tem por objetivo determinar até qual arquivo iremos efetuar o restore, lembrando sempre que NÃO é possível pularmos a sequência dos arquivos de log transacional.

    Imaginaremos a seguinte situação no dia 28/11/2008:
    Realizamos um backup full às 7:00AM e mais um backup transacional a cada 1 hora, porém às 8:50AM foi detectado que houve uma deleção de dados incorreta e como única alternativa, teríamos que restaurar a base de dados. Porém se restaurassemos o backup realizado às 7:00AM perderiamos uma quantidade de informações muito grande. Qual seria então a melhor solução para este problema, uma vez que temos a seguinte condição?

    7:00AM - Backup Full (Backup Database meudb to BKP_MEUDB With Init)
    8:00AM - Backup Transacional (Backup Log meudb to BKP_MEUDB_TRANLOG With Init)
    8:50AM - Deleção dos dados

    Para que pudessemos obter o melhor resultado, ou seja a menor perda de dados, teremos que agir da seguinte forma:

    1) Efetuarmos um backup transacional da situação atual.

    Backup Log meudb to BKP_MEUDB_TRANLOG


    2) Efetuarmos o restore do último backup full realizado (7:00AM)

    Restore Database meudb From BKP_MEUDB With NoRecovery


    3) Efetuarmos o restore do primeiro backup transacional realizado (8:00AM)

    Restore Log meudb From BKP_MEUDB_TRANLOG With File = 1, NoRecovery


    4) Efetuarmos o restore do backup transacional que realizamos após a deleção dos dados, porém sem permitir que seja também restaurada a deleção.

    Restore Log meudb From BKP_MEUDB_TRANLOG With File = 2, Recovery, StopAt = 'Nov 28, 2008 08:45 AM'


    Assim determinamos que restaure somente até 5 minutos antes da deleção dos dados.

     

     

     

     

    Espero que isto tenha ajudado !

     

     

    SDS

    sexta-feira, 28 de novembro de 2008 14:08

Todas as Respostas

  • Lara,

    De uma olhada nesse script ai embaixo, caso não consiga, de uma olhada no books online do sql!!!

    -- Restore the database backup. 
    RESTORE DATABASE MyNwind FROM MyNwind_1 WITH NORECOVERY GO 

    -- Restore the first transaction log backup.
    RESTORE LOG MyNwind FROM MyNwind_log1 WITH NORECOVERY GO -- Restore the final transaction log backup. RESTORE LOG MyNwind FROM MyNwind_log2 WITH RECOVERY GO
    segunda-feira, 24 de novembro de 2008 13:33
  • Olá LaraC

     

    Vamos là

     

    Para conseguirmos o restore onde temos o backup full e depois aplicarmos o seu backup diferencial utilizamos esta sintaxe:


    --Repare na opção with noRecovery se estiver o Management Studio vá nas opções avançadas e selecione a opção.

     

    Restore Database meudb From Disk = 'c:\backup\meudb_full.bak' With NoRecovery
     
    --Agora é só restaurar o Backup diferencial.

    Restore Database meudb From Disk = 'c:\backup\meudb_diff.bak' With File = 2, Recovery
     
     
     
    SDS.
     
     
    segunda-feira, 24 de novembro de 2008 13:35
  •  

    Quanto à resposta do Diogo, no comando "RESTORE LOG MyNwind FROM MyNwind_log1 WITH NORECOVERY GO", onde eu coloco o nome do meu arquivo de backup transacional para restaurar.

     

    E quanto à resposta do Alexandre. Deu a seguinte mensagem de erro:

     

    Server: Msg 4038, Level 16, State 1, Line 1
    Cannot find file ID 2 on device 'c:\sistema\backup_transacional.bkp'.
    Server: Msg 3013, Level 16, State 1, Line 1
    RESTORE DATABASE is terminating abnormally.

     

     

    segunda-feira, 24 de novembro de 2008 13:56
  • Olá LaraC retire a opção file= 2 .

     

     

    SDS

     

     

    segunda-feira, 24 de novembro de 2008 13:59
  • Já havia feito isso e dá erro do mesmo jeito. O erro que dá é o seguinte:

     

    Server: Msg 3206, Level 16, State 1, Line 1
    No entry in sysdevices for backup device 'Recovery'. Update sysdevices and rerun statement.
    Server: Msg 3013, Level 16, State 1, Line 1
    RESTORE DATABASE is terminating abnormally.

     

    O comando ficou assim:

    Restore Database pubs From Disk = 'c:\sistema\backup_transacional.bkp',  Recovery

     

    segunda-feira, 24 de novembro de 2008 14:08
  • Larac você precisa saber quais são os log para retornar corretamente.

     

    No exemplo abaixo tem um full ou diferencial e seus logs.

     

    RESTORE DATABASE TESTE FROM DISK = 'C:\BACKUP\BKDIFF_TESTE.BAK' WITH NORECOVERY
    RESTORE LOG TESTE FROM DISK = 'C:\BACKUP\BKLOG_TESTE.BAK' WITH FILE = 1 , NORECOVERY
    RESTORE LOG TESTE FROM DISK = 'C:\BACKUP\BKLOG_TESTE.BAK' WITH FILE = 2 , NORECOVERY
    RESTORE LOG TESTE FROM DISK = 'C:\BACKUP\BKLOG_TESTE.BAK' WITH FILE = 3 , RECOVERY

     

    Antes de iniciar para ler o conteudo de cada backup pode usar:

     

    RESTORE HEADERONLY FROM DISK='C:\BACKUP\BKFULL_TESTE.BAK'
    RESTORE HEADERONLY FROM DISK='C:\BACKUP\BKDIFF_TESTE.BAK'
    RESTORE HEADERONLY FROM DISK='C:\BACKUP\BKLOG_TESTE.BAK'

    SDS

     

     

    segunda-feira, 24 de novembro de 2008 14:35
  • Vc está trabalhando com backup diferencial ou transacional? Por que eu só tenho dois backups: um full e um transacional?

     

    segunda-feira, 24 de novembro de 2008 14:45
  • Colegas, ainda estou com o problema do backup. Aguardo respostas.

     

    Grata!!!

    terça-feira, 25 de novembro de 2008 10:06
  • Olá Larac aqui está tudo o que precisa saber sobre backup e restore transacional:

     


    Backup de log transacional, minimiza as perdas em caso de necessidade de restaurarmos uma base de dados devido à algum problema com ela ou mesmo com o servidor, e para vamos utilizar os seguintes comandos:

    Restore Database meudb From disk 'c:\backup\meudb.bak' With NoRecovery
    Restore Log meudb From disk = 'c:\backup\meudb.trn' With File = 1, NoRecovery
    Restore Log meudb From disk = 'c:\backup\meudb.trn' With File = 2, Recovery



    Utilizando o comando acima, estamos restaurando o último backup full realizado e posteriormente aplicando 2 backups de log transacional que realizamos, tenham atenção quanto à opção NORECOVERY que visa garantir a indisponibilidade da base de dados durante o processo e também à opção FILE que tem por objetivo determinar até qual arquivo iremos efetuar o restore, lembrando sempre que NÃO é possível pularmos a sequência dos arquivos de log transacional.

    Imaginaremos a seguinte situação no dia 28/11/2008:
    Realizamos um backup full às 7:00AM e mais um backup transacional a cada 1 hora, porém às 8:50AM foi detectado que houve uma deleção de dados incorreta e como única alternativa, teríamos que restaurar a base de dados. Porém se restaurassemos o backup realizado às 7:00AM perderiamos uma quantidade de informações muito grande. Qual seria então a melhor solução para este problema, uma vez que temos a seguinte condição?

    7:00AM - Backup Full (Backup Database meudb to BKP_MEUDB With Init)
    8:00AM - Backup Transacional (Backup Log meudb to BKP_MEUDB_TRANLOG With Init)
    8:50AM - Deleção dos dados

    Para que pudessemos obter o melhor resultado, ou seja a menor perda de dados, teremos que agir da seguinte forma:

    1) Efetuarmos um backup transacional da situação atual.

    Backup Log meudb to BKP_MEUDB_TRANLOG


    2) Efetuarmos o restore do último backup full realizado (7:00AM)

    Restore Database meudb From BKP_MEUDB With NoRecovery


    3) Efetuarmos o restore do primeiro backup transacional realizado (8:00AM)

    Restore Log meudb From BKP_MEUDB_TRANLOG With File = 1, NoRecovery


    4) Efetuarmos o restore do backup transacional que realizamos após a deleção dos dados, porém sem permitir que seja também restaurada a deleção.

    Restore Log meudb From BKP_MEUDB_TRANLOG With File = 2, Recovery, StopAt = 'Nov 28, 2008 08:45 AM'


    Assim determinamos que restaure somente até 5 minutos antes da deleção dos dados.

     

     

     

     

    Espero que isto tenha ajudado !

     

     

    SDS

    sexta-feira, 28 de novembro de 2008 14:08