web-dev-qa-db-fra.com

DBCC CheckDB ('xyz', réparateur_allow_data_loss) indiquant que XYZ est déjà ouvert et ne peut avoir qu'un seul utilisateur à la fois

J'ai un dB, XYZ, qui avait un fichier journal corrompu et que le fichier journal est totalement inutilisable, cela rend cette DB spécifique inutilisable et je dois être capable de le reconstruire.

J'ai déjà fait beaucoup de recherches sur ce processus, mais je suis bloqué sur le DBCC Checkdb.

J'ai couru la commande

alter database xyz SET single_user with immediate rollback

et par la suite

use master
dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)

Mais je continue à courir dans cette erreur:

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

Tout ce que j'ai recherché a indiqué que la DB doit être en mode d'urgence, puis que la DB doit être en mode utilisateur unique. Si je revert le mode DB au mode multi-utilisateur, il indique que la DB doit être en mode mono-utilisateur. Ok bien je fais ça et puis obtenir ce problème.

J'ai couru

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

pour rechercher tous les processus à l'aide de la DB mais aucune ligne de lignes n'est renvoyée et que les journaux ne montrent rien à propos de la base de données en cours de récupération ou de quelque chose de cette nature. Le DB montre comme "urgence".

Des idées?

7
Christopher Bruce

Retournez la base de données au mode Multi utilisateur et essayez quelque chose comme ce qui suit.

alter database xyz SET single_user with rollback immediate 

dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)

Probablement un autre processus saisit la connexion de base de données avant d'y arriver. La combinaison de ces deux déclarations devrait vous assurer que vous obtenez cette connexion.

9
Ian Chamberland