tsql等待更改并启用“读取已提交的快照”

时间:2018-08-23 09:46:23

标签: sql-server tsql isolation-level read-committed-snapshot

嗨,Stackoverflow社区,

让我寻求帮助,因为我遇到了一个严重问题。

我们有两个链接的服务器,都是Microsoft SQL Server:CRM和DW服务器。 CRM系统中的某些更改触发了一个过程,该过程可立即获取DW服务器的更新,而其工作方式是 CRM系统调用DW服务器以更新记录。在我的情况下,来自 CRM系统的CRM和DW sql服务器的更新称为同步,这里的问题就开始了。

DW服务器尝试在事务开始之前读取更改并仅获取记录。是的,发生这种情况是因为CRM服务器使用:

  

读取提交的快照

很遗憾,我们无法更改CRM sql服务器上的隔离级别。简单的解释-CRM来自第三方提供商,他们希望限制我们提供这些可能性。

还有其他方法可以等待事务提交,然后在提交后读取最新数据吗?

如果缺少信息,请告诉我,然后我将提供更多见解。

1 个答案:

答案 0 :(得分:0)

我不了解这里的控制流程,但是从第一段开始,您说过CRM中的更新会触发一个过程来更新DW服务器。因此,我看不到CRM服务器之前DW服务器如何进行更新。您说它们同时被调用,但这会否定有关触发器的注释。您不希望DW读取脏数据,因此在这里READ COMMITTED SNAPSHOT是一个不错的选择,但是您也可以在事务级别指定所需的隔离级别并覆盖服务器默认值。

自从您询问“是否有一种方法可以等待事务提交,然后在提交之后读取最新数据?” 。当然,可以通过几种方法来解决...

  • 一个将是AFTER INSERT触发器
  • 另一种方法是,以相同的过程在UPDATE语句之后的代码块中将INSERT添加到DW中。在这里,您可以使用TRY / CATCH,当然也可以使用SET XACT_ABORT ON,这样,如果发生任何故障,则会回滚整个事务。请记住,nested transaction aren't real.