dbcc checkdb ('XYZ', REPAIR_ALLOW_DATA_LOSS) indicando que o XYZ já está aberto e só pode ter um usuário por vez

6

Eu tenho um DB, XYZ, que tinha um arquivo de log corrompido e, agora, como o arquivo de log está totalmente inutilizável, isso está inutilizando esse BD específico e eu preciso ser capaz de reconstruí-lo.

Eu já fiz muita pesquisa sobre este processo, mas estou ficando preso no dbcc checkdb.

eu corri o comando

alter database xyz SET single_user with immediate rollback

e subsequentemente

use master
dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)

Mas continuo a encontrar este erro:

Msg 924, Level 14, State 1, Line 2
Database 'XYZ' is already open and can only have one user at a time.

Tudo o que pesquisei indica que o DB precisa estar no modo de emergência e que o DB precisa estar no modo de usuário único. Se eu reverter o banco de dados para o modo multiusuário, isso indica que o banco de dados precisa estar no modo de usuário único. Ok, bem, eu faço isso e depois recebo este problema.

Eu corri

select spid from master..sysprocesses where dbid = DB_ID('XYZ') and spid <> @@spid

para verificar se há algum processo usando o banco de dados, mas nenhuma linha é retornada e os logs não mostram nada sobre o banco de dados que está sendo recuperado ou algo dessa natureza. O DB mostra como "Emergência".

Alguma idéia?

    
por Christopher Bruce 11.09.2013 / 16:25

1 resposta

8

Reverta o banco de dados de volta para o modo multiusuário e tente algo como o seguinte.

alter database xyz SET single_user with rollback immediate 

dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)

Provavelmente, outro processo está capturando a conexão com o banco de dados antes de você chegar lá. Combinar as duas instruções deve garantir que você obtenha essa conexão.

    
por 11.09.2013 / 18:51