web-dev-qa-db-fra.com

Comment supprimer la base de données (localdb) si le fichier a disparu

Si j'exécute SQL Server Management Studio et que je lui dis de se connecter à (localdb)\v11.0, il connaît toutes les bases de données que j'ai jamais utilisées, malgré le fait que la plupart des fichiers de base de données ont disparu depuis longtemps.

Si je lui demande de supprimer l'une de ces bases de données, il se plaint qu'il ne peut pas DROP la base de données parce que le fichier de base de données a disparu (duhhh). Alors, comment nettoyer ce désordre et supprimer toutes les références de base de données dont les fichiers de base de données associés ont disparu?

Bob

35

Dans ce cas, détachez la base de données plutôt que d'essayer de la supprimer. Dans SQL Management Studio, faites un clic droit sur la base de données, sélectionnez "Tâches" puis "Détacher".

32
IRM

Il vous suffit de recréer l'instance, testée avec SQL 2012! allez simplement dans l'invite de commande avec les droits d'administrateur et tapez:

//list the instancies
sqllocaldb i

//stop selected instance
sqllocaldb p "selected instance"

//delete
sqllocaldb d "selected instance"

//recreate or create new one 
sqllocaldb c "new instance"
17
Filip Gjorgjevikj

J'ai eu le même problème. Lors de la conception d'une base de données à l'aide de code, je supprime simplement les anciennes bases de données. Il se termine avec plusieurs bases de données supprimées apparaissant dans SQL Server Management Studio. Ensuite, lorsque j'essaie d'interroger la base de données, il devient difficile de trouver l'instance de base de données correcte parmi les supprimés.

Comme l'a suggéré IRM, j'ai essayé de détacher ces bases de données supprimées, et pour certaines d'entre elles, cela fonctionne très bien!

Mais il m'en reste encore plusieurs. Ensuite, j'ai essayé "Mettre hors ligne" sur ces bases de données. Chaque fois que j'essayais de mettre DB hors ligne, SQL Server Management Studio se bloquait. Après le redémarrage de SQL Server Management Studio, la base de données avait disparu. Essayez donc de faire "mettre hors ligne" si le détachement et la suppression ne fonctionnent pas pour vous.

13
Qixing

J'en avais rassemblé des centaines, et les détacher individuellement était tout simplement trop fastidieux.

Ce que j'ai fait:

SELECT 'EXEC sp_detach_db ''' + name + ''''
FROM sys.databases
;

Cela m'a donné une liste de commandes exec:

EXEC sp_detach_db 'E:\...\ADATABASE.MDF'
EXEC sp_detach_db 'E:\...\ANOTHERDATABASE.MDF'
EXEC sp_detach_db 'E:\...\ATHIRDDATABASE.MDF'
....
EXEC sp_detach_db 'master'
EXEC sp_detach_db 'model'
EXEC sp_detach_db 'msdb'
EXEC sp_detach_db 'tempdb'

Copiez les résultats dans la fenêtre de commande, mettez en surbrillance tout autre que les bases de données système et exécutez.

6
Jeff Dege