Fui encarregado de tentar recuperar um banco de dados que sofria corrupção (devido a falha de E / S, que foi corrigida desde então). Não estou familiarizado com o banco de dados ou o que ele contém.
Recebi um backup completo antigo (~ 3 semanas) e uma série de logs de transações ... no entanto, há logs de transações ausentes, portanto só posso recuperar até uma certa data. Faltam 2,5 semanas de dados (e há muitos dados sendo adicionados a esse banco de dados constantemente).
Também recebi uma cópia do banco de dados corrompido (acessível, mas com muitas páginas corrompidas / ausentes).
Eu tentei os DBCC CHECKDB
comandos típicos (ainda não repair_allow_data_loss
, esse será meu último recurso se nada mais funcionar).
Depois que muitos chegam e vão para o banco de dados (o banco de dados é um monstrinho de 1,5 terabyte e tudo o que faço é lento e leva um tempo), tentei fazer uma restauração de página on-line a partir do último backup válido para as páginas corrompidas.
Para fazer isso, eu criei um script que cria muitos RESTORE DATABASE <foo> PAGE='pages' FROM DISK='<bar.bak>'
comandos a partir da DBCC CHECKDB
saída (basicamente um regex e um distinto) ... até agora tudo bem, isso funcionou até um ponto em que dizia que havia atingido o limite de 1000 páginas por arquivo (existem 8 arquivos neste banco de dados) por comando de restauração.
Portanto, ele me pede para "concluir a restauração online", mas não sei como fazer isso ... Não tenho um registro de cauda nem nada mais completo do que o backup completo com o qual estou começando, então Basicamente, não sei como concluir a restauração para continuar tentando com o restante das páginas.
Eu tentei um RESTORE DATABASE <foo> WITH RECOVERY
mas que também não funcionou, ele me pede um log que eu não tenho.
Alguém tem alguma dica de como eu poderia tentar recuperar alguma coisa daqui? Ou como "concluir" a restauração online para que eu possa continuar tentando recuperar mais páginas? Eu teria o mesmo problema se tentasse uma restauração offline (basicamente adicionando WITH NORECOVERY
a tudo e tente trazê-la de volta no final?)
Trabalhar com o banco de dados manualmente é basicamente impossível de desfazer ... existem centenas de tabelas com milhões de linhas e não há um significado claro do que seja. O banco de dados corrompido falhará nas SELECT
consultas após milhões de linhas, mas não tenho certeza de que posso descobrir onde. Tentei reconstruir todos os índices não agrupados em cluster, mas há páginas corrompidas com dados de linha, portanto, isso também não funcionou.
Alguma perda de dados seria aceitável, mas a consistência no banco de dados deveria pelo menos tentar ser alcançada.
O banco de dados corrompido ainda está on-line e os clientes estão trabalhando nele (para que continue obtendo novos dados); portanto, qualquer processo que eu faça na bancada do laboratório deve ser reproduzível no banco de dados de produção posteriormente (o tempo de inatividade será difícil para ele).
Este é o SQL Server 2014 Enterprise
PS: Eu não sou DBA ... sou programador, mas o cliente tentou alguns serviços de recuperação de desastre sql "especializados" e eles desistiram, por isso me pediram que olhasse para ver se conseguia faça qualquer coisa.
Atualização : após muitos testes, a restauração de página por página não era possível, então abandonamos a ideia. Estamos buscando uma recuperação manual (selecionando manualmente os registros ausentes das tabelas corrompidas e inserindo-os no último backup válido), executando algumas ferramentas automatizadas (novamente, existem centenas e centenas de tabelas).
Vejo que você tentou métodos diferentes, incluindo o trabalho com "especialistas" em recuperação de dados, para reparar esse banco de dados corrompido, especialmente com tamanho superior a 1 TB. Isso torna o processo muito mais difícil e uma corrida contra o tempo. Como um DBA experiente, deparei-me com situações semelhantes, nas quais na maioria das vezes existem bons backups disponíveis para restauração. No caso de herdar backups ruins e bancos de dados corrompidos, contei bastante com uma ferramenta de terceiros chamada Stellar Phoenix SQL Database Repair Tool . Essa ferramenta é bem conhecida por reparar bancos de dados corrompidos (.mdf e .ndf). Abaixo estão as poucas funcionalidades da ferramenta:
Executa a recuperação de registros excluídos do banco de dados SQL
Salva o resultado da verificação do banco de dados para executar a recuperação posteriormente
A ferramenta requer que os arquivos .mdf e .ndf estejam offline, portanto, é ótimo que você tenha uma cópia do banco de dados PROD corrompido e não precise interromper os serviços do SQL Server.
A melhor parte é que a versão de avaliação fornece a funcionalidade completa da ferramenta, exceto que o banco de dados reparado não pode ser exportado / salvo. Você ainda poderá visualizar todos os objetos de banco de dados recuperados e o extenso arquivo de log de reparo que fornece detalhes sobre os diferentes estágios do processo de reparo.
Sinta-se livre para baixar e ver se isso ajuda. Baixe aqui
Também escrevi um blog sobre como a ferramenta funciona neste site: samosql blogs
Obrigado e HTH para torná-lo o herói do dia!
PS. Quando essa tempestade terminar, lembre-se de informar ao gerenciamento que é necessário que haja uma grande revisão de seus procedimentos de backup, especialmente para esse banco de dados. Uma repetição desse cenário é totalmente inaceitável! :)
fonte