【问题标题】:Can I use both ReadCommited and ReadCommitedSnapshot Transaction Isolation Levels in my c# app?我可以在我的 c# 应用程序中同时使用 ReadCommited 和 ReadCommitedSnapshot 事务隔离级别吗?
【发布时间】:2013-06-21 12:44:16
【问题描述】:

有没有办法为某些 sql 查询使用 ReadCommited 事务隔离级别,同时为其他查询使用 ReadCommitedSnapshot

据我所知,一旦我为我的数据库SET READ_COMMITTED_SNAPSHOT ON,我之前在 ReadCommited IL 下运行的所有事务都将切换到 RCS

.NET我只有IsolationLevel.ReadCommited

当然,我不能在每次查询之前打开/关闭SET READ_COMMITTED_SNAPSHOT,因为它需要非常单一的 sql 连接(实际上需要一些时间)。

有什么选择吗?

编辑:向上!!!!!!

【问题讨论】:

  • 如果你没有得到你想要的答案,这往往表明你需要在你的问题上付出更多的努力和/或开始赏金。继续编辑您的问题以使其突出显示是不礼貌的。
  • @Damien_The_Unbeliever,好的,我明白了。我为此道歉。打算做一些调查/实验,并且可能自己回答。

标签: c# sql-server sql-server-2008 tsql transactions


【解决方案1】:

在 SQL Server 级别,只要ALLOW_SNAPSHOT_ISOLATIONON,您可以使用SET ISOLATION LEVEL 语句对其进行控制。 不要开启READ_COMMITTED_SNAPSHOT

这样,那些应该有正常RC 的连接就可以运行了:

SET TRANSACTION ISOLATION LEVEL READ_COMMITTED

(或者什么都不做)

对于您想要“RCS”的连接,运行:

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

【讨论】:

  • 感谢您的回答。如果我打开 ALLOW_SNAPSHOT_ISOLATION 并运行 SET TRANSACTION ISOLATION LEVEL SNAPSHOT,这将导致事务具有 Snapshot IL,而不是 RCS,不是吗?
  • @ArturUdod - 你想获得哪些区分 RCS 和 SNAPSHOT 的特征?
  • 来自我已经链接到的 Isolation Level 页面的备注部分:“事务隔离级别定义了在 read 操作中获取的锁的类型”(我的重点)
  • 我不明白这一点,你是想说服我使用快照而不是 rcs 吗?好吧,我倾向于这样做,但问题是如果我打开 RCS,是否可以使用普通 RC。
【解决方案2】:

使用 Snapshot 隔离级别,它实际上映射到 READ_COMMITTED_SNAPSHOT 这里是 msdn 链接 http://msdn.microsoft.com/en-us/library/system.transactions.isolationlevel.aspx

【讨论】:

  • 那么,如果我的数据库有SET READ_COMMITTED_SNAPSHOT ON 并且从我的c# 应用程序我用IsolationLevel.ReadCommited 打开一个事务,它将在普通的ReadCommited 下运行它?实际上在您的链接中看不到任何关于此的内容
  • 无论当前数据库设置如何,每个事务都可以有自己的隔离级别
  • 正在尝试运行嵌套事务?
  • 不,我希望能够同时为同一个数据库运行一个事务作为 RC,第二个事务作为 RCS。可以在 .net 中执行此操作吗?第一个指定RC,第二个指定Snapshot?有没有关于这方面的文章我可以阅读?
猜你喜欢
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2011-10-30
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多