嗨,Stackoverflow社区,
让我寻求帮助,因为我遇到了一个严重问题。
我们有两个链接的服务器,都是Microsoft SQL Server:CRM和DW服务器。 CRM系统中的某些更改触发了一个过程,该过程可立即获取DW服务器的更新,而其工作方式是 CRM系统调用DW服务器以更新记录。在我的情况下,来自 CRM系统的CRM和DW sql服务器的更新称为同步,这里的问题就开始了。
DW服务器尝试在事务开始之前读取更改并仅仅获取记录。是的,发生这种情况是因为CRM服务器使用:
读取提交的快照
很遗憾,我们无法更改CRM sql服务器上的隔离级别。简单的解释-CRM来自第三方提供商,他们希望限制我们提供这些可能性。
还有其他方法可以等待事务提交,然后在提交后读取最新数据吗?
如果缺少信息,请告诉我,然后我将提供更多见解。
答案 0 :(得分:0)
我不了解这里的控制流程,但是从第一段开始,您说过CRM中的更新会触发一个过程来更新DW服务器。因此,我看不到CRM服务器之前DW服务器如何进行更新。您说它们同时被调用,但这会否定有关触发器的注释。您不希望DW读取脏数据,因此在这里READ COMMITTED SNAPSHOT是一个不错的选择,但是您也可以在事务级别指定所需的隔离级别并覆盖服务器默认值。
自从您询问“是否有一种方法可以等待事务提交,然后在提交之后读取最新数据?” 。当然,可以通过几种方法来解决...
UPDATE
语句之后的代码块中将INSERT
添加到DW中。在这里,您可以使用TRY / CATCH
,当然也可以使用SET XACT_ABORT ON,这样,如果发生任何故障,则会回滚整个事务。请记住,nested transaction aren't real.