SQL Server - 读取同一事务的未提交更改时的不一致行为

时间:2009-04-22 11:02:12

标签: sql-server transactions snapshot-isolation

使用具有隔离级别“读取提交的快照”的SQL服务器,我们会定期将数据写入数据库并在同一事务的上下文中进一步读取。通常,当从数据库中读取时,我们会看到我们自己的未提交的更改,但只有其他人提交的更改。我们假设这是预期的行为。

我们现在发现,在一些相对罕见的情况下,我们没有看到我们写的值 - 只是之前提交的值。

任何可能导致不一致的想法?

2 个答案:

答案 0 :(得分:0)

关于可能出错的一些好文章。也许他们可能会帮助

Craig Freedman, Serializable vs. Snapshot Isolation Level 黑/白大理石类比

Hugo Kornelis, 4 articles "Snapshot isolation: A threat for integrity":DRI / FK默默地改变到不同的隔离级别

答案 1 :(得分:0)

事实证明,这是SQL Server中已知的不一致:当您从数据库中读取时,您通常会看到自己的事务的未提交更改(在所有隔离级别中),但这并不总能得到保证。在我的情况下,解决方法是使用with (readuncommitted),信任应用程序级锁定机制,以防止对同一数据进行并发修改。

我从两位独立的数据库专家那里得到了同样的答案。不幸的是,我没有找到任何关于这个问题的书面参考。