SQL Server:将数据库模式设置为 RESTRICTED_USER WITH ROLLBACK IMMEDIATE 并不总是删除所有连接

lac*_*dev 2 sql-server-2005 database-restore

我需要使用 SMO 从 .NET 执行数据库恢复。在恢复之前,我将数据库设置为 RESTRICTED_USER WITH ROLLBACK IMMEDIATE 模式。这在测试/调试期间工作正常 - 所有用户都被删除。但是,当此代码在夜间作为自动化过程的一部分运行时,有时会出现以下异常:

Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行 Transact-SQL 语句或批处理时发生异常。---> System.Data.SqlClient.SqlException: 由于数据库正在使用中,无法获得独占访问权限。RESTORE DATABASE 异常终止

这里发生了什么事?谢谢!

CaR*_*iaK 5

你能不做吗?

alter database <db_name> set single_user with rollback immediate
Run Code Online (Sandbox Code Playgroud)

然后在备份后添加另一个 TSQL 步骤:

alter database <db_name> set multi_user
Run Code Online (Sandbox Code Playgroud)

或者,要找出在夜间运行时可能发生的情况,请以某种方式捕获结果

EXEC sp_who2
Run Code Online (Sandbox Code Playgroud)

这会告诉您当时谁已连接。