当我使用'选择前1000行'在我的数据库中的三个表中的SSMS中运行,我收到数据库脱机的错误。但错误消息中的数据库名称与查询中的数据库名称不匹配。
SELECT TOP 1000 ...
FROM [vc-live].[dbo].[Errors]
Msg 942, Level 14, State 4, Line 2
Database 'vc-live-old' cannot be opened because it is offline.
如果我添加一个显式的using语句 - [master]或[vc-live] - 查询运行正常。
我能找到的唯一其他奇怪的是vc-live-old数据库在sys.master_files中显示在线,尽管它在SSMS中处于脱机状态。
正如您可能怀疑的那样,数据库在将其置于单用户模式并立即回滚后,使用alter语句重命名了一段时间。
访问数据库的应用程序运行正常,我不关心由于应用程序的性质导致的数据丢失。但是,我担心重新启动数据库引擎时可能会发生什么。
DB是2012 SP2。
对这种意外行为的任何想法?
答案 0 :(得分:0)
https://dba.stackexchange.com/questions/48237/renaming-sql-server-database-unusual-result
高速缓存了SELECT TOP 1000查询的执行计划。根据上述链接的建议,我使用DBCC FREEPROCCACHE来纠正这个问题。
如果您想使用更精细的命令,这篇文章也很好:https://sqlserverperformance.wordpress.com/2009/12/28/fun-with-dbcc-freeproccache/