运行 Alter Database 并将 READ_COMMITTED_SNAPSHOT 设置为 ON

Fem*_*emi 5 t-sql sql-server-2012

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

 ALTER DATABASE DBNAME
 SET READ_COMMITTED_SNAPSHOT ON
Run Code Online (Sandbox Code Playgroud)

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

对于如何在不断开所有其他用户与数据库的连接的情况下运行它,有什么建议吗?谢谢

Chr*_*eld 3

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

这里有更多关于该主题的信息:http://www.brentozar.com/archive/2013/01/implementing-snapshot-or-read-commited-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 将暂停六秒并重试该操作。