none
Base corrompida RRS feed

  • Pergunta

  • Olá,

    Estou com uma base sql corrompida, alguém conhece alguma ferramenta para recuperar esse tipo de falha?

    Me indicaram "Recovery for SQL Server" (http://www.officerecovery.com/mssql/index.htm) na versão demo do software ele conseguiu recuperar totalmente a estrutura do banco, mas nenhum dado.

    Alguém conhece a ferramenta ou sabe indicar alguma outra que possa recuperar os dados?

    Obrigado,
    Alexandre previatti
    sábado, 15 de março de 2008 12:49

Respostas

  • Uffffaa

    consegui restaurar...

    Obrigado a todos que me ajudaram, depois de muita briga com o SQL consegui recuperar o banco...

    os seguintes passos foram feitos:

    ALTER DATABASE afil SET EMERGENCY;

    DBCC CHECKDB (afil, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;

    sp_configure 'allow updates',1
    reconfigure with override

    DBCC CHECKDB (afil, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;

    sp_dboption 'afil','single_user', false

    sp_dboption 'afil', 'dbo use only', true

    sp_configure 'allow updates',0
    reconfigure with override

    ALTER DATABASE afil SET MULTI_USER WITH ROLLBACK IMMEDIATE
    segunda-feira, 17 de março de 2008 23:03

Todas as Respostas

  • Olá Alexandre, existe um outro software que se chama "Kernel SQL Recovery", porém, vale reforçar que infelizmente nehuma ferramenta no mundo pode garantir que seus dados sejam recuperados de forma integra e na sua totalidade, ou seja, 100% restauração.

     

    O ideal é sempre possuir um backup full da base de dados e juntamente com backups diferenciais e/ou de logs restabelecer o database o mais próximo do ponto de falha.

     

    Me explica aí, o que vc já tentou fazer para recuperar, já tentou reatacha-lo?

    segunda-feira, 17 de março de 2008 12:10
  • Olá Emanuel,

    Obrigado pela informação.

    Vou explicar a situação...

    Temos um servidor que possui dois softwares de terceiros, um desses softwares foi atualizado e durante o processo de atualização gerou um erro e corrompeu tudo q tinha SQL Server no Servidor.

    Um responsável pelo software acessou o servidor e em vez de tentar recuperar o banco restaurou um backup que eles tinham de 20 dias atraz. Ai perguntamos se eles não tinham um backup mais recente, eles falaram q não, que a responsabilidade pelo backup do software deles, que eles são pagos pra dar manutenção, não é deles.

    Agora estou com um arquivo .mdf e um .ldf e não consigo atachar no sql.

    Obrigado,
    Alexandre Previatti
    segunda-feira, 17 de março de 2008 12:46
  •  

    Alexandré, se houve um restore de um backup de 20 dias em um database de produção, os dados foram sobrepostos e só podem ser recuperados se existiir um backup mais recente.Porém, como vc informa que está com arquivos MDF e LDF mais recentes e não consegue reatacha-los, pergunto:

     

    Quando vc executa via query analyze:

    exec sp_attach_db 'nome_database','caminho arquivo *.mdf','caminho_arquivo *.ldf'

     

    é apresentado algum erro? qual?

     

     

    segunda-feira, 17 de março de 2008 13:12
  • Respondendo sua pergunta. Sim tenho os arquviso mdf e ldf corrompidos, consgui copiar esses arquivos antes do "super tecnico" restaurar o backup

    exec sp_attach_db 'restaurar','d:\corrompido\corr.mdf','d:\corrompido\corr.ldf'

    Msg 1813, Level 16, State 2, Line 1
    Could not open new database 'restaurar'. CREATE DATABASE is aborted.
    Msg 3456, Level 21, State 1, Line 1
    Could not redo log record (10220:323:10), for transaction ID (0:1435348), on page (1:57896), database 'restaurar' (database ID 11). Page: LSN = (10203:318:10), type = 2. Log: OpCode = 2, context 3, PrevPageLSN: (10219:469:10). Restore from a backup of the database, or repair the database.
    Msg 3313, Level 21, State 2, Line 1
    During redoing of a logged operation in database 'restaurar', an error occurred at log record ID (10220:323:10). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.

    Event Logs:

    Could not redo log record (10220:323:10), for transaction ID (0:1435348), on page (1:57896), database 'restaurar' (database ID 11). Page: LSN = (10203:318:10), type = 2. Log: OpCode = 2, context 3, PrevPageLSN: (10219:469:10). Restore from a backup of the database, or repair the database.


    During redoing of a logged operation in database 'restaurar', an error occurred at log record ID (10220:323:10). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.
    segunda-feira, 17 de março de 2008 13:23
  • Alexandre, tente restaurar usando somente o arquivo de dados, sem o log.

    EXEC  sp_attach_single_file_db  @dbname = 'database_name',
        @physname = 'caminho do *.mdf'

    caso vc não consiga, existe uma outra alternativa.
    segunda-feira, 17 de março de 2008 13:32
  • Alexandre,

     

    Mas qual é o status desta base, que o SQL Server esta apresentando?

    segunda-feira, 17 de março de 2008 13:40
    Moderador
  • Olá Emanoel,

    Apresentou o mesmo erro..

    Junior,
    O Status é "suspect", ou melhor, era, pq já restauraram um backup...

    []'s
    Previatti
    segunda-feira, 17 de março de 2008 17:25
  •  

    Junior, pelo que o alexandre relatou foi feito um restore do database na posição de 20 dias atrás, só pra resolver o problema do suspect. Mas o alexandre informou que existe uma cópia do mdf e ldf da posição antes do restore porém o arquivo está corrompido.

     

    Alexandre, existe um outro procedimeto, que vc pode fazer.

     

    Siga as instruções:

     

    1 - crie um database novo, e defina o local para os arquivos de data e log.

    2 - pare o sql

    3 - substitua os arquivos mdf e ldf  do novo database pelos que vc tem e que estáva com status de suspect.

    esse procedimento irá leva-lo a mesma posição que estáva(em suspect), o problema todo é porque vc não está conseguindo atachar os arquivos pois, o SQL faz uma validação antes. vc fazendo isso que estou lhe dizendo irá forçar o SQL iniciar os arquivos e colocalos em Suspect.

    4 - inicie o SQL server. Note que o database deve estar com o status de suspect.

    5 - agora vc deve realizar um dbcc checkdb.

    para isso, siga os passos:

     

    sp_dboption corpore ,'single use', true  --colocar o databasse como single use

    dbcc checkdb(corpore,'REPAIR_REBUILD') --tenta reparar sem perder dados.

    sp_dboption corpore ,'single use', false

     

    caso o status ainda esteja como suspect, vc deve forcar com o comando(REPAIR_ALLOW_DATA_LOSS) que pode fazer com que vc os dados corrompidos sejam perdidos.

     

     

    sp_dboption corpore ,'single use', true  --colocar o databasse como single use

    dbcc checkdb(corpore,'REPAIR_REPAIR_ALLOW_DATA_LOSS') --tenta reparar sem perder dados.

    sp_dboption corpore ,'single use', false

     

    Verifica se isso resolve, caso contrário teremos que encontrar outras alternativas para forçar o database mudar o status de suspect.

     

    Veja bem existem outras formas de tentar mudar o status do teu database, mas lembrese deque existem erros e a forma de vc tentar restabelecer é realizando uma checagem de no database.

     

    TAMBÉM RECOMENDO A VC A PRESERVAR OS *.MDF E *.LDF, antes de realizar esse procedimento que lhe falei.

    Realize tais procedimento com uma cópias dos arquivos.

    segunda-feira, 17 de março de 2008 17:56
  • É infelizmente não funcionou...

    ao executar o comando
    sp_dboption corpore ,'single use', true

    é gerado o erro:
    Msg 926, Level 14, State 1, Line 1
    Database 'afil' cannot be opened. It has been marked SUSPECT by recovery. See the SQL Server errorlog for more information.
    Msg 5069, Level 16, State 1, Line 1
    ALTER DATABASE statement failed.
    sp_dboption command failed.
    Msg 3456, Level 21, State 1, Line 1
    Could not redo log record (10220:323:10), for transaction ID (0:1435348), on page (1:57896), database 'afil' (database ID 11). Page: LSN = (10203:318:10), type = 2. Log: OpCode = 2, context 3, PrevPageLSN: (10219:469:10). Restore from a backup of the database, or repair the database.
    Msg 3313, Level 21, State 2, Line 1
    During redoing of a logged operation in database 'afil', an error occurred at log record ID (10220:323:10). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.
    Msg 3414, Level 21, State 1, Line 1
    An error occurred during recovery, preventing the database 'afil' (database ID 11) from restarting. Diagnose the recovery errors and fix them, or restore from a known good backup. If errors are not corrected or expected, contact Technical Support.

    segunda-feira, 17 de março de 2008 20:12
  • Previatti,

     

    Veja se este código de exemplo ajuda:

     

    Code Snippet

    Faça o seguinte:

    1 - Conecta-se ao SQL Server no banco Master.

     

    2  - Execute este scritp:

    sp_configure 'allow updates',1
    reconfigure with override

     

    3 - Depois execute este outro script:

    Update sysdatabases set status =32768 where name ='SeuBanco'

     

    4 - Após mudar o status do banco para Emergency Mode, é necessário reconstruir o log de transações, utilize o DBCC rebuild_log:

    Dbcc Rebuild_log ('NomedoSeuBanco','CaminhodoseuArquivodeLog')

     

    5 - Agora para finalizar a recuperação do banco, é necessário realizar os seguintes procedimento para recuperação de dados corrompidos e também para verificar a integridade dos dados comprometidos.

    Use SeuBanco
    go

    sp_dboption 'SeuBanco', 'dbo use only', false
    go

    sp_dboption 'SeuBanco','single_user', true
    go

    dbcc checkdb ('SeuBanco',repair_allow_data_loss)
    go

     

    6 - Após realizar este procedimento o seu banco já deverá esta em estado normal, agora é necessário voltar a forma de acesso ao banco para multiuso:

    Use SeuBanco
    go

    sp_dboption 'SeuBanco','single_user', false
    go

    sp_dboption 'SeuBanco', 'dbo use only', true
    go


    7 - Agora, vamos bloquear a permissão de alteração as table de sistema, faça o seguinte:

    sp_configure 'allow updates',0
    reconfigure with override

     

     


     

    segunda-feira, 17 de março de 2008 20:21
    Moderador
  • Olá Junior,

    Não funcionou.. já tinha visto um tópico no fórum com esse post, mas tem comandos ai q não funcionam no sql 2005 só no 2000

    ex.: Update sysdatabases set status =32768 where name ='SeuBanco'

    gera um erro:
    Ad hoc updates to system catalogs are not allowed.
    segunda-feira, 17 de março de 2008 20:28
  •  

    Previatti, é recomendável que vc primeiramente tente alterar o status de suspect usando o comando sp_resetstatus. caso não funcione aí, vc partiria para alterar o status na tabela sysdatabase.

     

    sintaxe do comando:

    exec sp_resetstatus database_name

     

     

    segunda-feira, 17 de março de 2008 20:31
  • Olá,

    executei o comando, acho até que já havia feito isso, a mensagem:

    The suspect flag on the database "afil" is already reset.

    Porém continua como "suspect"

    ta começando a ficar dificil...

    []'s
    Previatti
    segunda-feira, 17 de março de 2008 20:51
  • sobre a mensagem anterior qnd gerar o erro:
    Ad hoc updates to system catalogs are not allowed.

    como consigo contornar isso?
    segunda-feira, 17 de março de 2008 20:52
  • Tenta usar o seguinte:

     

    DBCC REBUILD_LOG(afil,'CAMINHO DO ARQUIVO *.ldf’

     

    depois de tentar refazer o arquivo de log, tenta colocar o database em single use novamente e depois executar o DBCC CHECKDB com 'REPAIR_ALLOW_DATA_LOSS'

    segunda-feira, 17 de março de 2008 21:27
  • Uffffaa

    consegui restaurar...

    Obrigado a todos que me ajudaram, depois de muita briga com o SQL consegui recuperar o banco...

    os seguintes passos foram feitos:

    ALTER DATABASE afil SET EMERGENCY;

    DBCC CHECKDB (afil, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;

    sp_configure 'allow updates',1
    reconfigure with override

    DBCC CHECKDB (afil, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;

    sp_dboption 'afil','single_user', false

    sp_dboption 'afil', 'dbo use only', true

    sp_configure 'allow updates',0
    reconfigure with override

    ALTER DATABASE afil SET MULTI_USER WITH ROLLBACK IMMEDIATE
    segunda-feira, 17 de março de 2008 23:03
  • Olá Manuel,

    Sobre o Software "Kernel SQL Recovery" chegamos até a compra-lo hoje, ele realmente é muito bom, mas não conseguiu recuperar todos os dados.

    []'s

    Previatti
    segunda-feira, 17 de março de 2008 23:06
  • Previatti, estou com o mesmo problema, baixei o aplicativo q vc baixou "Sql Recover for MSSQL", mas como vc conseguiu ver se ele recuperou todos os dados se a versão Demo recupera apenas parte dos dados?? ou tu comprou a licensa?? gostaria q vc tambem me ajudasse a resolver esse problema.

    terça-feira, 18 de março de 2008 00:59
  • Previatti por favor me ajuda!!!! como vc conseguiu??? tentei fazer a mesma coisa q vc fez mas deu errado! vc executa aquela função com a base de dados em "Suspect" ou nao??

    Parece esse erro:

    Server: Msg 102, Level 15, State 6, Line 1
    Incorrect syntax near 'EMERGENCY'.

     

    Por favor, aguardo respostas.

    terça-feira, 18 de março de 2008 01:08
  • Olá Akiles,

    Vamos por partes...
    Qual a versão do teu SQL?

    Executa o comando abaixo e posta o resultado:
    SELECT state_desc FROM sys.databases WHERE name='BASEDEDADOS';


    []'s
    Previatti
    terça-feira, 18 de março de 2008 12:41
  • Seguinte, tenho um servidor de MU (Jogo RPG Online), e ontem pela manha o server reiniciou, e nao entrava o windows mais, coloquei o HD em outro PC e percebi que tinha perdido as partições do HD, e junto com a partição perdi o backup da semana, tenho apenas os Arquivos MDF e LDF, baixei o mesmo programa q vc, Kernel Recovery for SQL e recuperou tudo!! inclusive os dados perfeitamente, mas na hora de salvar percebi q a versão demo nao salva. resumindo tenho mais de 1000 contas na minha base de dados e 500 contas vip q podem ser perdidas e eu corro o risco de ter q devolver 500,00 reais aos usuarios VIP desse mes.

     

    Meu SQL é MSSQL 2000, executei o codigo q vc me pediu no Query Analyzer e deu o seguinte resultado.

     

    Server: Msg 208, Level 16, Stat 1, Line 1

    Invalid object name 'sys.databases'.

     

    me adiciona no msn

    rodrigoalvesnet@gmail.com

     

    aguardo respostas, e agradeço a atenção.

    terça-feira, 18 de março de 2008 13:30
  • Akiles,

    você já tentou executar os procedimentos ifnormados pelo Emanuel e pelo Junior?
    terça-feira, 18 de março de 2008 14:15
  •  

    Akiles, se vc possui os arquivos *.mdf e *.ldf e eles estão intactos, o caso é diferente do que foi resolvido aqui.

    tivemos que simular a criação de um novo database e sobreposição dos arquivos MDF e ldf (originais e corrompidos) para que o SQL pudesse considerar o database que estava corrompido, depois tivemos foi feita a alteração para um status que podesse permitir a execução do DBCC CHECKDB.

     

    no seu caso pode ser mais simples, vc já tentou somente reatacha-lo?

     

    exec sp_attach_db nome_database,'local do carquivo *.mdf', 'local do carquivo *.ldf'

     

     

    terça-feira, 18 de março de 2008 16:37
  •  

    Acabei de tentar, mas da um erro assim:

     

    The header for file 'd:\muserver\db\MuOnline_Log1.ldf' is not a valid database file header. The PageAudit property is incorrect.

     tem ideia do q seja isso??
    terça-feira, 18 de março de 2008 19:13
  • O arquivo de transação(*.ldf) deve estar corrompido, tente reatachar seu banco se utiliza-lo

     

    Tente:

    EXEC  sp_attach_single_file_db  @dbname = 'database_name',
        @physname = 'caminho do *.mdf'

    terça-feira, 18 de março de 2008 19:22
  • Tentei, mas da o seguinte erro:

     

    Server: Msg 5180, Level 22, State 1, Line 1

    Could not open FCB for invalid ID 16385 in database 'MuOnline'.

     

    Connection Broken

     

    Sabe me dizer o q é isso???

    terça-feira, 18 de março de 2008 19:35
  • Tente da seginte forma:

     

    CREATE DATABASE database_name

    ON (FILENAME = ' local do *.mdf')

    FOR ATTACH_REBUILD_LOG

    terça-feira, 18 de março de 2008 20:18
  • tentei, da o seguinte erro:

     

    Incorrect syntax near 'ATTACH_REBUILD_LOG'.

     

    Na realidade eu quero saber que mensagem é essa: "Could not open FCB for invalid file ID 0 in database "MuOnline"  porque sempre q eu vou recriar o arquivo de log da essa mensagem, seja qual for o procedimento q eu faça, na hora de criar esse arquivo da essa mensagem.

    terça-feira, 18 de março de 2008 20:27
  • Amigo, esses comandos são suportados no SQL2005, por isso, essa sessão onde esse post foi adicionado é referente restauração da database usando SQL 2005.Qual é a versão do teu SQL?

     

    • Sugerido como Resposta euthiagoeu quinta-feira, 10 de dezembro de 2009 19:41
    terça-feira, 18 de março de 2008 21:35
  • me diz uma coisa apois eu trocar o mdf do banco que coloquei novo pelo do cliente, e depois startar o banco eu nao consigo acessar a base,
     o que posso fazer?


    Thiago Martins
    quinta-feira, 10 de dezembro de 2009 19:42
  • Ótimo artigo, resolveu meu problema!

    Muito obrigado.

    quarta-feira, 26 de fevereiro de 2014 14:15
  • Les situations défavorables qui corrompent la base de données de SQL Server comme suit: défaillance du système, formatage et réinstallation questions, Oracle Application Dommages Server, infection par le virus, l'attribution de blocs défectueux, etc. Les scénarios inégales sont traitées avec succès l'Récupérer des données pour logiciel SQL Server Database Recovery. L'outil récupère les fichiers corrompus / endommagés base de données créés par SQL Server 2000, 2005, 2008 versions. 


    • Editado ponatol quarta-feira, 10 de junho de 2015 04:26
    terça-feira, 9 de junho de 2015 06:56