【问题标题】:SQL Server tells me database is in use but it isn'tSQL Server 告诉我数据库正在使用,但它没有
【发布时间】:2011-02-24 13:01:14
【问题描述】:

当我尝试删除或恢复数据库时,SQL Server 不断告诉我数据库正在使用中,但是当我运行此元数据查询时:

select * from sys.sysprocesses 
where dbid 
  in (select database_id from sys.databases where name = 'NameOfDb')

它什么也不返回。

有时它会返回 1 个进程,这是一个 CHECKPOINT_QUEUE 等待类型。如果我试图杀死该进程,它不会让我(无法杀死非用户进程)。

有人知道怎么回事吗?

【问题讨论】:

  • 您是否尝试过检查关闭现有连接选项?
  • 您不是您要删除的数据库是吗?听起来很愚蠢,执行此类命令时您必须在不同的数据库中
  • 这个问题在serverfault.com上得到好答案的机会可能更大
  • 谢谢大家,我将只使用:alter database [MyDatbase] set single_user with rollback immediate for now。

标签: sql-server database-connection database-backups


【解决方案1】:

我喜欢这个脚本。不要为杀戮而挣扎..

use master

alter database xyz set single_user with rollback immediate

restore database xyz ...

alter database xyz set multi_user

【讨论】:

  • 这是什么天才解决方案。
【解决方案2】:

我在尝试从备份还原数据库时遇到了同样的问题。对我来说,解决方案是确保在执行还原之前在选项页面中选中“覆盖现有数据库(WITH REPLACE)”和“关闭与目标数据库的现有连接”。这是下面的屏幕截图。

【讨论】:

  • 对于那些比较随意或不经常使用 SSMS 或 SQL 的 GUI 用户,通常知道如何在还原期间勾选这些选项是关键选项
  • “关闭与目标数据库的现有连接”并不总是可用的。我不知道为什么 - 根据我的观察,它在我的本地数据库上始终可用简单恢复模式,但如果我从设置为完全恢复模式的服务器恢复备份,则永远不可用。
  • 它并不总是可用,因为 Microsoft 的某个人做出了错误的决定。当我想恢复数据库时,我已经决定任何连接的用户都需要断开连接,因此阻止恢复是不受欢迎的行为。
【解决方案3】:

可能有很多东西阻塞了您的数据库。例如,如果您在该数据库上打开了一个查询窗口,它将被您锁定。不计算外部访问,例如 IIS 上的 Web 应用程序。

如果您真的想强制删除它,请检查关闭现有连接选项或尝试手动停止 SQL Server 的服务。

【讨论】:

  • 是的,因为我一直在手动重启服务,但显然我不能继续这样做。我将尝试关闭现有连接选项。
  • @tuseau 如果您尝试以可视方式而不是通过命令行删除数据库,则该选项可用。真诚地,我不知道如何以编程方式设置该选项。但是,如果您尝试从视觉上删除它,您会注意到该复选框。很高兴我能帮上忙。
  • 确实,我发现即使在 SQL Server Management Studio 中打开查询选项卡也会阻止数据库将其关闭。
  • 不可能使用从备份创建新数据库。这是一个虚假的错误,但是,它不断阻碍完成工作。
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
相关资源
最近更新 更多