SQL Server代理作业间歇性地运行SSISDB上的包

时间:2013-11-27 07:21:57

标签: sql-server ssis

我创建了一个SSIS包,用于从OLAP Cube中提取数据并使用SSIS 2012将其推送到SQL Server。我在SQL Server SSIS DB上部署了相同的内容,并创建了一个SQL Server代理作业来运行该包。我有一个帐户配置为运行作业(不是通过在作业中创建代理,但SQL Server代理在该帐户下运行),可以访问OLAP多维数据集。工作有时会运行而有时会失败。

为什么这份工作很奇怪?对这个问题的任何帮助都会对我有所帮助。

我正在使用SQL Server 2012 SP1企业版(11.0.3000.0)(如果它有帮助)。失败时弹出的错误消息是:

OLE DB Source未执行预执行阶段并返回错误代码0xC0202009

SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80040E05。 OLE DB记录可用。源:“”用于SQL Server 2012 Analysis Services的Microsoft OLE DB提供程序。“”Hresult:0x00000001描述:“”错误代码= 0x80040E05,外部代码= 0x00000000:。“”。 “

1 个答案:

答案 0 :(得分:0)

我在SQL2008和SQL2012 SSIS上遇到了同样的错误,但是已经能够消除/解决方法。

我们的Control流中有一个Loop Container,它包含一个带有MDX源的数据流任务。数据流源的MDX查询是在循环容器的每次迭代中动态构建的(通过表达式)(但它总是返回“相同形状”的结果 - 只有WHERE子句中的过滤器不同)。

我们发现错误有点间歇性 - 有时包会成功完成,有时它会因容器循环不同迭代时的0x80040E05错误而失败。

为了缓解这个问题,我们为此程序包设置了SQL代理作业步骤,以便在最多5次重试时重新尝试失败 - 这不是理想的解决方法,但它有助于提高作业的成功率。

我们不知道为什么会出现此错误或导致错误的原因,但是它似乎与时序有关,而且在使用带有动态生成的MDX的SSAS OLE-DB数据源时我只看到了这个问题查询。我已经成功地消除了SSIS包中不理想的解决方法发生的错误 - 不知道为什么这有效/有帮助(希望微软能够解决问题并解决问题,因为它自SQL2008以来一直困扰着我们,并且仍然在SQL2012 SP1 ...

导致0x80040E05错误的MDX的解决方法:

在我们的循环容器中,我们将包含OnSuccess先例约束的Script任务添加到包含动态生成的MDX源查询的数据流任务。脚本任务只是在数据流任务完成大约5秒后立即在处理中引入WAIT,然后允许SSIS继续下一次迭代(例如System.Threading.Thread.Sleep(5000))。

由于这种延迟,我们已经有更稳定的SSIS包执行 - 不知道为什么,但这就是我们观察到的。另请注意,当我们迁移到SQL2012 SSIS包时,会返回0x80040E05错误,但是我们可以通过将此脚本任务的WAIT时间增加到10秒来再次消除它。

现在等待10秒不是这个问题的理想解决方案/解决方法 - 特别是当它包含在循环容器中时(在我们的例子中,它已经将大约30分钟的“等待时间”添加到包执行持续时间),但是,这种解决方法比使程序包在80%以上的时间内失败更好