使用将READ_COMMITTED_SNAPSHOT设置为ON运行Alter Database

时间:2015-07-01 16:41:24

标签: tsql sql-server-2012

我正在尝试运行下面的SQL语句:

 ALTER DATABASE DBNAME
 SET READ_COMMITTED_SNAPSHOT ON

然而,当我跑完它没有完成执行我必须在1小时后终止。

对于如何在不断开所有其他用户与数据库的连接的情况下运行此操作是否有任何建议? 感谢

1 个答案:

答案 0 :(得分:1)

此命令的完成需要立即成为针对数据库打开的唯一事务。在我看来,这个几乎要求你简单地将数据库置于单用户模式。但也许如果你只是让查询(试图)在一夜之间运行,那么在某些时候你会得到那个神奇的瞬间。

这里有关于这个主题的更多内容:http://www.brentozar.com/archive/2013/01/implementing-snapshot-or-read-committed-snapshot-isolation-in-sql-server-a-guide/

编辑:在线图书提供了更多细节:

  

当您将ALLOW_SNAPSHOT_ISOLATION设置为新状态(从ON到OFF,或从OFF到ON)时,ALTER DATABASE不会将控制权返回给调用者,直到提交了数据库中的所有现有事务。如果数据库已处于ALTER DATABASE语句中指定的状态,则会立即将控制权返回给调用方。如果ALTER DATABASE语句未快速返回,请使用sys.dm_tran_active_snapshot_database_transactions来确定是否存在长时间运行的事务。如果取消ALTER DATABASE语句,则数据库将保持ALTER DATABASE启动时的状态。 sys.databases目录视图指示数据库中快照隔离事务的状态。如果snapshot_isolation_state_desc = IN_TRANSITION_TO_ON,则ALTER DATABASE ALLOW_SNAPSHOT_ISOLATION OFF将暂停6秒并重试该操作。