当前位置:  开发笔记 > 编程语言 > 正文

如何获得SQL Server 2005数据库的独占访问权限?

如何解决《如何获得SQLServer2005数据库的独占访问权限?》经验,为你挑选了3个好方法。

每当我在SQL Server中恢复数据库的备份时,都会出现以下错误:

Msg 3101, Level 16, State 1, Line 1
Exclusive access could not be obtained because the database is in use.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

通常为了解决这个问题,我只需重启服务器即可.当我们在开发机器上的本地实例上进行开发时,这很好.但是我们有一些程序员需要访问数据库,让每个人编写脚本更改并将其放入Subversion的后勤工作正成为一场噩梦.无论我们的简单解决方案是将它放在办公室的共享服务器上,偶尔备份服务器以防万一有人搞砸了数据.

好吧,我搞砸了数据并需要恢复.不幸的是,我在办公室有另一个同事,正在开发另一个项目并使用相同的数据库服务器进行开发.为了好,我想恢复而不重新启动SQL Server并可能破坏他的工作.

有没有办法在T-SQL中编写脚本以便能够进行独占访问或删除所有连接?



1> mattlant..:

您可以强制数据库脱机并删除连接:

EXEC sp_dboption N'yourDatabase', N'offline', N'true'

或者你可以

ALTER DATABASE [yourDatabase] SET OFFLINE WITH
ROLLBACK AFTER 60 SECONDS

Rollback指定是否正在执行任何操作.在那段时间之后,他们将被退回.所以它提供了一些保护.

对不起我没想到/正确读书.你可以回到网上和备份.在T-SQL片段上还有一篇关于Stack Overflow的帖子,用于删除所有连接而不是首先脱机:SQL Server的隐藏功能



2> Precipitous..:

我觉得这比离线要快得多,而且通常要好一些.请在MSDN中阅读它,以便您了解警告.如果使用aysnc统计信息,您也必须关闭它们.

-- set single user, terminate connections
ALTER DATABASE [target] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE ...
ALTER DATABASE [target] SET MULTI_USER

"立即回滚"是必不可少的"终止"条款.离开它等待永远.上述更好的版本为用户事务提供了几秒钟的终止时间.

ALTER DATABASE [target] SET SINGLE_USER WITH ROLLBACK AFTER 5

如果要复制数据库文件,离线是一个好主意,这种情况在桌面版SQL中很方便.对于这种情况太重了.如果离线,这将是首选.SQL正在远离sp_dboption.

ALTER DATABASE [target] SET OFFLINE WITH ROLLBACK AFTER 5



3> RedWolves..:

@mattlant - 这就是我要找的东西.我把它带到这里,所以它在线程中.

Use Master
Go

Declare @dbname sysname

Set @dbname = 'name of database you want to drop connections from'

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

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有