我有一个暂停执行的数据流任务。
流程很简单,对不同的表进行两次查询(两者都有几个连接),然后通过公共id对输出进行排序和合并,为所有记录添加静态列,将行计数保存在用户变量中以供日后使用使用并最终插入到另一个DB上的表中。
我们正在使用OLE DB源和目标。源是MSSQL 2000,目标是MSSQL 2012
症状:
解决方案失败:
额外位:
我真的希望有人可以帮助我。我是SSIS的新手,这是我第一次使用它。我通常使用Pentaho为我的ETL工作,但客户需要在SSIS上实施解决方案。我已经和这个问题争斗了好几天了,而且我已经开始没有想法来解决这个问题了。
当通过命令行运行时,它也会卡住,我得到以下输出:
Progress: 2013-03-19 14:36:26.21
Source: Load Sandbox Table
Validating: 0% complete
End Progress
Progress: 2013-03-19 14:36:26.21
Source: Load Sandbox Table
Validating: 12% complete
End Progress
Progress: 2013-03-19 14:36:26.22
Source: Load Sandbox Table
Validating: 25% complete
End Progress
Progress: 2013-03-19 14:36:26.22
Source: Load Sandbox Table
Validating: 37% complete
End Progress
Progress: 2013-03-19 14:36:26.23
Source: Load Sandbox Table
Validating: 50% complete
End Progress
Progress: 2013-03-19 14:36:26.25
Source: Load Sandbox Table
Validating: 62% complete
End Progress
Progress: 2013-03-19 14:36:26.25
Source: Load Sandbox Table
Validating: 75% complete
End Progress
Progress: 2013-03-19 14:36:26.25
Source: Load Sandbox Table
Validating: 87% complete
End Progress
Progress: 2013-03-19 14:36:26.25
Source: Load Sandbox Table
Validating: 100% complete
End Progress
Warning: 2013-03-19 14:36:26.26
Code: 0x80047076
Source: Load Sandbox Table SSIS.Pipeline
Description: The output column "ITEM_OID (1)" (47) on output "Merge Join Outp
ut" (28) and component "Merge Join" (11) is not subsequently used in the Data Fl
ow task. Removing this unused output column can increase Data Flow task performa
nce.
End Warning
Progress: 2013-03-19 14:36:26.27
Source: Load Sandbox Table
Prepare for Execute: 0% complete
End Progress
Progress: 2013-03-19 14:36:26.27
Source: Load Sandbox Table
Prepare for Execute: 12% complete
End Progress
Progress: 2013-03-19 14:36:26.27
Source: Load Sandbox Table
Prepare for Execute: 25% complete
End Progress
Progress: 2013-03-19 14:36:26.27
Source: Load Sandbox Table
Prepare for Execute: 37% complete
End Progress
Progress: 2013-03-19 14:36:26.27
Source: Load Sandbox Table
Prepare for Execute: 50% complete
End Progress
Progress: 2013-03-19 14:36:26.27
Source: Load Sandbox Table
Prepare for Execute: 62% complete
End Progress
Progress: 2013-03-19 14:36:26.27
Source: Load Sandbox Table
Prepare for Execute: 75% complete
End Progress
Progress: 2013-03-19 14:36:26.27
Source: Load Sandbox Table
Prepare for Execute: 87% complete
End Progress
Progress: 2013-03-19 14:36:26.27
Source: Load Sandbox Table
Prepare for Execute: 100% complete
End Progress
Progress: 2013-03-19 14:36:26.31
Source: Load Sandbox Table
Pre-Execute: 0% complete
End Progress
Progress: 2013-03-19 14:36:26.31
Source: Load Sandbox Table
Pre-Execute: 12% complete
End Progress
Progress: 2013-03-19 14:36:26.31
Source: Load Sandbox Table
Pre-Execute: 25% complete
End Progress
Progress: 2013-03-19 14:36:26.34
Source: Load Sandbox Table
Pre-Execute: 37% complete
End Progress
Progress: 2013-03-19 14:36:45.69
Source: Load Sandbox Table
Pre-Execute: 50% complete
End Progress
之后它又冻结了。
解决方案 (在此发布此消息因为我无法再回答我自己的问题5个小时,我会在允许的情况下执行此操作。) <登记/>
我终于明白了。
事实证明,验证存在问题,但不仅SSIS元素经过验证,如问题的第四个失败解决方案中所述。
CONNECTIONS也经过验证并具有自己的Delay Validation属性,需要将其设置为true。
之后,完成过程的执行时间从40多分钟或不运行到不到一分钟(这只是一个更大的过程的一步)
我希望有同样问题的人能够轻松找到这个解决方案,因为有很多人遇到这个问题而几乎没有解决方案在网上发布。
简而言之:检查任务中涉及的所有元素,包括数据库连接是否将Delay Verification Property设置为True。
答案 0 :(得分:11)
我终于明白了。 事实证明,验证存在问题,但不仅SSIS元素经过了验证,如第四个问题的失败解决方案中所述。 CONNECTIONS也经过验证并具有自己的Delay Validation属性,需要将其设置为true。 之后,完成过程的执行时间从40多分钟或不运行到不到一分钟(这只是一个更大的过程的一步) 我希望有同样问题的人能够轻松找到这个解决方案,因为有很多人遇到这个问题而几乎没有在线发布的解决方案。
简而言之:检查任务中涉及的所有元素,包括数据库连接是否将Delay Verification Property设置为True。
答案 1 :(得分:4)
我有相同的症状,但在每个组件上将延迟验证设置为True并没有解决我的问题。
我通过将OLE DB方法从表或视图更改为sql命令来解决它。
问候。
答案 2 :(得分:4)
我知道这是旧的,但我刚刚找到了一个可能有帮助的链接。我个人正在使用视图将数据导出到外部数据库,并且 数据验证需要花费大量时间来验证视图。
这一点的重要部分是微软的回答
Microsoft于2008年4月28日下午2:45发布
这是一个已知问题和当前设计的结果。
有两种方法可以从OLE DB源中的视图中提取数据:
使用&#34;表格或视图&#34;访问方法
- 中选择* 醇>
使用&#34; SQL命令&#34;访问方法,然后输入查询&#34;从***&#34;
在这两种方法中生成不同的执行计划。
前者使用的那种效率不如后者。
如果在使用第一种方法时遇到性能问题,可以切换到第二种方法作为解决方法。
我们还在博客中发布了此问题 - &gt; http://blogs.msdn.com/sqlperf/archive/2007/04/29/set-up-ole-db-source-to-read-from-view-efficiently.aspx。
因为这是一个“设计”。项目,我们相信有一项工作,我们目前不会提供任何变更。因此,我们将结束与您提交相关的案例。如果您不同意,请随时重新提交。
感谢您对SSIS的时间,精力和支持。
答案 3 :(得分:3)
通过将数据访问模式更改为SQL命令并将我的视图粘贴到OLE DB源中的SQL命令文本来解决我的问题。
答案 4 :(得分:1)
显然,要尝试的另一件事是检查“使用32位运行时”复选框 - 如果您在将数据包作为数据库服务器中的作业运行时遇到问题(这是64位,并且我的情况至少是SQL Server 2008R2)。转到作业,右键单击&gt;属性...&gt;步骤&gt;右键单击您的SSIS包步骤&gt;属性...&gt;一般&gt;执行选项(标签)&gt;使用32位运行时。
我看到了这个问题,但只有一次我将软件包部署到服务器(我启用了日志服务提供程序,所以我可以看到它在“预执行”阶段后被卡住了)。它总是在BIDS中运行良好(在另一台服务器上很好,奇怪的是......仍然不确定为什么会这样)。
线程here向我倾斜了这个似乎有用的解决方案 - 虽然我的问题间歇性出现,所以YMMV。该线程中还有其他可能的解决方案。
答案 5 :(得分:1)
希望这有助于某人。 我试图使用此OLE DB源来执行带有参数的SP。 我不需要它返回任何东西,所以我把那部分遗漏了。 但它不会让我,它大喊'没有列信息由sql返回'。所以在我的SP中配置了一个虚拟sql语句,我将其设置为永不为真。 但它从来没有将该列作为输出,而且工作只是挂在执行前阶段。因此,我将该测试更改为始终为真,它返回列,然后进行预测。我对该列没有任何作用,但我想那里需要它。
答案 6 :(得分:1)
我们已将延迟验证设置为True
并且无法/不想将其更改为SQL语句。
我在数据流中遇到了ValidateExternalMetadata
,我将其更改为False
,这似乎与冠军一样。
我检查了OP的步骤,他提到他们在第5步中已经这样做了
答案 7 :(得分:0)
几分钟前我遇到了同样的问题,上面的建议对我没用(延迟验证=真似乎是回答)。我们最近发现了参数嗅探的一些问题,一旦我在我的存储过程中解决了这个问题,我的包运行于&lt; 1分钟。请考虑检查存储过程以查看是否可能是原因。
答案 8 :(得分:0)
SQL Server 2012/2014仍然存在此问题。
上述解决方案都没有帮助。实际上,没有任何改变延迟验证,更改OLD DB目标或OLE DB连接的配置。
建议问题在于执行计划。
对于我的情况也是如此,并且在我的OLE DB源配置中添加条件1 = 1强制SQL服务器生成一个新的执行计划,为我解决了问题。