1

使用下面的代码我无法关闭快照隔离。我正在使用 SQL Server 2012 框。我可以创建全新的空数据库,打开快照隔离,但我无法将其关闭。

“allow_snapshot_isolation OFF”行只是旋转它的轮子。

ALTER DATABASE SNAP SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE SNAP SET allow_snapshot_isolation OFF
ALTER DATABASE SNAP SET read_committed_snapshot off
ALTER DATABASE SNAP SET MULTI_USER 
4

2 回答 2

0

您确定没有在数据库上运行其他事务吗?记住使用的隐式事务,例如。通过 JDBC 驱动程序(当您将 Autocommit 设置为 false 时)。

如果任何先前的事务处于挂起状态,则无法关闭快照隔离。这是因为它必须确保任何其他事务都不会尝试使用以前的行版本。但是,可以跨多个数据库进行查询,因此设置快照隔离不仅仅是处理一个数据库上的事务。

sp_who2您可以通过使用和SELECT * FROM sys.sysprocesses搜索您的更改过程来检查是否是这种情况。sp_who2将显示该进程已暂停,并且通过使用sys.sysprocesses您可能会发现它的最后等待类型是“DISABLE_VERSIONING”。

因此,您的解决方案是回滚所有事务(或在隐式事务的情况下关闭连接)。请注意,如果您使用某个程序的连接池,例如,您可能会在两个或三个数据库中打开 40 个隐式事务。如果它们是在打开快照模式后打开的,那么在它们结束之前将其关闭是不可能的。

于 2016-03-15T08:58:53.887 回答
0

我在下面关注了我遇到的相同问题

USE master;  
GO  
ALTER DATABASE MYDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE MYDB MODIFY NAME = MYDB_1;
GO  
ALTER DATABASE MYDB_1 SET READ_COMMITTED_SNAPSHOT OFF;
GO
ALTER DATABASE MYDB_1 MODIFY NAME = MYDB;
GO
ALTER DATABASE MYDB SET MULTI_USER;
于 2022-02-04T17:29:15.963 回答