Precisa de ajuda para recuperar um banco de dados SQL corrompido

6

Eu tenho um caso muito especial em que tenho trabalhado por vários dias. Eu tenho um banco de dados muito grande do SQL Server 2008 (cerca de 2 TB) que contém 500 grupos de arquivos para oferecer suporte a tabelas particionadas muito grandes. Recentemente, tivemos uma falha catastófica em uma das unidades e perdemos vários grupos de arquivos e o banco de dados tornou-se acessível.

Temos feito backups de grupos de arquivos diariamente, mas devido a outros problemas, perdemos nosso backup mais recente do log e do grupo de arquivos primário. Temos todos os dados armazenados em backup, mas o backup primário do grupo de arquivos é antigo.

Não houve alterações no esquema desde o backup primário do grupo de arquivos, mas os lsn's agora estão todos fora de sincronia e não podemos recuperar os dados.

Eu tentei tudo o que pude pensar (e tentei praticamente todos os truques e truques que eu consegui no google), mas ainda termino no mesmo ponto em que recebo mensagens dizendo que os arquivos do grupo de arquivos x não correspondem ao primário grupo de arquivos. Eu estou agora no ponto de tentar editar as tabelas do sistema (nós temos um ambiente temporário separado para fazer isso, então não estamos preocupados em corromper quaisquer bancos de dados de produção). Eu tentei atualizado sys.sysdbreg, sys.sysbrickfiles e sys.sysprufiles para tentar enganar o SQL em pensar todos os arquivos estão on-line, mas um "Select * From OPENROWSET (TABLE DBPROP, 5)" mostra um estado de banco de dados diferente do que Vejo em sys.sysdbreg.

Agora estou pensando que preciso de alguma forma editar os cabeçalhos dos arquivos de dados reais para tentar alinhar os lsn's com o primário.

Agradeço qualquer ajuda que alguém possa me dar aqui, mas por favor não responda com coisas do tipo "você não deve editar o mdf, os arquivos ndf ..." ou "veja o artigo do msdn ....", etc. Este é um caso de emergência avançado e eu preciso de um hack real para que possamos apenas obter os dados neste banco de dados corrompido e exportar para um novo banco de dados. Eu sei que há uma maneira de fazer isso, mas não saber o que as funções do sistema DBPROP faz (ou seja, ele olha para as tabelas do sistema ou realmente abre o arquivo) está me impedindo de tentar descobrir como enganar o SQL para me permitir para ler esses arquivos.

Obrigado por qualquer ajuda.

    
por user66488 10.01.2011 / 17:17

3 respostas

7

Eu vejo duas opções no seu futuro.

  1. Ligue para o Atendimento Microsoft e abra um ticket. Vai demorar um pouco para chegar a algum lugar com eles.
  2. Chame o SQLskills (Paul para ser específico) e veja o que ele pode fazer. Eu sei que Paul conseguiu hackear um banco de dados com sucesso usando um editor hexadecimal antes. Paul não é barato, mas ele fará o trabalho.

Boa sorte.

    
por 10.01.2011 / 20:11
3

Ligue para o Microsoft PSS: Abra um caso de suporte de nível A. Não vai ficar melhor que isso. Espere pagar. Possivelmente muito.

    
por 10.01.2011 / 17:57
1

Já seguimos a rota do PSS e eles estavam longe de ser úteis. Apenas nos deu uma resposta de estoque de "Backup / Restore não é projetado para funcionar dessa maneira e nós não suportamos hacks". (Obrigado MS, muito útil. Eu me lembro de 12 anos atrás, quando você tinha um grupo no PSS que ajudaria com emergências como esta.)

Eu estava em todo o blog do Pauls e encontrei algumas informações muito úteis, mas nenhuma informação sobre como ler itens como o IAM, GAM, SGAM diretamente de um arquivo. Eu sei que se eu pudesse chegar a esta informação que eu poderia editar a tabela sys.sysallocunits para reparar ponteiros para as páginas de dados para todas as partições. Eu estou experimentando com uma ferramenta de recuperação do Office Recovery que parece ser capaz de ler os dados, portanto, os dados devem ser recuperáveis. Eu só quero chegar tão

    
por 11.01.2011 / 23:45