我想在我们的一个系统(SQL Server 2016 SP2 CU17)上删除一个数据库,但是在单用户模式下设置数据库的过程卡在等待类型 PRINT_ROLLBACK_PROGRESS 上。我使用下面的语句。
GO
ALTER DATABASE MyDatabaseName
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
消息选项卡也会生成此消息一百万次:
“正在回滚不合格的事务。预计回滚完成度:0%。”
我们还让语句运行了 1.5 小时,不幸的是没有运气。
因此,我检查数据库是否有任何与 DBCC OPENTRAN 相关的开放事务,但没有。其次,sp_WhoIsActive 不显示数据库上的任何活动进程。Sp_who2 也不再显示与相关数据库的任何连接。我在某处发现了一个建议将数据库选项 AUTO_UPDATE_STATISTICS_ASYNC 设置为关闭的线程,但那已经关闭了。
但是我真的怀疑有一些系统进程正在做一些事情来阻止上面的语句成功地将数据库设置为单用户模式。我也尝试了 WITH NO_WAIT,但在超时后如预期的那样给了我一条错误消息。我还关闭了 AUTO_UPDATE_STATISTICS 只是为了确定,但这当然没有帮助。
我认为服务器重启是可能的,因为没有正在回滚的用户进程,所以我预计启动时间不会太长。但是,从现在起 2 周后才能重新启动,因为这是一个生产服务器,所以我正在寻找一种更干净的方法来完成这项工作。希望有人能帮忙。