2011-12-14 78 views
1

我们有一个复杂的SSIS包(+子包),它从Access数据库读取数据并更新SQL Server(2008 R2)数据库。SSIS与SQL和JET的交易

它工作正常,但我希望整个包都是事务性的,所以要么插入/更新所有记录,要么都不是,以便SQL数据保持一致。

如果我设置包的TransactionOption要求当我运行包我得到一个消息,表明JET OLEDB连接无法在分布式事务中争取和包失败。

尽管对Access数据库进行了一些更新,但是如果这种状态处于不一致状态,则无关紧要,因为每次运行包时都会使用Access数据库的新副本。

有没有办法使包与单个分布式事务运行,但从事务中排除Access数据库连接?

我已经尝试了很多选项,但现在我只是绕着圈!提前致谢。

道格

回答

2

这不是完全清楚你的包逻辑是什么样子,但一个可能的解决办法是通过复制数据1启动:从Access数据库SQL Server中类似结构的表1。然后,您可以继续使用存储过程进行处理,并且因为所有数据都已存在于服务器上,所以事务更容易控制。

如果您有其他外部依赖项,这可能是不可能的,但它是一个相当常见的ETL模式(先将源数据复制到常见临时数据库,然后转换它),因此也可能需要考虑更普遍的原因。但是,这是否适合您取决于您​​的数据和系统环境。

+0

感谢您的建议。我们通过其他数据上传来做到这一点,我同意这将是一个更好的方法。 再次感谢您的快速响应。 – Doug 2011-12-14 12:06:06