我们一段时间以来一直遇到数据存储在SQL数据库中的问题。
有时记录的保存数据与行的其余部分不匹配,使得它似乎在某些时候,在传递给数据库之前,数据被“交换”为其他东西,也许是另一个用户的数据。
我们确实使用TransactionScopes和 ReadCommitted 的隔离级别,这使我认为数据完整性问题在于应用程序而不是数据库级别。
我们广泛使用会话,并且我们开始认为损坏数据的时间与我们在白天部署系统更新的时间相似。
我们确实使用aspnet_state服务来保持会话重启应用程序。
我们的用户依赖于终端会话,因此多个用户都登录到同一服务器并通过浏览器启动系统。
我们过去曾注意到用户使用相同的域凭据登录,但我们现在相对确信用户现在使用唯一帐户登录。
99.9%的数据是正确的,但我们一直在努力了解可能导致此间歇性数据完整性问题的原因。
我们现在将我们的部署限制在工作时间以外的死亡之痛,但这并非总是可行。
任何人都可以阐明为什么会发生这种情况或者如何发生这种情况?
编辑:我们现在已将此与DAL层隔离,请参阅SQL query returns incorrect value in multi user environment
答案 0 :(得分:2)
我最近一直在与此作斗争!并且与你的问题类似,大约95%的数据回写是正确的。我查看了各种原因,主要原因是网络上的一些用户下载了Chrome并在Chrome中打开了记录,打破了会话ID,因为Chrome忽略了会话。
另一个原因是用户没有关闭浏览器或没有注销应用程序,允许相同的用户或完全不同的用户选择和使用会话ID。
在引入浏览器检查然后拒绝Chrome后,教育用户确保他们注销,对外部繁忙时段进行任何更新,问题就此消失了。
我忘了提及,在你的IIS上最好关闭输出缓存中的缓存,为用户和内核设置阻止缓存。