Mensagem de Erro 946 no SQL Server com BD em estado Suspect

SQL Server

28/10/2012

Pessoal, estou tentando recuperar um database que está em estado "suspect" usando os seguintes passos:

1) Movendo (copiar para outra pasta e apagar) os arquivos de dados e log do banco MyDatabase para outro local.

2) Criando um novo banco com o mesmo nome (MyDatabase) e parar o serviço do SQL Server.
CREATE DATABASE MyDatabase
SHUTDOWN

3) Apagar o arquivo de log e copiar o arquivo de dados que você salvou no item 1, por cima do arquivo novo criado no item 2 acima.

4) Executar o script abaixo.

ALTER DATABASE MyDatabase SET EMERGENCY
ALTER DATABASE MyDatabase SET SINGLE_USER
GO
DBCC CHECKDB (MyDatabase, REPAIR_ALLOW_DATA_LOSS)
WITH NO_INFOMSGS, ALL_ERRORMSGS
GO
ALTER DATABASE MyDatabase SET read_write
ALTER DATABASE MyDatabase SET multi_user
GO

Porém quando executo a etapa 4 do comando DBCC CHECK o SGBD retorna a seguinte mensagem:

Mensagem 946, Nível 14, Estado 1, Linha 1
Não é possível abrir o banco de dados ''S8_Real'' versão 655. Atualize o banco de dados para a versão mais recente.

Já tentei o procedimento no SQL Server 2008 e 2012 sem sucesso. Como me informaram que anteriormente a instância era no SQL Server 2005 irei fazer um testes, mas espero uma dica pra uma solução eficaz.

Agradeço desde já!
Jerfeson

Jerfeson

Curtidas 0

Respostas

Claudia Nogueira

Claudia Nogueira

28/10/2012

Já importei esse BD e realmente a versão é 2005.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

28/10/2012

Já importei esse BD e realmente a versão é 2005.
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Claudia, esse 'Mydatabase' é um nome ficticio que dei a base para postar aqui no forum. Não leve em consideração o descrição da base. Acabei de testar no SQL Server 2000 e da a mensagem de 'Server: Msg 943, Level 14, State 1, Line 1 Database 'S8_Real' cannot be opened because its version (655) is later than the current server version (539)'. Acredito que o problema esteja mesmo de fato na versão e nível de compatibilidade, pois verifiquei que os arquivos .mdf e .ldf foram criados no SQL Server 2005. Irei instalar pra testar.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

28/10/2012

Quando disse já migrei esse BD, quis dizer que já migrei um com o nome S8_Real, provavelmente é do mesmo software. Instala aí o 2005 pra ver, a versão que eu peguei na época pra migrar era essa. Qualquer coisa posta aí novamente.
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Entendi Claudia. É justamente isso..O BD desta solução ficou em modo suspect e estou tentndo recuperá-lo.
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Claudia, instalei o SQL Server 2005 Developer e executei os procedimentos e dar as seguinte mensagem agora:
Msg 948, Level 20, State 1, Line 1
'S8_Real "O banco de dados não pode ser aberto porque ele é a versão 655. Este servidor suporta a versão 611 e mais cedo. Um caminho de rebaixamento não é suportado.
GOSTEI 0
Roniere Almeida

Roniere Almeida

28/10/2012

não conhecia esse erro, vou acompanhar o post!!!
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Instalei o 2005 Developer e a mensagem continua. Qual edição você utilizou do SQL Server 2005 pra migrar?? Lembrando que o DB que tenho disponível não dar pra ser usado mais no Express, pois ultrapassou o limite de 4GB e fato a solução vem com SQL Server 2005 Express no pacote instalado.
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Inclusive tentei desanexar e anexar novamente com o comando:

create database S8_Real on
(filename = 'C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\s8_Real.mdf'),
(filename = 'C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\s8_Real_log.ldf')
for attach

E dar o erro abaixo.

Msg 1813, Level 16, State 2, Line 1
Could not open new database 'S8_RealT'. CREATE DATABASE is aborted.
Msg 948, Level 20, State 1, Line 1
The database 'S8_RealT' cannot be opened because it is version 655. This server supports version 611 and earlier. A downgrade path is not supported.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

28/10/2012

Fica difícil de ajudar sem uma base com o mesmo problema, se você quiser me enviar o BD, aí posso tentar aqui.
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Tem messenger pra teclarmos melhor, pois lhe explicaria o problema.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

