gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:24:53 25 4
gpt4 key购买 nike

我有一个可以完美运行的包,直到我决定将其一些任务放入序列容器中(更多关于我为什么要这样做的信息 - How to make a SSIS transaction in my case? )。

现在,我不断收到错误 -

[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.

为什么会发生这种情况以及如何解决它?

最佳答案

我开始编写自己的示例来回答您的问题。然后我记得我在新罕布什尔州周六的 SQL 演讲中遇到了马特·梅森 (Matt Mason)。他是 SSIS 的 Microsoft 项目经理。

虽然我在 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 - 开始 TRAN(执行 SQL)

B - 您的数据流

C - 测试返回代码

1 - 良好 = 提交(执行 SQL)

2 - 失败 = 回滚(执行 SQL)

您必须将连接上的 RetainSameConnection 属性设置为 True。

这会强制所有调用都通过一个 session 或 SPID。所有事务管理现在都在服务器上。

[解决方案 3] - 编写所有代码,使其可重新启动。这并不意味着您出去使用检查站。

一种解决方案是始终使用 UPSERTS。插入新数据。更新旧数据。删除只是表中的一个标志。此模式允许多次执行失败的作业,并达到相同的最终状态。

另一种解决方案是通过将所有错误行放入医院表中进行手动检查、更正和插入来处理它们。

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

简而言之,我希望这些想法足以帮助您。

虽然交易选项很好,但它确实有一些缺点。如果您需要示例,请联系我。

真诚的

J

关于sql-server - 将任务放入序列容器后无法连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com