将任务放入序列容器后无法连接到数据库

Ste*_*eam 2 sql-server ssis

我有一个完美的包,直到我决定把它的一些任务放在一个序列容器中(更多关于为什么我想这样做 - 如何在我的情况下进行SSIS交易?).

现在,我继续收到错误 -

[Execute SQL Task] Error: Failed to acquire connection "MyDatabase". Connection may not be configured correctly or you may not have the right permissions on this connection.
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?

CRA*_*DBA 10

我开始编写自己的例子来回答你的问题.然后我记得当我在新罕布什尔州的一个SQL周六谈话时我遇到了Matt Mason.他是SSIS的微软项目经理.

虽然我在2009年和2011年之间花了3年时间,但除了ETL代码之外别无其他,我认为Matt在那里发表了一篇文章.

http://www.mattmasson.com/2011/12/design-pattern-avoiding-transactions/

以下是您发现的方法和错误的高级摘要.

[错误]

您发现的错误与MSDTC有问题有关.这必须配置正确,并且没有任何问题.常见问题是防火墙.看看这篇文章.

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/3a5c847e-9c7e-4628-b857-4e6edaa7936c/sql-task-transaction-required?forum=sqlintegrationservices

[解决方案1] - 在包,任务或容器级别使用事务.

某些数据提供商不支持MSDTC.某些任务不支持事务.由于您要添加新层以支持两阶段提交,因此性能可能会很慢.

http://technet.microsoft.com/en-us/library/aa213066(v=sql.80).aspx

[解决方案2] - 使用以下任务.

A - BEGIN TRAN(EXECUTE SQL)

B - 您的数据流量

C - 测试返回码

1 - GOOD = COMMIT(EXECUTE SQL)

2 - FAILURE = ROLLBACK(EXECUTE SQL)

您必须在连接上将RetainSameConnection属性设置为True.

这会通过一个会话或SPID强制所有呼叫.所有事务管理现在都在服务器上.

[解决方案3] - 编写所有代码,以便可以重新启动.这并不意味着你出去使用检查点.

一种解决方案是始终使用UPSERTS.插入新数据.更新旧数据.删除只是表中的标志.此模式允许在实现相同的最终状态的情况下多次执行失败的作业.

另一种解决方案是通过将所有错误行放入医院工作台进行手动检查,校正和插入来处理所有错误行.

为什么不使用数据库快照(跟踪刚更改的记录)?在ETL作业之前拍摄快照.如果发生错误,请从快照还原数据库.最后一步是从系统中删除快照以清理房屋.

总之,我希望这有足够的想法来帮助你.

虽然交易选项很好,但确实有一些下跌.如果你需要一个例子,请给我打电话.

诚挚

Ĵ