28/10/2012

Meu gtalk é claudiadnh@gmail.com.
Tem messenger pra teclarmos melhor, pois lhe explicaria o problema.
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Adicionado. Mandei um email!
GOSTEI 0
Antonio Alex

Antonio Alex

28/10/2012

Bom dia!
Já tentou verificar o Nivel de Compatibilidade do Banco de dados?

Alex Souza
http://pessoalex.wordpress.com/
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Não tem muito haver com compatibilidade, mas na versão mesmo, pois o nível está 90, porém a versão 655 que é do SQL Server 2008. Já usei o 2005 Developer, 2000 Developer, 2012 Enterprise e 2008 R2 Enterprise e não consegui encontrar ainda uma solução.
GOSTEI 0
Antonio Alex

Antonio Alex

28/10/2012

Olhe este link...
http://www.mytechmantra.com/LearnSQLServer/Unable_to_Restore_Database_From_Backup.html

Alex Souza
MCP | MCTS: SQL Server 2008, Implementation and Maintenance
Blog Téc: http://pessoalex.wordpress.com
Linked: http://br.linkedin.com/in/pessoalex
MSN/GTalk: pessoalex@gmail.com
Twitter: AlexSouza_SQL
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Acompanhei o link que mandou e verifiquei a versão está desta forma:

dbi_dbid = 5 dbi_status = 65544 dbi_nextid = 236332402
dbi_dbname = S8_Real dbi_maxDbTimestamp = 2249000 dbi_version = 655
dbi_createVersion = 603 dbi_ESVersion = 0
dbi_nextseqnum = 1900-01-01 00:00:00.000 dbi_crdate = 2009-04-25 16:22:07.903
dbi_filegeneration = 12
dbi_checkptLSN

Na tabela do link que indicou não conseguir identificar qual será essa dbi_createVersion = 603. Irei testar no SQL Server 2008, pois estava testando no SQL Server 2008 R2.
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

De fato o problema estava na versão mesmo. Instalei o SQL Server 2008 e o comando DBCC CHECKDB funcionamento perfeitamente, mas o desafio agora é corrigi o problema do banco recuperando o mdf e ldf.

Coloquei o bd em estado de emergência (ALTER DATABASE 'S8_Real' SET EMERGENCY);
depois em modo de user exclusivo (ALTER DATABASE 'S8_Real' SET SINGLE_USER);

Até ai tudo bem.

Executei o comando DBCC CHECKDB (S8_Real). Retornou diversos erros.
Decidi desanexar e anexar usando comando:

EXEC sp_detach_db 'S8_Real'

