Como exportar dados do SQL Server de um banco de dados corrompido (com erro de gravação em disco)

3

A TI percebeu que havia um erro de gravação de disco em nossa produção do SQL Server 2005 e, portanto, estava causando falha nos backups. Quando perceberam que o backup noturno era antigo, não puderam restaurar o backup em outro servidor.

O banco de dados ainda está em execução e sendo usado constantemente. No entanto, o DBCC CheckDB falha. Além disso, a tarefa de backup do SQL Server falha, o banco de dados de cópia falha, o Assistente de exportação de dados falha. No entanto, parece que todos os dados podem ser lidos nas tabelas (por exemplo, usando bcp etc)

Outra observação que fiz é que o log de transações é quase o dobro do tamanho do banco de dados. (Isso significa que todas as alterações não estão sendo gravadas no MDF?)

Qual seria o melhor plano de ataque para colocar o banco de dados em um estado em que os backups estão funcionando e os dados estão seguros?

  • Coloque o banco de dados offline e use o MDF / LDF para criar de alguma forma o banco de dados em outro servidor sql?
  • Exporte os dados do banco de dados usando bcp. Crie o banco de dados (use a função Gerar Scripts no banco de dados corrompido para criar o esquema no novo banco de dados) em outro servidor sql e use bcp novamente para importar os dados.
  • Alguma outra opção que é o curso correto de ação nessa situação?

O gerente de TI diz que os dados estão seguros como se o servidor falhasse, os dados podem ser restaurados a partir do mdf / ldf. Eu não tenho certeza, então insistimos que começássemos a exportar os dados todas as noites como um teste de segurança (usando o bcp, por exemplo).

A TI também está tendo problemas no lado do hardware, como supostamente o erro de disco em um disco virtualizado e não pode ser reconstruído como um array de ataque normal (ou algo parecido).

Por favor, desculpe o uso de terminologia incorreta e suposições incorretas sobre como o Sql Server opera. Eu sou o desenvolvedor do aplicativo e fui chamado para ajudar (como parece, ele sabe menos sobre o SQL Server do que eu).

Muito obrigado, Amit

Resultados do DBBC CheckDB:

Msg 1823, Level 16, State 2, Line 1
A database snapshot cannot be created because it failed to start.
Msg 7928, Level 16, State 1, Line 1
The database snapshot for online checks could not be created. Either the reason is given in a previous error or one of the underlying volumes does not support sparse files or alternate streams. Attempting to get exclusive access to run checks offline.
Msg 5030, Level 16, State 12, Line 1
The database could not be exclusively locked to perform the operation.
Msg 7926, Level 16, State 1, Line 1
Check statement aborted. The database could not be checked as a database snapshot could not be created and the database or table could not be locked. See Books Online for details of when this behavior is expected and what workarounds exist. Also see previous errors for more details.
Msg 823, Level 24, State 3, Line 1
The operating system returned error 1(error not found) to SQL Server during a write at offset 0x00000674706000 in file 'G:\AX40_Dynamics_Live.mdf'. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level 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.
    
por damitamit 18.05.2010 / 15:24

4 respostas

1

Em primeiro lugar, tenha muito cuidado - você não quer piorar as coisas. Eu recomendo strongmente consultar o suporte ao produto da Microsoft (você terá que pagar), obter um especialista em, ou procurar online por Paul Randal.

Você menciona que há um backup antigo ..... Já tentou fazer backup do log de transações (o GUI Management Studio permite fazer isso facilmente) e, em seguida, restaurar o backup antigo e esse novo backup do log de transações - em um novo servidor de backup?

    
por 10.03.2011 / 21:13
0
  • Fire IT. Obviamente incompetente.

  • Tente eliminar e recriar todos os índices. Se você está certo sobre todos os dados sendo redable, o erro de gravação deve estar em um índice - ergo você pode "contornar isso".

  • LDF maior MDF significa que os registros possivelmente não são submetidos a backup. Dada a incompetência demonstrada dos administradores de TI, isso é altamente provável.

  • O gerente de TI não sabe o que ele diz. Se o servidor falhar, não há garantia de que o mdf / ldf ainda pode ser redimensionado sem ferramentas externas (leia-se: possivelmente muito dinheiro). É improvável, mas o gerente de TI deve saber que atualmente arrisca a empresa. Bem, então - ele contratou TI, obviamente.

Tente um dbcc checkdb, poste os resultados aqui para que possamos ajudá-lo.

  • Verifique se seu banco de dados está atualizado (nível de patch).
por 18.05.2010 / 15:42
0

Essa saída do DBCC parece não ter acesso exclusivo ao banco de dados, portanto, está se recusando a executar. Se você quiser jogar todos fora do banco de dados para que ele seja realmente executado, use o seguinte comando:

ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK IMMEDIATE

Depois disso, o DBCC CHECKDB deve estar disposto a cooperar. Depois que você terminar, coloque o banco de dados de volta no modo multiusuário:

ALTER DATABASE database_name SET MULTI_USER
    
por 10.03.2011 / 21:11
0

A primeira coisa que eu recomendo fazer é colocar o aplicativo offline e executar um checkdb para garantir que o banco de dados não esteja corrompido. Se não for, então as coisas estão melhorando. Se for assim, precisamos descobrir o quão corrupto e recuperar os dados que pudermos.

Para obter o checkdb para rodar agora você precisará colocar o banco de dados no modo de usuário único, provavelmente, então, execute o dbcc checkdb para cada um dos bancos de dados.

O que acontece quando tentar executar manualmente um backup de banco de dados?

Com base no fato de que isso é dinâmica (e funciona o seu negócio) você pode querer gastar o dinheiro e obter PSS no telefone ou um consultor SQL para olhar para ele (mesmo com um consultor SQL você ainda pode ser chamando PSS).

Quanto à pergunta atual no título, você não quer exportar os dados e reimportá-los. As probabilidades são de que não serão suportadas.

    
por 05.03.2012 / 21:58