【问题标题】:How to detect READ_COMMITTED_SNAPSHOT is enabled?如何检测 READ_COMMITTED_SNAPSHOT 是否启用?
【发布时间】:2010-09-08 07:04:10
【问题描述】:

在 Microsoft SQL Server 中,有没有办法通过 T-SQL 命令ALTER DATABASE <database> SET READ_COMMITTED_SNAPSHOT ON; 检测数据库是否设置了其隔离级别?

我找不到在 T-SQL 或通过 Management Studio 的 GUI 中检测到这一点的简单方法。

【问题讨论】:

    标签: sql-server isolation-level read-committed-snapshot


    【解决方案1】:
    SELECT is_read_committed_snapshot_on FROM sys.databases 
    WHERE name= 'YourDatabase'
    

    返回值:

    • 1READ_COMMITTED_SNAPSHOT 选项为ONREAD COMMITTED 隔离级别下的读取操作基于快照扫描,不获取锁。
    • 0(默认):READ_COMMITTED_SNAPSHOT 选项为 OFFREAD COMMITTED隔离级别下的读操作使用Shared (S) locks

    【讨论】:

    • 我喜欢“DBCC USEROPTIONS”,好记一点。
    • @ProVega - DBCC USEROPTIONS 不返回 is_read_committed_snapshot_on 的值。
    【解决方案2】:
    1. 根据DBCC USEROPTIONS (Transact-SQL):

    当数据库选项 READ_COMMITTED_SNAPSHOT 设置为 ON 且事务隔离级别设置为“已提交读”时,DBCC USEROPTIONS 报告隔离级别为“已提交读快照”。实际的隔离级别是读提交的。

    1. 同样在 SQL Server Management Studio 中,在 Options->Miscellaneous 下的数据库属性中,有“Is Read Committed Snapshot On”选项状态

    【讨论】:

      【解决方案3】:

      在 SQL2005 和 2012 上,DBCC USEROPTIONS 都不会显示 is_read_committed_snapshot_on

      Set Option  Value
      textsize    2147483647
      language    us_english
      dateformat  mdy
      datefirst   7
      lock_timeout    -1
      quoted_identifier   SET
      arithabort  SET
      ansi_null_dflt_on   SET
      ansi_warnings   SET
      ansi_padding    SET
      ansi_nulls  SET
      concat_null_yields_null SET
      isolation level read committed
      

      【讨论】:

      • DBCC USEROPTIONS 中的隔离级别确实可以告诉您。如果是read committed snapshot,则开启,否则关闭
      • @Greg - 读取提交快照设置在数据库级别,而不是用户连接级别。 DBCC USEROPTIONS 不会告诉你它是打开还是关闭。
      猜你喜欢
      • 2020-10-20
      • 1970-01-01
      • 2010-09-10
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      相关资源
      最近更新 更多