每当我在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中编写脚本以便能够进行独占访问或删除所有连接?
您可以强制数据库脱机并删除连接:
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的隐藏功能
我觉得这比离线要快得多,而且通常要好一些.请在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
@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