我有一个大型Web应用程序,它使用针对SQL Server 2005数据库的COM数据访问层。默认情况下,隔离级别为READ_COMMITTED。现在我了解READ_COMMITTED_SNAPSHOT隔离级别是如何工作的,并且阅读MSDN它说你可以透明地打开它。但是,我仍然持怀疑态度。 :)如果我从READ_COMMITTED更改为READ_COMMITTED_SNAPSHOT,它是否以实现方式保证我的应用程序不会中断(不要假设应用程序通过本书完成所有操作)? COM层不会抛出其他异常吗?事务语义是一样的吗?
PS。通过实现方式,我的意思是READ_COMMITTED_SNAPSHOT隔离级别实现故意以完全作为READ_COMMITTED,只使用行版本而不是锁?
感谢您有任何见解或您自己切换到此隔离模式的经历。
答案 0 :(得分:1)
不,它们没有相同的行为:READ_COMMITTED通过锁定保证没有脏读,READ_COMMITTED_SNAPSHOT通过获取表的快照来实现。
使用READ_COMMITTED_SNAPSHOT,您的交易可以读取由与您的交易并行运行的另一个会话更改的旧数据。
虽然大多数情况下这不会破坏应用程序逻辑,但不保证您的特定应用程序不依赖于锁定行为。
安全地更改隔离级别的唯一方法是审核所有数据库代码并检查是否存在问题。