1

我有一个针对 SQL Server 2005 数据库使用 COM 数据访问层的大型 Web 应用程序。默认情况下,隔离级别为 READ_COMMITTED。现在我了解了 READ_COMMITTED_SNAPSHOT 隔离级别是如何工作的,并且阅读 MSDN 说你可以透明地打开它。但是,我仍然持怀疑态度。:) 如果我从 READ_COMMITTED 更改为 READ_COMMITTED_SNAPSHOT,是否以实施方式保证我的应用程序不会中断(不要假设应用程序按规定完成所有操作)?不会向 COM 层抛出额外的异常?事务语义是否相同?

PS。通过实现方式,我的意思是故意实现 READ_COMMITTED_SNAPSHOT 隔离级别以完全像 READ_COMMITTED 一样工作,只是使用行版本控制而不是锁?

感谢您对切换到这种隔离模式的任何见解或您自己的经验。

4

1 回答 1

1

不,它们的行为不同:READ_COMMITTED 通过锁定保证没有脏读,READ_COMMITTED_SNAPSHOT 通过获取表的快照来做到这一点。

使用 READ_COMMITTED_SNAPSHOT,您的事务可以读取已被与您的事务并行运行的另一个会话更改的旧数据。

虽然在大多数情况下这不会破坏应用程序逻辑,但不能保证您的特定应用程序不依赖于锁定行为。

安全更改隔离级别的唯一方法是审核所有数据库代码并检查是否存在问题。

于 2011-04-07T13:00:12.910 回答