【问题标题】:SSIS: Enabling transactions causes database connection to failSSIS:启用事务导致数据库连接失败
【发布时间】:2013-04-02 18:05:53
【问题描述】:

我有一个包,用于将 CSV 文件中的记录加载到表中。它在控制流中包含三个元素:

  • 截断表
  • 将文件加载到表中
  • 加载后验证表上是否有记录或引发错误

这个想法是在包上有一个事务,所以如果元素加载失败或文件为空,那么事务将回滚并且表不会被截断。

要启用事务,我只需转到包属性并设置 TransactionOption=Required,然后我只是尝试执行包并在尝试执行第一个元素时收到此错误(SQL 任务试图截断表格):

[执行 SQL 任务] 错误:无法获取连接“数据库 连接”。连接可能配置不正确,或者您可能没有 在此连接上拥有正确的权限。

如果我只是返回并将包的 TransactionOption 属性更改为默认值(支持),那么包会正确执行,但如果出现错误则不会回滚。

我正在使用 ADO.NET 连接到 SQL Server 数据库。

知道我做错了什么吗?这是使用交易的正确方式还是我遗漏了什么?

谢谢!

【问题讨论】:

  • 可能是这个问题,stackoverflow.com/questions/6568183/transactionoption-in-ssis 可能会对您有所帮助。不确定天气是否适用于 OP。
  • “数据库连接”是您的 Excel 或 SQL Server 连接吗?您是否将数据加载到 SQL Server 中?明确描述这些事情会有所帮助,这样我们就不必假设这些事情了。
  • @JackLock 是的,没有看到这个问题。第二种选择有效,但对我来说似乎是一种黑客行为,应该支持交易。最后我使用了一个临时表,当它有记录时,我只是截断原始表并移动数据。这也是一个技巧,这意味着它不能解决我的问题。
  • @ElectricLlama 实际上我认为它已经足够清楚了。我确实提到我正在使用 ADO.NET 连接到 SQL Server DB,并且输入是一个 CSV 文件,不知道您还想知道什么。
  • 对不起,我不是故意的。我错过了关于 SQL Server 数据库的信息——我现在看到了,这是我的错误。我知道这看起来很明显,但是您的错误消息中提到了您的连接“数据库连接”,它可能是与您的数据库的连接,但是如果您只是验证它就可以节省很多麻烦,否则每个人都会做出可能不正确的假设。

标签: sql-server transactions ssis


【解决方案1】:

我知道这是一个老话题,但我遇到了和你一样的问题 - 在我将容器事务的选项之一设置为 TransactionOption=Required 之前,包工作正常 据我了解,这可能与未在 SQL 服务器上启动 Microsoft 分布式事务协调器 (MSDTC) 服务有关。

当我遇到这个问题时,我检查了我运行包的机器上是否启动了 MSDTC - 它是。遗憾的是,我无法访问 SQL 服务器来检查相同的内容。

但是,在运行包的机器上执行以下步骤解决了问题:

在 Windows Server 2008 和 Windows Vista 上:

  1. 点击开始,点击运行,然后输入dcomcnfg以启动组件服务管理控制台。

    李>
  2. 点击展开组件服务并点击展开计算机

  3. 点击展开我的电脑,点击展开Distributed Transaction Coordinator,右键点击Local DTC,然后点击Properties

  4. 点击Local DTC Properties对话框的Security标签。

在该对话框中,我必须启用网络 DTC 访问”以及“允许入站”和“允许出站”。

来源:

msdn forum about this

msdn article about troubleshooting Problems with MSDTC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多