包装错误在ssis但不是出价

时间:2017-10-31 22:23:31

标签: ssis sql-server-2008-r2

我使用向导创建了一个导出访问包(因为为什么要重新发明轮子)使用视图(我后来发现视图需要永远运行)作为数据源。我做了一些研究,发现如果我只是采用构建视图的查询并将其用作源,它运行得更快。这在2008年的出价中很快(3秒对比近30分钟)。所以我把它放在sql server的作业代理上,这样我们就可以自动导出数据,运行它来测试它,然后就失败了。

  

Microsoft(R)SQL Server执行包实用程序版本10.50.6000.34(适用于64位版权所有(C)Microsoft Corporation 2010.保留所有权利。开始时间:上午11:43:31错误:2017-10-31 12:04:09.50代码:0xC0202009来源:数据流任务1目的地 - 蚀刻_LookupView_Sink1Temperature [109]描述:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80040E03。结束错误错误:2017-10-31 12:04:09.50代码:0xC0047022源:数据流任务1 SSIS.Pipeline描述:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“Destination - Etching_LookupView_Sink1Temperature”(109)上的ProcessInput方法在处理输入“Destination Input”(122)时失败,错误代码为0xC0202009。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。结束错误DTExec:程序包执行返回DTSER_FAILURE(1)。开始时间:上午11:43:31完成时间:下午12:04:09经过:1237.81秒。包执行失败。步骤失败了。

根据我对此错误代码所做的研究,它讨论了铸造,但我没有铸造任何东西。

这是我为视图提供的查询。

SELECT     dbo.Etching_Trace_Data.Etch_Date, dbo.Etching_Trace_Data.EtchLot, dbo.Etching_Trace_Data.Part_Number, dbo.Etching_Trace_Data.Lot_Number, dbo.Etching_Trace_Data.Leadbond_Lot, 
                      dbo.Etching_Trace_Data.Acid_Batch, dbo.Etching_Trace_Data.Operator_ID, dbo.Etching_Trace_Data.WorkOrder, dbo.Etching_Trace_Data.Etch_Sink, dbo.Etching_Trace_Data.Num_Diodes, 
                      dbo.Etching_Trace_Data.Etch_Number, AVG(dbo.Etching_Meas_Runtime.[210Temperature]) AS AvgOf210Temperature, MAX(dbo.Etching_Meas_Runtime.[210Temperature]) AS MaxOf210Temperature,
                       MIN(dbo.Etching_Meas_Runtime.[210Temperature]) AS MinOf210Temperature, AVG(dbo.Etching_Meas_Runtime.NitricTemperature) AS AvgOfNitricTemperature, 
                      MAX(dbo.Etching_Meas_Runtime.NitricTemperature) AS MaxOfNitricTemperature, MIN(dbo.Etching_Meas_Runtime.NitricTemperature) AS MinOfNitricTemperature, 
                      AVG(dbo.Etching_Meas_Runtime.LeftRinseWaterTemperature) AS AvgOfLeftRinseWaterTemperature, MAX(dbo.Etching_Meas_Runtime.LeftRinseWaterTemperature) 
                      AS MaxOfLeftRinseWaterTemperature, MIN(dbo.Etching_Meas_Runtime.LeftRinseWaterTemperature) AS MinOfLeftRinseWaterTemperature, 
                      AVG(dbo.Etching_Meas_Runtime.RightRinseWaterTemperature) AS AvgOfRightRinseWaterTemperature, MAX(dbo.Etching_Meas_Runtime.RightRinseWaterTemperature) 
                      AS MaxOfRightRinseWaterTemperature, MIN(dbo.Etching_Meas_Runtime.RightRinseWaterTemperature) AS MinOfRightRinseWaterTemperature, 
                      AVG(dbo.Etching_Meas_Runtime.RightRinseWaterResistivity) AS AvgOfRightRinseWaterResistivity, dbo.Etching_LookupView_LeadbondLots.RecipeName, 
                      dbo.Etching_Trace_Data.Etch_Time_210_1, dbo.Etching_Trace_Data.Etch_Time_210_2, dbo.Etching_Trace_Data.Etch_Time_210_3, dbo.Etching_Trace_Data.Etch_Time_210_4, 
                      dbo.Etching_Trace_Data.Etch_Time_Nitric_1, dbo.Etching_Trace_Data.Etch_Time_Nitric_2
FROM         dbo.Etching_Trace_Data INNER JOIN
                      dbo.Etching_Meas_Runtime ON dbo.Etching_Trace_Data.Leadbond_Lot = dbo.Etching_Meas_Runtime.LotNumber INNER JOIN
                      dbo.Etching_LookupView_LeadbondLots ON dbo.Etching_Trace_Data.Leadbond_Lot = dbo.Etching_LookupView_LeadbondLots.Leadbond_lot
WHERE     (dbo.Etching_Trace_Data.Etch_Date > '2017-08-01 00:00:00')
GROUP BY dbo.Etching_Trace_Data.Etch_Date, dbo.Etching_Trace_Data.EtchLot, dbo.Etching_Trace_Data.Part_Number, dbo.Etching_Trace_Data.Lot_Number, dbo.Etching_Trace_Data.Leadbond_Lot, 
                      dbo.Etching_Trace_Data.Acid_Batch, dbo.Etching_Trace_Data.Operator_ID, dbo.Etching_Trace_Data.WorkOrder, dbo.Etching_Trace_Data.Etch_Sink, dbo.Etching_Trace_Data.Num_Diodes, 
                      dbo.Etching_Trace_Data.Etch_Number, dbo.Etching_Trace_Data.Etch_Time_210_1, dbo.Etching_Trace_Data.Etch_Time_210_2, dbo.Etching_Trace_Data.Etch_Time_210_3, 
                      dbo.Etching_Trace_Data.Etch_Time_210_4, dbo.Etching_Trace_Data.Etch_Time_Nitric_1, dbo.Etching_Trace_Data.Etch_Time_Nitric_2, dbo.Etching_LookupView_LeadbondLots.RecipeName

1 个答案:

答案 0 :(得分:0)

我结束了#34;修复"我的问题是重新运行导出向导并使用查询源而不是视图,它执行得很好。我的猜测是我在BIDS中搞砸了一些我不知道的东西。

查询与视图的重要性在于,当SSIS尝试验证视图时,主要的减速会导致程序包在代理程序中运行时失败,但是当您提供查询时,它会更快地验证。

详情如下:

  

https://connect.microsoft.com/SQLServer/feedback/details/258901/ssis-views-as-data-source-very-poor-performance-or-ssis-hangs

相关部分

  

微软于2008年4月28日下午2:45发布   这是一个已知问题和当前设计的结果。

     

有两种方法可以从OLE DB源中的视图中提取数据:

     
      
  1. 使用"表格或视图"访问方法

  2.   
  3. 使用" SQL命令"访问方法,然后输入查询"从***"

  4. 中选择*         

    在这两种方法中生成不同的执行计划。

         

    前者使用的那种效率不如后者。

         

    如果在使用第一种方法时遇到性能问题,可以切换到第二种方法作为解决方法。

         

    我们还在博客中发布了此问题 - > http://blogs.msdn.com/sqlperf/archive/2007/04/29/set-up-ole-db-source-to-read-from-view-efficiently.aspx

         

    因为这是一个“设计”。项目,我们相信有一项工作,我们目前不会提供任何变更。因此,我们将结束与您提交相关的案例。如果您不同意,请随时重新提交。

         

    感谢您对SSIS的时间,精力和支持。