SQL Server处于混乱状态:数据库是否存在?


8

遇到了一个非常奇怪,令人讨厌的问题。。以某种方式在我们的服务器上运行的SQL Server 2008 R2实例已损坏。

首先,我们注意到昨天创建的数据库丢失了。因此,我们环顾四周,发现它仍然在那里,但是与众不同。因此,我们尝试附加mdf,但收到一条类似于的消息The file is currently in use

我认为这很奇怪,所以重新启动了SQL Server。同样的事情……好吧,是时候采取严厉措施了……于是,我停止了服务,压缩了mdf,启动了服务,解压缩了它,然后试图恢复它。上面的消息不见了,但是我得到了:

无法附加与现有数据库同名的数据库

哎哟。当然它没有显示在数据库浏览器中,所以不知道发生了什么...不得已:

DROP DATABASE [DatabaseName]

当然那没用..这告诉我数据库不存在。因此,我陷入了困境……SQL Server一方面认为数据库确实存在,而另一方面它认为db不存在..显然,它处于混乱状态。

有没有人见过这个?对如何解决有任何想法?


所以物理文件不存在了,对不对?您仍然在sys.databases??中看到您的数据库吗?例如,SELECT * FROM sys.databases仍然列出您的数据库吗?
marc_s

@Josien thansk给出了小费。.我也放在那儿了
Matt

@marc_s我现在尝试了,但是当我运行该查询时并没有显示
Matt

什么是SELECT name, user_access_desc, state_desc FROM sys.databases露?
Mark Storey-Smith

到底为什么有人会对此文章投反对票?有人可以详细说明吗?认真地...
马特

Answers:


5

是的..我弄清楚了..这里的一些小丑(谁不愿意拥有它)将数据库重命名,以便它在SSMS中的名称与mdf和ldf文件名不同。 。 完全不同。大声笑。无论如何,感谢大家的有用建议。


4
为了安全起见,拒绝除“ sa”以外的所有用户对数据库的ALTER权限,更改“ sa”密码,并在将密码提供给“小丑”时保持选择性
Carol Baker West

4

如果您没有查看该数据库的权限,那么这就是症状所在。该数据库不会显示在您的视图中。您确定不只是破坏了您无权访问的数据库的文件吗?您是否以系统管理员身份运行?

更新资料


数据库是分离的还是脱机的?当您说出So, we looked around and found that it was still there, but detached您在说什么的时候?您在哪里看,找到了什么?识别数据库是“分离的”(相对于删除的数据库而言)并非易事。


我的确是一个系统管理员
马特

2
:既然你提到这个问题,我有我的博客一个脚本,检测默认的数据/日志文件夹独立的数据库文件voluntarydba.com/post/2012/08/21/...
乔恩·赛格尔

谢谢,我待会在办公室时再尝试。
2013年

@JonSeigel,很好,但是不幸的是,这对我没有任何帮助。我也尝试了其他方法..重新启动服务器,然后使用该名称创建新的数据库..不允许我这样做..非常烦人。我想我将不得不忽略这种情况,并使用不同的名称创建一个新的数据库。
马特

3

查询sys.databases。可能是数据库的名称末尾带有空格。运行下面的代码,请注意,您只能创建一个数据库,而首先创建哪个数据库都没有关系,只能创建该数据库。

create database [test]
create database [test ]

我认为这是一个错误,对吗?
AK 2013年

可能不是。我假设SQL在检查值是否存在时正在对数据库名称执行TRIM。那将是故意的,因此可能是设计使然。
mrdenny

@mrdenny,谢谢,但是没有帮助。.数据库根本不显示,名称也没有任何变化..而且该服务器上只有少数数据库,所以如果它存在,我会立即发现。无论如何还是要谢谢
马特

0

在master,msdb和数据库自身上运行“ DBCC CHECKDB”,以查看其内容。可能需要将系统置于单用户模式下,以使dbcc在数据丢失的修复模式下运行。或者只是适当地还原master和msdb的备份。


在master和msdb上运行该命令无济于事,我也无法在db本身上尝试它,因为无论如何我都看不到管理工作室中的db ...
Matt

0

对我来说,这是通过刷新数据库解决的。我完成了一些失败的恢复,并看到db,该数据库未能删除,并显示了相同的错误消息:“服务器上不存在数据库”。


2
您可能需要详细说明“刷新数据库”的精确度。
mustaccio 2014年

0

我在使用SQL Server 2008r2时遇到了同样的问题。

我试图复制数据库(版本foo),并最终使SQL Server感到困惑。SQL Server Management Studio认为数据库存在(MDF和LDF存在),但主数据库认为数据库不存在(未在sys.databases中显示)

诀窍是重命名MDF和LDF文件,然后从SQL创建数据库,create database [db name here]然后删除数据库,最后从以前附加MDF和LDF文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.