如何在 SQL Server 中关闭已提交的读取快照时避免死锁



对于测试方案,我需要在 SQL 服务器实例上设置关闭已提交的读取快照。测试后,我需要还原更改。我使用 IF 语句来确定要执行的操作。这是我使用的脚本:

USE [master]
GO
IF 'Mycondition'
BEGIN
    ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    ALTER DATABASE [MyDB] SET READ_COMMITTED_SNAPSHOT OFF WITH NO_WAIT
    ALTER DATABASE [MyDB] SET MULTI_USER WITH NO_WAIT
END
ELSE
BEGIN
    ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    ALTER DATABASE [MyDB] SET READ_COMMITTED_SNAPSHOT ON WITH NO_WAIT
    ALTER DATABASE [MyDB] SET MULTI_USER WITH NO_WAIT
END
GO

但是,在运行此脚本时,似乎间歇性地出现死锁。有时操作会通过,而其他时候,会发生死锁,我的数据库卡在单用户模式下。无论如何,我可以确保不会发生这种情况吗?我考虑过删除WITH NO_WAIT条款,但这似乎没有帮助。

当我删除WITH NO_WAIT子句时,我似乎错过了一些东西。当我删除它时,它工作正常。

相关内容

  • 没有找到相关文章

最新更新