【问题标题】:remote access is not supported for transaction isolation level snapshot - is this conditional?事务隔离级别快照不支持远程访问 - 这是有条件的吗?
【发布时间】:2017-08-23 08:35:20
【问题描述】:

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

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

高级问题:SQL SERVER 是否有余地来决定应将视图包装在 ISOLATION LEVEL SNAPSHOT 中吗?

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

我正在使用一个运行 35 个查询以通过 Link Server 从另一个数据库检索数据的应用程序。查询是分别针对一个表的简单选择。所有DB操作均针对SQL SERVER进行,检索代码为ADO.NET/c#等

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

我还在应用程序之外测试了数据检索,当我在“问题”查询中实现以下 sn-p 时,我也遇到了问题:

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 及其功能不够了解?

我知道这似乎是一个疯狂的问题,但我真的想在这里排除所有可能的途径。 谢谢你暂停你的怀疑和幽默那个疯狂的帖子:)

【问题讨论】:

  • 您在知识库中找到的引用涉及锁定技术(行级与表级)而不是隔离级别(可序列化、快照等)。应用程序必须为单个问题查询指定快照隔离级别。如果不更改代码,我认为您无法解决此问题。
  • 同意 - 显然带有“评估”一词的对象(可能是因为隐含的敏感性质)导致应用程序构建事务。更改视图名称后,数据成功返回客户端。

标签: c# sql-server database transactions isolation-level


【解决方案1】:

显然,带有“评估”一词的对象(可能是因为隐含的敏感性质)导致应用程序构建事务。更改视图名称后,数据成功返回客户端。

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

【讨论】:

    猜你喜欢
    • 2019-11-14
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多