首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >终止与数据库的所有连接的脚本(多于RESTRICTED_USER回滚)

终止与数据库的所有连接的脚本(多于RESTRICTED_USER回滚)
EN

Stack Overflow用户
提问于 2011-08-26 05:42:47
回答 11查看 635.6K关注 0票数 272

我有一个开发数据库,经常从Visual Studio数据库项目重新部署(通过TFS自动构建)。

有时,当我运行我的构建时,我会得到这样的错误:

代码语言:javascript
复制
ALTER DATABASE failed because a lock could not be placed on database 'MyDB'. Try again later.  
ALTER DATABASE statement failed.  
Cannot drop database "MyDB" because it is currently in use.  

我试过这个:

代码语言:javascript
复制
ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE

但我还是不能删除数据库。(我猜大多数开发人员都有dbo访问权限。)

我可以手动运行SP_WHO并开始终止连接,但我需要一种在自动构建中执行此操作的自动方法。(尽管这一次我的连接是我试图断开的数据库上唯一的连接。)

是否有脚本可以删除我的数据库,而不管连接的是谁?

EN

回答 11

Stack Overflow用户

发布于 2011-08-26 06:00:08

代码语言:javascript
复制
USE master
GO
ALTER DATABASE database_name
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO

参考:http://msdn.microsoft.com/en-us/library/bb522682%28v=sql.105%29.aspx

票数 135
EN

Stack Overflow用户

发布于 2015-10-01 00:13:35

鲜为人知的是: GO sql语句可以接受一个整数来表示重复前一个命令的次数。

因此,如果您:

代码语言:javascript
复制
ALTER DATABASE [DATABASENAME] SET SINGLE_USER
GO

然后:

代码语言:javascript
复制
USE [DATABASENAME]
GO 2000

这将重复USE命令2000次,在所有其他连接上强制执行死锁,并取得单个连接的所有权。(给你的查询窗口独占的访问权去做你想做的事。)

票数 9
EN

Stack Overflow用户

发布于 2014-08-07 20:20:39

根据我的经验,使用SINGLE_USER在大多数情况下都很有用,但是要小心:我曾经经历过在启动SINGLE_USER命令和完成命令之间的情况……显然,另一个“用户”获得了SINGLE_USER访问权限,而不是我。如果发生这种情况,您将面临一项艰难的任务,即试图重新获得对数据库的访问权限(在我的示例中,它是为一个软件运行的特定服务,该软件具有比我更早获得SINGLE_USER访问权限的SQL数据库)。我认为应该是最可靠的方法(不能保证,但这是我未来几天会测试的),实际上是:

停止可能干扰您访问的服务(如果有)使用上面的'kill‘脚本关闭所有连接在此之后立即将数据库设置为single_user,然后执行恢复

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7197574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档