如何终止当前与SQL Server 2005数据库的所有连接?
时间:2020-03-05 18:39:44 来源:igfitidea点击:
我想重命名数据库,但不断收到错误消息"数据库无法获得排他锁",这意味着仍有一些连接处于活动状态。
如何终止与数据库的所有连接,以便对其进行重命名?
解决方案
回答
在对象浏览器上的MS SQL Server Management Studio中,右键单击数据库。在随后的上下文菜单中,选择"任务->脱机"
回答
请参阅终止与数据库的所有活动连接。
亚当建议的方法行不通的原因是,在循环活动连接的过程中,可以建立新的连接,而我们会错过这些连接。我链接到的文章使用以下方法,但没有此缺点:
-- set your current connection to use master otherwise you might get an error use master ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE --do you stuff here ALTER DATABASE YourDatabase SET MULTI_USER
回答
为此,请用脚本替换" DB_NAME"以终止与以下数据库的所有连接:
USE master GO SET NOCOUNT ON DECLARE @DBName varchar(50) DECLARE @spidstr varchar(8000) DECLARE @ConnKilled smallint SET @ConnKilled=0 SET @spidstr = '' Set @DBName = 'DB_NAME' IF db_id(@DBName) < 4 BEGIN PRINT 'Connections to system databases cannot be killed' RETURN END SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; ' FROM master..sysprocesses WHERE dbid=db_id(@DBName) IF LEN(@spidstr) > 0 BEGIN EXEC(@spidstr) SELECT @ConnKilled = COUNT(1) FROM master..sysprocesses WHERE dbid=db_id(@DBName) END
回答
使用SQL Management Studio Express:
在"对象资源管理器"树中,在"管理"下向下钻取到"活动监视器"(如果在那里找不到它,则右键单击数据库服务器,然后选择"活动监视器")。打开活动监视器,我们可以查看所有过程信息。我们应该能够找到我们感兴趣的数据库的锁,并杀死这些锁,这也会终止连接。
之后,我们应该可以重命名了。
回答
试试这个:
ALTER DATABASE [DATABASE_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
回答
我一直使用:
ALTER DATABASE DB_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO SP_RENAMEDB 'DB_NAME','DB_NAME_NEW' Go ALTER DATABASE DB_NAME_NEW SET MULTI_USER -- set back to multi user GO
回答
在尝试还原数据库时,通常会遇到该错误,我通常只是移至Management Studio中树的顶部,然后右键单击并重新启动数据库服务器(因为它在开发机器上,因此在生产中可能并不理想)。这将关闭所有数据库连接。
回答
杀死它,然后用火杀死它:
USE master go DECLARE @dbname sysname SET @dbname = 'yourdbname' DECLARE @spid int SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) WHILE @spid IS NOT NULL BEGIN EXECUTE ('KILL ' + @spid) SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid END
回答
这是在MS SQL Server Management Studio 2008中可靠地进行此类操作的方法(也可能适用于其他版本):
- 在"对象资源管理器树"中,右键单击根数据库服务器(带有绿色箭头),然后单击"活动监视器"。
- 在活动监视器中打开"进程"选项卡,选择"数据库"下拉菜单,然后按所需的数据库进行筛选。
- 在对象资源管理器中右键单击数据库,然后启动"任务->脱机"任务。在我们执行以下操作时,让它在后台运行
- 安全关闭所有可能的工具。
- 从"进程"选项卡中杀死所有剩余的进程。
- 使数据库重新联机。
- 重命名数据库。
- 使服务重新联机,然后将其指向新的数据库。
回答
右键单击数据库名称,单击"属性"以获取属性窗口,打开"选项"选项卡,然后将"限制访问"属性从"多用户"更改为"单用户"。当我们单击"确定"按钮时,它将提示我们关闭所有打开的连接,选择"是",并设置为重命名数据库...。