none
MDF e NDF corrompidos RRS feed

  • Pergunta

  • Boa tarde

    Devido a uma falha na storage de minha empresa, acabamos perdendo um banco de dados, não temos o backup, com muito esforço, conseguimos recuperar os arquivos desse banco (MDF,NDF,LDF), ao tentar atachar esses bancos, um erro é informado, enfim, sabemos que os arquivos MDF e NDF estão corrompidos, porem conseguimos abrir a base através de uma ferramenta secundaria (http://www.kerneldatarecovery.com/sql-recovery.html)

    procurando soluções na Internet encontramos algumas formas de verificar se o arquivo estava realmente corrompido, verificamos que o cabeçalho do banco nem existia em ambos arquivos (NDF e MDF).

    Gostaria de saber se é possível exibir esses dados do banco através do SQL de alguma forma.

    Tentei:

    • criar um banco novo
    • Colocar o banco em modo emergency
    • parar o serviço do sql
    • substituir o banco novo pelo que esta corrompido
    • subi o serviço do SQL

    até ai beleza, porem ao tentar colocar a base em modo multi user, o erro abaixo é apresentado:

    Msg 824, Level 24, State 6, Line 1
    SQL Server detected a logical consistency-based I/O error: torn page (expected signature: 0x55555555; actual signature: 0xc14fc6c1). It occurred during a read of page (1:0) in database ID 7 at offset 0000000000000000 in file 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DB_GRAFICA_AL_P.mdf'.  Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

    Alguém ai já conseguiu subir uma base mesmo com o dado corrompido? 

    é possível rodar um "chkdsk" no arquivo para que ele possa ser reconstruído? 

    DBCC com DATA_LOSS não funcionou.

    Desde já obrigado. 

     

    quarta-feira, 14 de maio de 2014 15:38

Respostas

  • Douglas,

    Reparei na mensagem de erro que ele aponta um corrompimento no arquivo de dados (mdf). Este cenário é extremamente complicado, se a corrupção fosse apenas no LOG você poderia tentar outras manobras fora as que listou. O mais indicado seria restaurar o ultimo backup, suponhamos que você abra o arquivo da base em alguma ferramenta para editar as páginas, talvez você gaste um tempo e esforço enorme e continue na mesma situação, além disso, se sua base volta, você teria "buracos" nos dados.


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    segunda-feira, 19 de maio de 2014 02:34

Todas as Respostas

  • Boa tarde... Esta com problema bem complexo.

    Tenta esses troubleshotting aqui talvez...

    http://dba.stackexchange.com/questions/12089/attaching-mdf-without-ldf

    http://www.mssqltips.com/sqlservertip/2871/troubleshooting-and-fixing-sql-server-page-level-corruption/

    http://social.msdn.microsoft.com/Forums/sqlserver/en-US/b1c57e15-5e82-4747-a7cd-3ff3f6bb29a0/an-inconsistency-was-detected-during-an-internal-operation

    Espero ter ajudado.

    Se útil, por favor classifique.


    João Carlos Xavier de Macedo Specialist Platforms Microsoft MCP,MCT,MCSA,MCTS,MCITP, ENTERPRISE VIRTUALIZATION WINDOWS SERVER 2008 R2,MCSE WINDOWS SERVER 2012

    quarta-feira, 14 de maio de 2014 20:07
  • Douglas,

    Reparei na mensagem de erro que ele aponta um corrompimento no arquivo de dados (mdf). Este cenário é extremamente complicado, se a corrupção fosse apenas no LOG você poderia tentar outras manobras fora as que listou. O mais indicado seria restaurar o ultimo backup, suponhamos que você abra o arquivo da base em alguma ferramenta para editar as páginas, talvez você gaste um tempo e esforço enorme e continue na mesma situação, além disso, se sua base volta, você teria "buracos" nos dados.


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    segunda-feira, 19 de maio de 2014 02:34
  • Tente:

    EXEC sp_resetstatus 'Nome do Banco'
    
    ALTER DATABASE Nome do Banco SET EMERGENCY
    
    DBCC checkdb('Nome do Banco')
    
    ALTER DATABASE Nome do Banco SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    
    DBCC CheckDB ('Nome do Banco', REPAIR_ALLOW_DATA_LOSS)
    
    ALTER DATABASE Nome do Banco SET MULTI_USER


    Mais conforme informado abaixo acredito que a melhor solução seja restore do ultimo backup

    terça-feira, 20 de maio de 2014 19:33
  • Tente:

    EXEC sp_resetstatus 'Nome do Banco'
    
    ALTER DATABASE Nome do Banco SET EMERGENCY
    
    DBCC checkdb('Nome do Banco')
    
    ALTER DATABASE Nome do Banco SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    
    DBCC CheckDB ('Nome do Banco', REPAIR_ALLOW_DATA_LOSS)
    
    ALTER DATABASE Nome do Banco SET MULTI_USER


    Mais conforme informado abaixo acredito que a melhor solução seja restore do ultimo backup


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]


    quarta-feira, 21 de maio de 2014 12:45
    Moderador
  • Douglas, 

    Minhas sugestão é que você tente adquirir ferramentas da suíte do AppexSQL, RedGate ou Idera, para tentar fazer o processo de recuperação e reconstrução do seu arquivo de dados.

    Após isso fazer o anexo do mesmo, gerar um backup e posteriormente configurar uma estratégia de backup diário deste banco.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 21 de maio de 2014 12:47
    Moderador
  • Douglas,

    Lendo com mais calma a mensagem de erro, acho que temos uma possível solução.

    Não coloque o banco de dados em Multiuser, podemos tentar fazer uma verificação das páginas de dados que compõem o seu banco fazendo uso do comando DBCC CheckDB e também do comando DBCC CheckAlloc, tente desta forma:

    -- Check the SeuBanco database.
    DBCC CHECKCATALOG (SeuBanco);
    GO

    Agora se você conseguir acessar a sua base de dados, da forma que esta neste momento, uma solução mais chata seria fazer o Export de toda estrutura para outro banco!!!

    Para saber mais sobre o comando DBCC CheckAlloc, acesse: http://msdn.microsoft.com/pt-br/library/ms188422.aspx


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]


    quarta-feira, 21 de maio de 2014 12:52
    Moderador
  • Boa tarde

    Devido a uma falha na storage de minha empresa, acabamos perdendo um banco de dados, não temos o backup, com muito esforço, conseguimos recuperar os arquivos desse banco (MDF,NDF,LDF), ao tentar atachar esses bancos, um erro é informado, enfim, sabemos que os arquivos MDF e NDF estão corrompidos, porem conseguimos abrir a base através de uma ferramenta secundaria (http://www.kerneldatarecovery.com/sql-recovery.html)

    procurando soluções na Internet encontramos algumas formas de verificar se o arquivo estava realmente corrompido, verificamos que o cabeçalho do banco nem existia em ambos arquivos (NDF e MDF).

    Gostaria de saber se é possível exibir esses dados do banco através do SQL de alguma forma.

    Tentei:

    • criar um banco novo
    • Colocar o banco em modo emergency
    • parar o serviço do sql
    • substituir o banco novo pelo que esta corrompido
    • subi o serviço do SQL

    até ai beleza, porem ao tentar colocar a base em modo multi user, o erro abaixo é apresentado:

    Msg 824, Level 24, State 6, Line 1
    SQL Server detected a logical consistency-based I/O error: torn page (expected signature: 0x55555555; actual signature: 0xc14fc6c1). It occurred during a read of page (1:0) in database ID 7 at offset 0000000000000000 in file 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DB_GRAFICA_AL_P.mdf'.  Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

    Alguém ai já conseguiu subir uma base mesmo com o dado corrompido? 

    é possível rodar um "chkdsk" no arquivo para que ele possa ser reconstruído? 

    DBCC com DATA_LOSS não funcionou.

    Desde já obrigado. 

     

    Douglas,

    Não rode o Chkdsk, neste momento ele poderá atrapalhar a reconstrução do arquivo, vamos tentar utilizar as ferramentas do SQL Server.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 21 de maio de 2014 12:54
    Moderador