38

如果我运行 SQL Server Management Studio,并告诉它连接到 (localdb)\v11.0,它会知道我曾经使用过的每个数据库,尽管大多数数据库文件早已不复存在。

如果我要求它删除其中一个数据库,它会抱怨它无法删除数据库,因为数据库文件已经消失了(duhhh)。那么,如何清理这些混乱并删除所有关联数据库文件已消失的数据库引用?

鲍勃

4

5 回答 5

32

在这种情况下,分离数据库而不是尝试删除它。在 SQL Management Studio 中,右键单击数据库,选择“任务”,然后选择“分离”。

于 2012-12-02T13:46:17.530 回答
21

您需要做的就是重新创建实例,并使用 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"
于 2014-01-12T10:56:10.850 回答
13

我有同样的问题。首先使用代码设计数据库时,我只是删除旧的数据库。它最终会在 SQL Server Management Studio 中出现多个已删除的数据库。然后,当我尝试查询数据库时,很难从已删除的数据库实例中找到正确的数据库实例。

正如 IRM 建议的那样,我尝试分离那些已删除的数据库,并且对于其中一些数据库来说效果很好!

但是我还剩下几个。然后我尝试在这些数据库上“脱机”。每次我尝试使 DB 脱机时,SQL Server Management Studio 都会崩溃。SQL Server Management Studio 重新启动后,数据库消失了。因此,如果分离和删除对您不起作用,请尝试“脱机”。

于 2013-04-18T03:32:16.010 回答
6

我收集了数百个,单独分离它们实在是太乏味了。

我做了什么:

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

这给了我一个 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'

将结果复制回命令窗口,突出显示系统数据库以外的所有内容,然后执行。

于 2017-08-23T19:56:28.723 回答
0

此处接受的答案说要分离服务器,但是如果您有快照,则无法分离它们,并且在删除它们时遇到相同的问题。

但是,您可以删除它们,方法是在 sql server 认为文件应该在的位置创建空文件,重新启动 sql server 服务,然后重试。

如果您不确定如何找到物理位置,可以在这里找到: https://dba.stackexchange.com/questions/49811/location-of-the-mdf-file-of-the-database#:~: text=5%20Answers&text=有%20are%20few%20ways%20to,the%20Path%20and%20FileName%20columns

于 2020-07-09T16:24:22.993 回答