2011-02-10 169 views
1

我对SSIS比较陌生。在我工作的环境中,我只能访问开发数据库。我创建和测试软件包,然后将它们发送给DBA以在我们的UAT环境中执行。其中一个导入XML文件的软件包在作为SQL Server代理作业运行时会间歇性地失败。这是一个问题,因为最终的解决方案是用于高可靠性系统。测试负载大约为46000个文件,并且在导入1000-2000个文件后,导入功能会发生各种失败。间歇性SSIS作业失败的原因退出代码-1073741819?

下面显示了非常丰富的错误消息。我做了一些研究,我可以找到关于这个错误的唯一信息(最简单的概述)是关于并发问题的。所以,我将最大执行次数回升到1 ......仍是同样的问题。

Executed as user: \. Microsoft (R) SQL Server Execute Package Utility Version 9.00.4035.00 for 32-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 2:19:57 PM. The return value was unknown. The process exit code was -1073741819. The step failed.

任何人都可以提出一个原因或解决方案?甚至是获取更多诊断信息的方法?

+0

你能不能给一点上的XML文件的详细信息?例如,如何加载xml文件......是否每次按照完全相同的顺序顺序加载,或订单是否可以更改?我只是想知道是否有可能一个(或多个)xml文件导致错误,以及如何缩小到确切的文件。 – 2011-02-19 01:34:56

+0

SSIS作业作为目录上的For循环运行。每个单独的xml文件都被传入数据流步骤。单个XML文件可能包含稍微不同的内容,但即使它失败了,正在处理的XML文件实际上也会按预期进行导入。只有失败的工作本身。我也试图通过开发环境手动运行作业,并且运行良好。我已经运行了5-6个小时(大约需要导入40000个文件,这需要一些时间),并且只有当我的VM会话超时时才会停止。显然,这不会发生在这份工作上。 – YogoZuno 2011-02-20 22:34:13

+0

您可能已经看到了所有这些内容,但是此特定搜索有一些人遇到了该错误以及解决方法不同:http://www.google.com/search?q=%22-1073741819%22+ssis&rls = com.microsoft:EN-US:IE-搜索盒&即= UTF-8&OE = UTF-8&的SourceID = IE7&RLZ =#HL = EN&RLS = com.microsoft:EN-US:IE-搜索盒&q = +站点:social.msdn.microsoft.com + %22-1073741819%22 + ssis&sa = X&ei = -YNiTa3kJcHYgAfHi62nAg&ved = 0CBwQrQIwAA&bav = on.1,或。&fp = 6ec3191c2b79d4d0 – DKnight 2011-02-21 15:46:16

回答

2

配置包捕获在运行时启用日志事件。
点击SSIS菜单 - >记录 我喜欢使用SQL Server的日志提供程序,这将创建一个名为'sp_ssis_addlogentry'的系统存储过程和一个名为'sysssislog'的表。这应该至少为你提供包中失败的组件。

如果我不得不猜测,ScriptTask中有一个例外情况是未处理的,并且该任务未设置DTS.TaskResult。

DTS.TaskResult = (int)ScriptResults.Failure 

尝试包裹ScriptTask代码是这样的(但除去赶上(异常前),当你弄清楚的问题是什么)

try 
{ 
    bool fireAgain = false; 
    // Some Code 
    Dts.Events.FireInformation(0, "", "Some logable info: I Love Puppies", String.Empty, 0, ref fireAgain); 
    Dts.TaskResult = (int)ScriptResults.Success; 
} 
catch (Exception Ex) 
{ 
    Dts.Events.FireError(1, "", "FAILURE: " + Ex.Message, "", 0); // this will show up in the sysssislog table 
    Dts.TaskResult = (int)ScriptResults.Failure; 
} 
1

您的流程是完全顺序的,还是您有一些并行任务正在进行?如果存在并行任务,那么它可能是两个流程的时间问题(即一个可能正在访问另一个流程正在使用的数据,或者可能是SSIS无法应对的数据)。

您可以尝试将程序包的MaxConcurrentExecutables设置为1(即强制运行程序包时仅使用1个线程)。打开软件包并查看控制流窗口时,您可以在设计器中看到/设置此属性。如果将此属性设置为1,它应该可以帮助您确定这是否是您遇到的问题的类型。如果它解决了您的问题,那么您可以将其保留在该设置中,或者随身携带您的软件包以尝试消除导致原始问题的并行性。

这里给MaxConcurrentExecutables国旗的链接:http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.package.maxconcurrentexecutables(v=SQL.90).aspx