管理工作室的任务卡住了,你是怎么处理的?

A_V*_*A_V 16 sql-server ssms

在管理工作室中单击“使数据库脱机”后,如果单击关闭,此消息将保持挂起并且不会关闭。

https://i.imgur.com/KD6AROv.png

在管理工作室处理此类卡住工作的好方法是什么?你能通过活动监视器杀死他们吗?我应该寻求什么过程阻止这项工作通过并终止它?

Aar*_*and 17

我会说永远不要在 GUI 中使用“脱机”的东西,除非你知道数据库没有被使用。通过任何东西。如果不做一些跑腿工作就很难知道这一点,那么为什么不将此脚本保存在某处并始终使用它呢?

USE [master];
GO
ALTER DATABASE $dbname$ SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE $dbname$ SET OFFLINE;
Run Code Online (Sandbox Code Playgroud)

然后当然是倒数:

ALTER DATABASE $dbname$ SET ONLINE;
GO
ALTER DATABASE $dbname$ SET MULTI_USER;
Run Code Online (Sandbox Code Playgroud)

您需要将其设置为SINGLE_USERfirst的原因是踢出任何现有用户(在分离对话框中可以选择这样做,而不是在脱机对话框中这样做),因为 SQL Server 需要对数据库的独占访问权限才能采取它离线。现在,您可能想要做一些额外的工作,以查看当前谁在使用数据库,就好像您在大型备份操作或 ETL 作业或您拥有的东西的中间执行此操作一样,这可能会出现问题。

编辑:我已经在 Connect 上提交了关于此的建议(请参阅Connect #2687832),并将其发布到Trello(在“对象资源管理器”下提交)。

这已在 SSMS 16.3 中修复;现在有一个复选框,询问您是否要强制终止任何活动连接。


小智 13

当您已经处于挂起状态时,请不要忘记您可以使用以下命令在服务器上搜索打开的连接

sp_who2  
Run Code Online (Sandbox Code Playgroud)

在另一个数据库中,例如 master。
扫描您尝试脱机的任何数据库的结果。
请注意这些行的 spid(进程 ID)列值。

一次一个,跑

kill  ##
Run Code Online (Sandbox Code Playgroud)

其中“##”是 spid。

当然要小心以确保这些进程不重要以保持运行......它们甚至会在没有完成最新命令并且没有警告的情况下被终止。

  • 接受的答案对我没有帮助。第一个命令失败。这个答案完美无缺。谢谢 (2认同)