none
Erro ao restaurar Banco de Dados RRS feed

  • Pergunta

  • Olá!

    Meu cliente usa um sistema meu em apenas um computador. Agora ele comprou um computador novo e me pediu para que eu passasse o programa para o mesmo. Até aí tudo normal, sempre faço isso.

    Fui na máquina velha dele e fiz o backup. Instalei o Sql Server Management Studio Express 2005 e quando fui restaurar o backup deu essa mensagem de erro: 

    Já tentei restaurar pelo backup.bak, já tentei restaurar com os arquivos .mdf e .ldf, já li e tentei fazer algumas coisas que achei na internet e nada. 

    O engraçado é que no computador que o banco tá rodando tá tudo normal, o sistema tá funcionado normalmente.

    Obrigado!

    sexta-feira, 21 de junho de 2019 19:41

Todas as Respostas

  • fm.esteves,

    Vamos verificar a integridade deste arquivo de backup, para isso, execute os comandos Restore abaixo:

    Use Master
    
    --Retorna Informações sobre as mídias de backup --
    Restore LabelOnly from Disk = 'C:\Backup\Backup-Simples-SeuBackupDatabase.bak'
    
    --Retorna Informações sobre os backups --
    Restore HeaderOnly from Disk = 'C:\Backup\Backup-Simples-SeuBackupDatabase.bak'
    
    /* O comando RESTORE VERIFYONLY realiza uma checagem na integridade dos backups de um 
    dispositivo, verificando se o mesmo é legível, este comando não verifica a estrutura de 
    dados existente dentro do backup. Se o backup for válido, o SQL Server retorna uma mensagem 
    de sucesso.*/
    Restore VerifyOnly from Disk = 'C:\Backup\Backup-Simples-SeuBackupDatabase.bak'
    
    -- Retorna informações sobre os arquivos de dados e log (*.mdf, *.ndf e *.ldf) armazenados em um dispositivo --
    Restore FileListOnly from Disk = 'C:\Backup\Backup-Simples-SeuBackupDatabase.bak'
    Substitua os dados referentes ao local de armazenamento do seu arquivo de backup e o nome do arquivo de backup.

    Por gentileza, post o resultado da execução do comando Restore HeaderOnly e Restore VerifyOnly.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 21 de junho de 2019 22:41
    Moderador
  • Antes de mais nada, muito obrigado por tentar me ajudar.

    Segue o resultado dos comandos executados:


    (1 row(s) affected)

    (1 row(s) affected)
    Attempting to restore this backup may encounter storage space problems. Subsequent messages will provide details.
    Directory lookup for the file "c:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Leondre.mdf" failed with the operating system error 3(O sistema não pode encontrar o caminho especificado.).
    Directory lookup for the file "c:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Leondre_log.LDF" failed with the operating system error 3(O sistema não pode encontrar o caminho especificado.).
    The backup set on file 1 is valid.

    (2 row(s) affected)

    sábado, 22 de junho de 2019 00:38
  • fm.esteves,

    Obrigado pelo retorno, ótimo os resultados estão mostrando que a estrutura do arquivo de backup esta legível e integra.

    Na verdade tomando como base a mensagem que você esta apresentando, o problema esta relacionado ao local de armazenamento dos arquivos de dados e log justamente utilizados pelo comando Restore, provavelmente este caminho c:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ era utilizado na outra máquina, mas na nova ele deve não existir ou estar diferente.

    Observe a mensagem: O sistema não pode encontrar o caminho especificado.

    Sendo assim, podemos utilizar em conjunto como o comando Restore Database a opção With Move, para informar o novo local de armazenamento.

    Veja o exemplo abaixo:

    RESTORE DATABASE AES2 
    FROM DISK = 'C:\SQL\Backup-FileGroup-Primary-AES.Bak'    
    WITH RECOVERY, 
    REPLACE,    
    STATS=10,
    Move 'AES_Dados' To 'C:\SQL\AES2_Dados.mdf',
    Move 'AES_Dados1' To 'C:\SQL\AES2_Dados1.ndf',
    Move 'AES_Secundario_Dados' To 'C:\SQL\AES2_Secundario_Dados.mdf',
    Move 'AES_Secundario_Dados1' To 'C:\SQL\AES2_Secundario_Dados1.ndf',
    Move 'AES_Log' To 'C:\SQL\AES2_Log.ldf'
    Go

    Observe que estou realizando a restauração de quatro arquivos de dados e um arquivo de log, informando o respectivo nome do arquivo e através da instrução To '' especificando o novo local de armazenamento.

    Veja se este exemplo de código adaptado ao seu cenário, poderá lhe ajudar:

    Restore Database Leondre
    From Disk = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Leondre.bak'
    With Recovery, 
         Replace, 
         Status=10,
         Move 'Leondre' To 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\leondre.mdf',
         Move 'Leondre_log' To 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\leondre_log.ldf',
    Go

    Certifique-se que o caminho esta correto, bem como, os nomes dos arquivos.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Sugerido como Resposta IgorFKModerator segunda-feira, 24 de junho de 2019 13:28
    sábado, 22 de junho de 2019 13:23
    Moderador
  • Bom dia! Novamente obrigado!

    Fiz o que você disse e deu essa mensagem abaixo:

    12 por cento processado(s).
    22 por cento processado(s).
    32 por cento processado(s).
    42 por cento processado(s).
    52 por cento processado(s).
    62 por cento processado(s).
    72 por cento processado(s).
    82 por cento processado(s).
    92 por cento processado(s).
    100 por cento processado(s).
    Processadas 320 páginas para o banco de dados 'Leondre', arquivo 'Leondre' no arquivo 1.
    Processadas 1 páginas para o banco de dados 'Leondre', arquivo 'Leondre_log' no arquivo 1.
    Msg 3167, Level 16, State 1, Line 1
    RESTORE não pôde iniciar o banco de dados 'Leondre'.
    Msg 3013, Level 16, State 1, Line 1
    RESTORE DATABASE está sendo encerrado de forma anormal.
    Msg 824, Level 24, State 2, Line 1
    O SQL Server detectou um erro de E/S baseado em consistência lógica: soma de verificação incorreta (esperada: 0xdc144314; real: 0xdc144494). Isso ocorreu durante um ler da página (1:70) na ID de banco de dados '5' do deslocamento 0x0000000008c000 do arquivo 'C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\Data\leondre.mdf'. Mensagens adicionais do log de erros ou do log de eventos do sistema do SQL Server poderão fornecer mais detalhes. Este é um erro grave que ameaça a integridade do banco de dados e deve ser corrigido imediatamente. Faça uma verificação completa da consistência do banco de dados (DBCC CHECKDB). Este erro pode ter sido causado por vários fatores. Para obter mais informações, consulte os manuais online do SQL Server.

    Tem como resolver isso?

    segunda-feira, 24 de junho de 2019 14:55
  • fm.esteves,

    Sim. Podemos, através do comando DBCC CheckDB tentar verificar e corrigir esta falha, mas saiba que corremos o risco de ter alguma perda de dados.

    Tente executar este comando em um query através do Management Studio:

    USE MASTER
    Go
    
    DBCC CheckDB(Leondre, REPAIR_ALLOW_DATA_LOSS)
    Go

    Repito, esta opção REPAIR_ALLOW_DATA_LOSS vai fazer com o que o SQL Server tente recuperar o banco de dados, mas poderá apresentar possíveis risco que representem perda de dados.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 24 de junho de 2019 16:41
    Moderador
  • Deu esse erro:

    Msg 945, Level 14, State 2, Line 2
    O banco de dados 'Leondre' não pode ser aberto devido a arquivos inacessíveis ou memória ou espaço em disco insuficiente. Consulte o errorlog do SQL Server para obter detalhes.

    Eu tenho que fazer esse comando na máquina do cliente? no banco do cliente?

    Estou fazendo na minha máquina.

    segunda-feira, 24 de junho de 2019 17:05
  • fm.esteves,

    Uma pergunta, a unidade de disco que você esta tentando restaurar este banco de dados, tem quanto de espaço livre?

    Qual é o tamanho do banco de dados e o tamanho do arquivo de backup?

    Você deve rodar este comando na máquina em que atualmente o banco de dados se encontra em uso e funcionando normalmente.

    Você verificou se mesmo com a mensagem de erro apresentada pelo comando Restore, o banco de dados foi criado nesta nova máquina?

    Existe a possibilidade de criar um novo arquivo de backup?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    segunda-feira, 24 de junho de 2019 17:10
    Moderador
  • O HD tem 488Gb de espaço livre.

    O backup do banco tem apenas 2.641Kb e o banco em si eu não lembro, mas mais ou menos o mesmo tamanho.

    Tô com medo de rodar esse comando na máquina do cliente, pois lá tá funcionando normalmente.

    O banco foi criado sim, com os arquivos .ldf e .mdf ... mas no management studio, ele aparece mas não abre nada.

    Existe a possibilidade sim, mas não agora nem hoje. Mas eu já havia feito outros e todos deram o mesmo erro ao tentar efetuar a restauração.

    segunda-feira, 24 de junho de 2019 17:33
  • fm.esteves,

    Ok, então, poxa vida, um banco de dados tão pequeno, deixa quieto a execução do DBCC CheckDB.

    Vamos fazer o seguinte, se você esta se referindo a um banco de dados de 2MBs, vamos fazer uso da ferramenta Generate Script existente dentro do Management Studio, através dela vamos poder gerar um script com toda estrutura do banco de dados, incluíndo tabelas, índices e dados.

    O que você acha?

    Depois basta na nova máquina rodar este script e pronto, você terá este mesmo banco de dados criado.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 24 de junho de 2019 17:38
    Moderador
  • Gerar o script tudo bem, isso eu sempre faço também. Mas e os dados cadastrados no banco, o que eu faço?
    segunda-feira, 24 de junho de 2019 17:51
  • fm.esteves,

    Gera script deles também.

    Dentro do Generate Script, você tem a opção de escolher a geração dos scripts contendo os dados.

    Acesse este link da documentação official Microsoft: https://docs.microsoft.com/pt-br/sql/ssms/scripting/generate-and-publish-scripts-wizard?view=sql-server-2017

    Você pode fazer esta geração do script de dados no final do expediente e depois restaurar na nova base.

    O segredo para gerar o script de dados é justamente esta parte:

    Página Opções de Script Avançadas

    Use essa página para especificar como você deseja que esse assistente gere scripts. Muitas opções diferentes estão disponíveis. As opções ficarão acinzentadas se não tiverem suporte da versão do SQL Server ou do Banco de Dados SQL especificado no Tipo de mecanismo de banco de dados.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Sugerido como Resposta IgorFKModerator segunda-feira, 24 de junho de 2019 20:42
    segunda-feira, 24 de junho de 2019 18:32
    Moderador
  • Meu cliente usa um sistema meu em apenas um computador. Agora ele comprou um computador novo e me pediu para que eu passasse o programa para o mesmo. Até aí tudo normal, sempre faço isso.

    Fui na máquina velha dele e fiz o backup. Instalei o Sql Server Management Studio Express 2005 e quando fui restaurar o backup deu essa mensagem de erro: 

    Já tentei restaurar pelo backup.bak, já tentei restaurar com os arquivos .mdf e .ldf, já li e tentei fazer algumas coisas que achei na internet e nada.

    "fm.esteves", qual é a versão e nível de atualização do SQL Server na "máquina velha"? Use o seguinte comando para obter essa informação:

         PRINT @@version

    E no computador novo, qual é a versão e nível de atualização do SQL Server?

    Em tempo "Sql Server Management Studio Express 2005" não é a mesma coisa que SQL Server; o Management Studio é somente um programa de interface com bancos de dados.

    ---

    Sobre "já tentei restaurar com os arquivos .mdf e .ldf", essa abordagem somente é confiável de realizar quando se para o serviço na "máquina velha", antes de fazer cópia desses arquivos. Assim tem-se certeza de que os arquivos mdf e ldf podem ser copiados. É que se eles foram copiados na "máquina velha" com o serviço SQL Server ativo, os arquivos podem estar inconsistentes, por causa de buffers de memória que ainda não tenham sido gravados (flushed).

    ---

    Como você fez o backup (isto é, gerou o arquivo backup.bak) na "máquina velha"?

    ---


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz terça-feira, 25 de junho de 2019 12:57
    terça-feira, 25 de junho de 2019 11:42
  • Pedro, muito obrigado por tentar me ajudar, mas eu não consegui gerar esse script que você sugeriu.
    sexta-feira, 28 de junho de 2019 18:58
  • fm.esteves,

    Certo, mas qual foi o problema?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 28 de junho de 2019 18:59
    Moderador
  • José Diniz, as duas máquinas estão com a mesma versão, que é:

    Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    Nov 24 2008 13:01:59 
    Copyright (c) 1988-2005 Microsoft Corporation
    Express Edition on Windows NT 6.2 (Build 9200: )

    ----------

    Quando copiei os arquivos .mdf .ldf não parei o serviço, pois não sabia que funcionava do jeito que você falou. Vou tentar fazer da maneira correta agora.

    ----------

    Fiz os backups de duas maneiras, pelo meu sistema e diretamente pelo Sql Server Management Studio Express.

    sexta-feira, 28 de junho de 2019 19:32
  • fm.esteves,

    Sim, pare os serviços, realize o processo de cópia e depois reinicie o serviços do SQL Server.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 28 de junho de 2019 19:40
    Moderador
  • José Diniz, as duas máquinas estão com a mesma versão, que é:

    Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    Nov 24 2008 13:01:59 
    Copyright (c) 1988-2005 Microsoft Corporation
    Express Edition on Windows NT 6.2 (Build 9200: )

    Ok.

    É fundamental que o build number do SQL Server do computador de destino seja igual ou mais recente do que o respectivo valor no SQL Server do computador de origem. Por exemplo, se no computador de origem o build number é 9.00.4035.00, então no computador de destino deve ser o mesmo valor ou maior (mais recente).

     

    Quando copiei os arquivos .mdf .ldf não parei o serviço, pois não sabia que funcionava do jeito que você falou. Vou tentar fazer da maneira correta agora.

    Ok.

    Estando com os serviços SQL Server parados no computador de origem, o processo de copiar os arquivos direto pelo sistema operacional torna-se confiável. Atento que no computador de destino você deve utilizar o "anexar" (ou attach).  Não deve existir banco de dados com o nome do que será anexado.


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz domingo, 30 de junho de 2019 22:00
    • Sugerido como Resposta José Diz domingo, 21 de julho de 2019 12:16
    domingo, 30 de junho de 2019 21:57
  • fm.esteves,

    Vou somente complementar a resposta do José Diz, mas este complemento não necessariamente se relaciona ao seu caso.

    Existem também cenário em que não somente a versão do build number do SQL Server deve ser igual, mas também o build number do próprio Management Studio, o qual começou a apresentar versões de build a partir do SQL Server 2008, cenário que mudou mais ainda a partir de 2016 quando o Management Studio se tornou um produto independente do SQL Server.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 1 de julho de 2019 12:29
    Moderador