使用 Dirty Read 隔离级别

不论在它们之上是否有锁,都使用 Dirty Read 选项来从数据库复制行。获取行的程序不放置锁且不予考虑。Dirty Read 是不实现会话日志记录的数据库的唯一可用的隔离级别。

此隔离级别最适合于用于数据未被修改的表上的查询的静态表,因为它不提供隔离。通过 Dirty Read,程序可能返回在随后已回滚了的事务之内插入或修改了的未提交的行,或当您首次读查询集时不可见的幻像行,但会在同一事务内随后的读之前在查询集中具体化。(仅 Repeatable Read 隔离级别防止访问幻像行。仅 Dirty Read 提供从并发事务访问未提交的行,这些事务可能随后被回滚。)

当使用 Dirty Read 隔离级别的 DML 操作可能返回未提交的行或幻像行时,可选的 WITH WARNING 关键字指导数据库服务器发出警告。下列示例中的事务使用此隔离级别:
BEGIN WORK;
        SET ISOLATION TO DIRTY READ WITH WARNING;
        ...
        COMMIT WORK;
      

Dirty Read 隔离级别对 USELASTCOMMITTED 配置参数和 USELASTCOMMITTED 会话环境变量的当前设置非常敏感。要获取更多当将隔离级别设置为 DIRTY READALL 时 Dirty Read 隔离级别的行为的信息,请参阅 Committed Read 的 LAST COMMITTED 选项

当您使用“高可用性数据复制”时,数据库服务器有效地使用“HDR 辅助服务器”上的 Dirty Read 隔离,不理会指定的 SET ISOLATION 或 SET TRANSACTION 隔离级别,除非启用 UPDATABLE_SECONDARY 配置参数。要获取关于此主题的更多信息,请参阅 辅助数据复制服务器的隔离级别