【问题标题】:package error in ssis but not bidsssis 中的包裹错误,但不是出价
【发布时间】:2017-10-31 22:23:31
【问题描述】:

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

Microsoft (R) SQL Server Execute Package Utility Version 10.50.6000.34 for 64-bit 版权所有 (C) Microsoft Corporation 2010。保留所有权利。开始时间:上午 11:43:31 错误:2017-10-31 12:04:09.50 代码:0xC0202009 源:数据流任务 1 目标 - Etching_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 Input”(122) 时,组件“Destination - Etching_LookupView_Sink1Temperature”(109) 上的 ProcessInput 方法失败,错误代码为 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

【问题讨论】:

  • 首先:视图的运行时间不会超过它们内部的 SQL。还有其他事情发生。其次:您的错误消息中没有任何有用的线索可以提供任何线索(除了实际失败的内容)。在 BIDS 中运行和在 SQL Agent 中运行有三个主要区别: 1. 它运行的用户帐户可能不同; 2. 它在 SQL 服务器上运行,而不是在任何安装 BIDS 的地方。 3. BIDS 总是 32 位的,SQL Agent 可能是 64 位的。
  • 错误信息是在抱怨目的地。你要出口到什么地方?擅长?首先在这里尝试页面底部的屏幕截图以强制它以 32 位运行:sqlblog.com/blogs/john_paul_cook/archive/2010/03/24/…
  • 尼克,当我在投标中进行测试时,我花了大约 30 分钟来验证指向视图的来源,我做了一些研究,还发现了一个帖子 connect.microsoft.com/SQLServer/feedback/details/258901/…,该帐户是running for SQL agent 是域管理员。 sql 代理是 64 位的。目的地正在运行 ace 12.0 引擎,要将其切换到 32 位,我将不得不更改为 jet 4.0 引擎。 (好的,现在它抱怨权限)

标签: ssis sql-server-2008-r2


【解决方案1】:

我最终通过重新运行导出向导并使用源查询而不是视图来“修复”我的问题,并且它执行得很好。我的猜测是我在 BIDS 中搞砸了一些我不知道的事情。

查询与视图的重要性在于,当 SSIS 尝试验证视图时,会出现严重的减速,导致包在通过代理运行时失败,但是当您提供查询时,它的验证速度要快得多。

详情在这里:

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

相关部分是

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

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

  1. 使用“表或视图”访问方法

  2. 使用“SQL命令”访问方式,输入查询“select * from ***”

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

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

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

我们也写了这个问题->http://blogs.msdn.com/sqlperf/archive/2007/04/29/set-up-ole-db-source-to-read-from-view-efficiently.aspx.

由于这是一个“按设计”项目,我们相信有一种解决方法,我们目前不会提供任何更改。因此,我们将关闭与您提交的相关案例。如果您不同意,请随时重新提交。

感谢您为 SSIS 付出的时间、努力和支持。

【讨论】:

  • 我从未遇到过您所看到的视图问题。 (我敢肯定你正在经历它,但它很奇怪!)。不仅如此,您还说它阻止了该错误的发生?也许错误是由于超时。无论如何感谢您返回详细的答案
  • 我觉得超时也是问题所在。超级奇怪的部分是我使用了向导,并且花了很长时间来验证创建它。
猜你喜欢
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2018-09-05
  • 1970-01-01
  • 2021-11-04
  • 2013-07-01
相关资源
最近更新 更多