CREATE DATABASE S8_Real
ON (FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\S8_Real.mdf'),
(FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\S8_Real_Log.ldf')
FOR ATTACH;

Quando vou anexar dar o seguinte erro:

Mensagem 1813, Nível 16, Estado 2, Linha 2
Não foi possível abrir o novo banco de dados 'S8_Real'. CREATE DATABASE foi anulado.
Mensagem 3456, Nível 21, Estado 1, Linha 2
Não foi possível refazer o registro do log (53000:1397:4), para a ID da transação (0:17400629), na página (1:550561), banco de dados 'S8_Real' (ID do banco de dados 7). Página: LSN = (52999:365:122), tipo = 2. Log: OpCode = 2, contexto 3, PrevPageLSN: (52999:365:257). Repare o banco de dados ou restaure-o usando um backup.
Mensagem 3313, Nível 21, Estado 2, Linha 2
Ocorreu um erro na ID do registro de log (53000:1397:4) ao refazer uma operação registrada em log no banco de dados 'S8_Real'. Em geral, a falha específica é registrada anteriormente como um erro no serviço Log de Eventos do Windows. Repare o banco de dados ou restaure-o usando um backup completo.

GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

ALTER DATABASE S8_REAL SET EMERGENCY;
GO
ALTER DATABASE S8_REAL SET SINGLE_USER;
GO
DBCC CHECKDB(S8_REAL, REPAIR_ALLOW_DATA_LOSS)
WITH NO_INFOMSGS, ALL_ERRORMSGS

Executei os comandos acima colocando no estado de emergência, porém quando executo DBCC CHECKDB dar o seguinte erro:

Mensagem 5123, Nível 16, Estado 1, Linha 1 CREATE FILE encontrou o erro do sistema operacional 3(O sistema não pode encontrar o caminho especificado.) ao tentar abrir ou criar o arquivo físico 'C:\Shop8\S8_Real_log.LDF'.
Mensagem 5024, Nível 16, Estado 2, Linha 1 Nenhuma entrada encontrada para o arquivo de log primário em sysfiles1. Não foi possível recriar o log.
Mensagem 5028, Nível 16, Estado 2, Linha 1 O sistema não pôde ativar uma parte do banco de dados suficiente para recriar o log.
Mensagem 7909, Nível 20, Estado 1, Linha 1 Falha no reparo do modo de emergência. É preciso fazer a restauração com um backup.

O interessante é que o BD está em modo de emergência e consigo fazer consulta nas tabelas normalmente. Algo que não conseguia antes. Como no estado de emergência é impossível realizar backups Full e de Log. Qual seria a alternativa mais cabível para resolver o problema?
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Problema já resolvido pessoal. Instalei a versão 2008 enterprise e usei o utilitário bcp pra resolver o problema.

Obrigado pela atenção de todos!
GOSTEI 0
Andrea Alves

Andrea Alves

28/10/2012

Jerfeson estou com o mesmo problema fiz os mesmo procedimento criei a base e substitui pelo os arquivos mdf e ldf com a instância parada depois subir a instância e o banco de dados fica inacessível quando eu tento dar o comando
DBCC CHECKDB (nome_base, REPAIR_ALLOW_DATA_LOSS)
WITH NO_INFOMSGS, ALL_ERRORMSGS

apresentar o errror
Msg 946, Level 14, State 1, Line 1
Cannot open database 'DADOSADV' version 643. Upgrade the database to the latest version.

Como vc conseguiu resolver ?


GOSTEI 0
Andrea Alves

Andrea Alves

28/10/2012

Jerfeson estou com o mesmo problema fiz os mesmo procedimento criei a base e substitui pelo os arquivos mdf e ldf com a instância parada depois subir a instância e o banco de dados fica inacessível quando eu tento dar o comando
DBCC CHECKDB (nome_base, REPAIR_ALLOW_DATA_LOSS)
WITH NO_INFOMSGS, ALL_ERRORMSGS

apresentar o errror
Msg 946, Level 14, State 1, Line 1
Cannot open database 'DADOSADV' version 643. Upgrade the database to the latest version.

Como vc conseguiu resolver ?


GOSTEI 0
Roniere Almeida

Roniere Almeida

28/10/2012

Problema já resolvido pessoal. Instalei a versão 2008 enterprise e usei o utilitário bcp pra resolver o problema.

Obrigado pela atenção de todos!


que bom, mas o que fez com o BCP?
GOSTEI 0
Alex Lekao

Alex Lekao

28/10/2012

Oi Andrea, boa noite!!

quais as versoes, que o banco foi gerado e qual a versao que vc esta uasndo do SQL???

o amigo acima resolveu com uma versao mais recente em relacao ao banco que ele usava.

Abraco.

Alex - Lekao
GOSTEI 0
Andrea Alves

Andrea Alves

28/10/2012

Boa noite!! Alex

A versão que o banco foi gerado não sei, porque o cliente não sabe informar qual versão estava simplesmente ele perdeu o servidor e consegui recuperar o disco que estava os arquivos mdf e ldf.

A versão que estou usando é sql server 2008 R2 Standard.


Você já viu esse error ?

Esse é o error que apresentar ai attach o .mdf
Converting database 'S8_Real' from version 643 to the current version 661.
Database 'S8_Real' running the upgrade step from version 643 to version 644.
Msg 601, Level 12, State 3, Line 1
Could not continue scan with NOLOCK due to data movement.
The statement has been terminated.


GOSTEI 0
Roniere Almeida

Roniere Almeida

28/10/2012

Problema já resolvido pessoal. Instalei a versão 2008 enterprise e usei o utilitário bcp pra resolver o problema.

Obrigado pela atenção de todos!


o que fez com o BCP?
GOSTEI 0
Alex Lekao

Alex Lekao

28/10/2012

Oi Andrea, boa tarde!!!

Desculpe a demora, feriado prolongado, aproveitei para emendar. rsrsr

Entao, se eu estou entendendo bem a mensagem, esta tendo algum problema com a versao, eu nunca vi particularmente esse problema nem vivenciei.

Eu ja fiz algumas vezes, foi restaurar o backup no 2008 e restaurar no 2012 sem problemas.

Vc esta fazendo um procedimento de importacao da base?

Esperimente apenas atachar o backup ao servidor para ver se da certo.

Espero ter ajudado.

Abraco.

Alex - Lekao

Boa noite!! Alex

A versão que o banco foi gerado não sei, porque o cliente não sabe informar qual versão estava simplesmente ele perdeu o servidor e consegui recuperar o disco que estava os arquivos mdf e ldf.

A versão que estou usando é sql server 2008 R2 Standard.


Você já viu esse error ?

Esse é o error que apresentar ai attach o .mdf
Converting database 'S8_Real' from version 643 to the current version 661.
Database 'S8_Real' running the upgrade step from version 643 to version 644.
Msg 601, Level 12, State 3, Line 1
Could not continue scan with NOLOCK due to data movement.
The statement has been terminated.


GOSTEI 0
Andrea Alves

Andrea Alves

28/10/2012

Alex o error é quando eu tento attach o arquivo .mdf


Quando eu executo


EXEC sp_attach_single_file_db @dbname = 'Banco',
@physname = 'D:\MSSQL\Data\DADOSADV.mdf'

Apresento o error :

New log file 'D:\MSSQL\Data\Banco_log.LDF' was created.
Converting database 'Banco' from version 643 to the current version 661.
Database 'Banco' running the upgrade step from version 643 to version 644.
Msg 601, Level 12, State 3, Line 1
Could not continue scan with NOLOCK due to data movement.
The statement has been terminated.


Não tem como eu realizar o backup e fazer o restore porque eu não tenho mais a instância que foi criada esse banco, pois o cliente perdeu o server.

Já tentei criar o banco e parar os serviço e substituir os arquivos mdf e ldf. já tentei de tudo nas versão sql server 2005 e 2008 R2
GOSTEI 0
Alex Lekao

Alex Lekao

28/10/2012

Oi Andrea, boa tarde!!!

Vc chegou a verificar o link sugerido pelo Fabiano?

Honestamente nao poderei ajudar.

SE eu encontrar alguma coisa eu posto aqui, mas honestamente acredito que atingi meu limite. rsrsr

Desculpe nao poder ajudar.

Abraco.

Alex - Lekao
GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

28/10/2012

Tente criar a base de destino manualmente.
Coloca a base em modo offline
Coloque a base em single user
Desatacha essa base criada.
Atacha com esse arquivo MDF que voce esta tentando.

Tente fazer o teste.
GOSTEI 0
Jefferson Santos

Jefferson Santos

28/10/2012

Utilize o seguinte passo a passo:

Descrição: Recuperar banco suspect.
Criado por: Thiago Cruz

NOTA:

1) Alterar bando de dados;
2) Executar um comendo de cada vez.

