Как удалить (localdb) базу данных, если файл пропал
Если я запустил SQL Server Management Studio и скажу ему подключиться к (localdb)\v11.0, он будет знать о каждой базе данных, которую я когда-либо использовал, несмотря на то, что большинство файлов базы данных давно исчезли.
Если я прошу его удалить одну из этих баз данных, он жалуется, что не может УДАЛИТЬ базу данных, потому что файл базы данных пропал (дух!). Итак, как мне убрать этот беспорядок и удалить все ссылки на базы данных, чьи файлы базы данных исчезли?
боб
5 ответов
В этой ситуации отключите базу данных, а не пытайтесь удалить ее. В SQL Management Studio щелкните правой кнопкой мыши базу данных, выберите "Задачи", а затем "Отключить".
Все, что вам нужно сделать, это воссоздать экземпляр, протестированный с SQL 2012! просто зайдите в командную строку с правами администратора и введите:
//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"
У меня такая же проблема. При проектировании БД с использованием кода сначала я просто удаляю старые БД. В итоге в SQL Server Management Studio появляется несколько удаленных БД. Затем, когда я пытаюсь сделать запрос к БД, становится трудно найти правильный экземпляр БД среди удаленных.
Как предложил IRM, я попытался отсоединить эти удаленные БД, и для некоторых из них это прекрасно работает!
Однако до сих пор у меня осталось несколько. Затем я попытался "Офлайн" на этих базах. Каждый раз, когда я пытался отключить БД, происходило сбой SQL Server Management Studio. После перезапуска SQL Server Management Studio БД исчезла. Поэтому попробуйте сделать "отключить", если отсоединение и удаление не работают для вас.
Я собрал сотни таких, и отделять их по отдельности было слишком утомительно.
Что я сделал:
SELECT 'EXEC sp_detach_db ''' + name + ''''
FROM sys.databases
;
Это дало мне список исполняемых команд:
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'
Скопируйте результаты обратно в командное окно, выделите все, кроме системных баз данных, и выполните.
Кажется, что он "исправился" (более или менее). Когда я сегодня утром посмотрел на (localdb)\v11.0 в SQL Server Management Studio, все старые базы данных исчезли.
Насколько я могу судить, он, должно быть, удалил свои ссылки на них, несмотря на тот факт, что он жаловался, что не может этого сделать.
Может быть, какой-нибудь гуру SQL Server (или, по крайней мере, кто-то с небольшим опытом работы) может добавить немного просветления?
В принятом ответе здесь говорится об отсоединении вашего сервера, однако, если у вас есть снимки, вы не можете их отсоединить, и вы столкнетесь с той же проблемой, удалив их.
Однако вы можете удалить их, создав пустые файлы в том месте, где, по мнению sql-сервера, должны быть файлы, перезапустив службу sql-сервера и повторив попытку.
Если вы не знаете, как найти физическое местоположение, вы можете найти его здесь: https://dba.stackexchange.com/questions/49811/location-of-the-mdf-file-of-the-database#:~:text=5%20Answers&text= Там% 20are% 20few%20ways% 20to,%20Path%20и% 20FileName%20columns.