事务隔离级别快照不支持远程访问 - 这是有条件的吗?



伙计们 - 很抱歉重新讨论这个话题,因为我甚至在 Stack 上看到,关于这个话题已经有很多问题了。

但我发现自己在一个有趣的地方,我希望你能提供帮助。

高级问题:SQL SERVER 是否有余地来决定视图是否应包装在隔离级别快照中?

我知道这听起来像是一个疯狂的问题,但我试图用尽我遇到的问题的所有途径。

我正在使用一个运行 35 个查询的应用程序,以通过链接服务器从另一个数据库中检索数据。这些查询分别是针对一个表的简单选择。所有数据库操作都是针对 SQL SERVER 执行的,检索代码为 ADO.NET/c# 等。

其中 34 个查询完美运行 - 但有一个坏苹果,为此,我遇到了事务隔离级别快照问题。

我还在应用程序外部测试了数据检索,当我在"问题"查询上实现以下代码片段时,我也遇到了问题:

using (var trans = conn.BeginTransaction(IsolationLevel.Snapshot))

但是,当我不在所述查询上实现它时,一切都很好。 我还针对其他查询对此进行了测试——有和没有"Shapshot"——我的结果是可预测的......有了"Shapshot",没有查询过程...如果未实现,所有查询都会处理...

我的结果表明,应用程序负责更改数据检索策略。

根据他们的知识库,我发现这个:Locking is handled by the database level (MS SQL Server/Oracle) and not by "us". Generally, locking is row level but the optimizer may choose something different

不幸的是,我没有对负责数据检索的样板应用程序代码的本机访问权限。 我怀疑这个特定的查询/表有一个或多个关键字 - 在列或查询/表命名中 - 触发应用程序使用备用检索策略。 根据开发人员论坛,我已经询问了这种情况,我正在等待回复......

无论如何,回到他们提到的the optimizer may choose something different- 他们的优化器,或者数据库优化器?是否可以将SQL SERVER设置为进行"判断调用"?是声明不清楚,还是我对SQL SERVER及其功能不够?

我知道这似乎是一个疯狂的问题,但我真的想在这里敲掉所有可能的途径。 感谢您暂停您的不相信并幽默那个疯狂的帖子:)

显然,带有"估值"一词的对象(可能是因为所暗示的敏感性)会导致应用程序构建事务。更改视图名称后,数据成功返回到客户端。

所以是的,应用程序是/是问题所在。

最新更新