使用MS Access DB几乎总是很痛苦。真正令人痛苦的是,当使用访问MS Access文件的OLE-DB连接时,您甚至无法在SSIS中使用分布式事务。即使您只是想阅读它! WTF?那是什么样的交易支持?那么有人能告诉我如何在这种情况下制作SSIS包事务吗?使用正常的交易模式会产生The Acquire Connection manager failed with error code 0xC0202009
答案 0 :(得分:2)
我遇到过这样的场景(古老的MySQL实例和他们拒绝我们创建事务权限的DB2),我发现有效的解决方案是缓存不支持事务的源{{ 3}},缓存连接管理器或记录集目标。为了简单起见,原始文件将是我的“转到”,但根据组件要求可能需要其他文件。
包的一般外观如下所示:将事务设置为Required的包(或封装容器)。这将创建一个包含任务可以登记的事务。然后我创建一个“启动”容器,显式选择退出事务(事务选项:notsupported)。这就是我们想要访问不支持事务的资源的地方。默认事务选项Supported,意味着它将在一个打开的事务中登记(如果有的话)。我将需要事务的所有任务放在支持的容器中。
在事务外部的数据流中,我转储到RAW文件。我使用的是在“普通”事务支持的源中使用的相同查询。
在使用缓存输出的数据流中,我使用在第一步中生成的文件,并且,事务按预期用于目标,并且没有尝试在不支持它的源上进行事务。
答案 1 :(得分:0)
您可以将OLE DB连接管理器上的RetainSameConnection
属性设置为True
,例如写入here时写入SQL Server时。作为回报,您可以在一个执行SQL任务中编写BEGIN TRANSACTION
,然后在另一个中选择COMMIT
或ROLLBACK
。
但要注意:避免松散的结束,因为这会在并行运行任务时创建多个连接。你必须创建一个从BEGIN TRAN到COMMIT的链,否则它将失败。
请参阅http://www.morrenth.com/transaction-and-retainsameconnection-in-ssis-ole-db-connection-manager.aspx