【问题标题】:SSIS Truncate with in a transactionSSIS 在事务中截断
【发布时间】:2013-09-04 00:13:41
【问题描述】:

我必须在事务中执行 truncate table 命令,但如果我这样做,我的执行会冻结。

在一个序列容器中,我已根据需要启用了事务,并放置了一个执行 SQL 任务和数据流任务。在执行 SQL 任务中,我设置了截断表命令。

当我运行包时,它会在 Truncate 命令后冻结。

如果您需要更多详细信息,请告诉我。提前致谢。

【问题讨论】:

  • 看看你的输出窗口,那里有显示任何信息吗?错误/警告/信息消息?如果连接到要截断表然后加载的服务器,运行 sp_whoisactive/sp_who2 会显示什么?它是否显示您的进程被事务阻止?
  • @billinkc,我将上面的部分作为包分开,现在它在几秒钟后抛出错误。 “错误:数据流任务中的 0xC0208457,插入 DB 1 [90]:无法获取外部列的属性。您输入的表名可能不存在,或者您没有对表对象的 SELECT 权限,并且可以尝试通过连接获取列属性失败。
  • @billinkc,如果我将事务选项更改为支持/不支持,它将按预期运行。
  • 在您的数据流任务的属性中,如果您将 ValidateExternalMetadata 的值更改为False,是否可以解决您的问题?
  • @billinkc,是的,解决了问题,谢谢。 ValidateExternalMetadata 属性描述说验证将延迟到运行时。所以我希望如果我将它设置为 false 没有问题。再次感谢。

标签: ssis


【解决方案1】:

存在一个已知问题 (KB2253391),其中 truncate 会阻塞其他进程。解决方法是将 ValidateExternalMetadata 指定为 false。

这样做的效果是,如果您更改数据类型或列名,SSIS 将不会识别它,直到执行过程中出现问题。对于稳定的包和环境,这通常不是问题(根据我的经验)。

请随意在 DBA stackexchange 上给 Kin 一些爱,因为他已经完成了腿部工作SSIS package blocks itself if uses TRUNCATE

【讨论】:

  • billinkc,你也值得一试!
猜你喜欢
  • 2010-12-04
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 2012-06-10
  • 1970-01-01
  • 2016-12-13
  • 2021-03-06
相关资源
最近更新 更多