Estou restaurando um banco de dados do SQL Server 2005 em uma instância do SQL Server 2008 R2 usando este comando:
RESTORE DATABASE SampleDB FROM DISK= 'C:\SampleProject\SampleDB.bak' WITH REPLACE,
MOVE 'sampledb' TO
'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SampleDB.mdf',
MOVE 'sampledb_log'
TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SampleDB_log.ldf',
CONTINUE_AFTER_ERROR, STATS = 10;
E a saída é:
10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
Msg 3242, Level 16, State 2, Line 3
The file on device 'C:\SampleProject\SampleDB.bak' is not a valid Microsoft Tape Format backup set.
Msg 3013, Level 16, State 1, Line 3
RESTORE DATABASE is terminating abnormally.
Por que a porcentagem processada atinge 100%, mas termina de forma anormal?
Como posso restaurar este backup de banco de dados mesmo com dados corrompidos? Continuar após o erro não parece fazer nenhuma diferença.
A restauração de um backup é executada em três fases.
Somente a fase 2 é medida pelo contador de porcentagem. Se você estiver restaurando um backup de log muito grande, a 3ª fase pode realmente demorar significativamente mais do que a 2ª fase, enquanto o contador de porcentagem concluída está parado em 100%.
Cada backup completo do banco de dados sempre contém uma parte do log. Se você tiver inconsistências lógicas nessa parte do arquivo de backup, o SQL Server não descobrirá até que esteja na 3ª fase. É por isso que você está vendo 100%.
O melhor recurso para lidar com a corrupção do SQL Server é sqlskills.com . É mais provável que não, no entanto, você descobrirá que não pode obter os dados com métodos integrados. Se o problema estiver realmente na seção de log, você poderá usar uma ferramenta de fornecedor externo que possa ler backups como comparação de dados SQL red-gate. Também existem ferramentas que podem ajudar na recuperação de dados de bancos de dados corrompidos, como a recuperação do apexsql, mas não tenho certeza se algum deles pode realmente ler um backup.
Como Sebastian disse, o ApexSQL Recover pode ser usado para se recuperar da corrupção, mas não parece ser a solução certa neste cenário. A opção de recuperar de um banco de dados corrompido ou de um arquivo MDF lê apenas os bancos de dados online e os arquivos MDF desanexados. Ele não lê backups de banco de dados corrompidos
Há outra opção no ApexSQL Recover que lê backups corrompidos, que é Recuperar dados da tabela de um backup de banco de dados. No entanto, observe que ele recupera apenas os dados da tabela e cria um script INSERT, portanto, não pode ser usado para mover todo o banco de dados para uma versão mais recente do SQL Server
Existem outras ferramentas ApexSQL que podem ajudar, pois elas leem backups de banco de dados - ApexSQL Diff e ApexSQL Data Diff . Como o backup não está gravemente corrompido, eles podem lê-lo. Ambas as ferramentas leem bancos de dados online e backups de banco de dados, elas também podem ser usadas se você tiver um banco de dados SQL Server 2005 online que deseja atualizar para SQL Server 2008 R2
ApexSQL Diff é uma ferramenta de comparação e sincronização de banco de dados do SQL Server que detecta diferenças entre objetos de banco de dados em bancos de dados ativos e com versão, backups, instantâneos e pastas de script. Comparar seu banco de dados SQL Server 2005 ativo ou backup de banco de dados com um destino SQL Server 2008 em branco cria os objetos SQL que existem na origem (ou seja, banco de dados SQL Server 2005)
Depois de recuperar a estrutura do banco de dados, use o ApexSQL Data Diff para recuperar os dados
Você pode encontrar as etapas recomendadas aqui:
Migrar um banco de dados do SQL Server para uma versão mais recente do SQL Server
Crie um script de banco de dados a partir de um backup sem restaurá-lo
Isenção de responsabilidade: trabalho para ApexSQL como engenheiro de suporte