*/

EXEC sp_resetstatus 'Nome do Banco'

ALTER DATABASE Nome do Banco SET EMERGENCY

DBCC checkdb('Nome do Banco')

ALTER DATABASE Nome do Banco SET SINGLE_USER WITH ROLLBACK IMMEDIATE

DBCC CheckDB ('Nome do Banco', REPAIR_ALLOW_DATA_LOSS)

ALTER DATABASE Nome do Banco SET MULTI_USER
GOSTEI 0
Roniere Almeida

Roniere Almeida

28/10/2012

Obrigado Jefferson.
GOSTEI 0
Jerfeson

Jerfeson

28/10/2012

Olá Andrea, seu problema inicialmente está relacionado a versão interna do database. É bem provável que esteja usando uma versão/edição de SQL Server incompatível com o gerado pra o database no cliente.

O comando pra identificar qual a versão que seu database está é: DBCC DBINFO WITH TABLERESULTS observando a coluna dbi_version.

Afirmou que o servidor foi perdido. Veja se o cliente tem a documentação da compra da licença para identificar qual a versão. Sugiro que instale a versão 2005 do SQL Server, pois é bem possível que resolva seu problema. É bom deixar claro que não consegue atachar um database de versão 643 em versões de SQL Server anteriores.

Os links abaixo irão ajudá-las a resolver o problema.

[url:descricao= Versoes 655 e 611 - incompatível]http://social.msdn.microsoft.com/Forums/sqlserver/pt-BR/f466163a-6975-4770-8b6a-a9afb40e9487/versoes-655-e-611-incompatvel?forum=expresscompactpt[/url]

recuperando mdf com banco suspect

Internal Database Version

Veja se resolve, caso contrário posta aqui os resultados.

Boa sorte!
GOSTEI 0
POSTAR