0

本质上,我有一个在 BIDS 中运行并作为独立程序包运行的工作,当它在 SQL Server 代理下运行时,它不能正确完成(虽然没有错误消息)。

作业步骤如下:

1)从表中删除所有行;

2) 使用 For each loop 从 Excel 电子表格中填写表格;

3)清理桌子。

我已经尝试过这个MS 页面(步骤 1 和 2),没有看到任何需要从服务器端安全性开始更改。

此页面的SQLServerCentral.com 也是如此,没有解决方案。

如何获取错误记录或修复?

注意我已经从 Server Fault 重新发布了这个,因为它是那些不是纯粹的管理或编程的问题之一。

我已经以我正在运行的代理帐户登录,并且该作业独立运行但抱怨 Excel 表为空?

4

3 回答 3

1

以下是我如何从通过 SQL 代理作业调用的 SSIS 包管理跟踪“返回状态”。如果我们幸运的话,其中一些可能适用于您的系统。

  • 作业调用存储过程
  • 程序构建一个 DTEXEC 调用(带有十几个或更多参数)
  • 过程调用 xp_cmdshell,调用作为参数 (@Command)
  • SSIS 包运行
  • “本地”SSIS 变量初始化为 1
  • 如果引发错误,SSIS“流程”将传递到将该局部变量设置为 0 的步骤
  • 在最后一步中,使用表达式将 SSIS 属性“ForceExecutionResult”设置为该局部变量(1 = 成功,0 = 失败)
  • SSIS 调用的完整形式存储返回值,如下所示:

    执行@ReturnValue = master.dbo.xp_cmdshell @Command

...然后它变得一团糟,因为您可以获得从 SSIS 返回的大量值。在执行 SSIS 步骤时,我在数据库表中记录了操作和活动,并查阅了该表以尝试解决问题(这就是下面的 @Description 的来源)。以下是相关代码和注释:

--  Evaluate the DTEXEC return code
SET @Message = case
                 when @ReturnValue = 1 and @Description <> 'SSIS Package' then 'SSIS Package execution was stopped or interrupted before it completed'
                 when @ReturnValue in (0,1)   then ''  --  Package success or failure is logged within the package
                 when @ReturnValue = 3        then 'DTEXEC exit code 3, package interrupted'
                 when @ReturnValue in (4,5,6) then 'DTEXEC exit code ' + cast(@Returnvalue as varchar(10)) + ', package could not be run'
                 else 'DTEXEC exit code ' + isnull(cast(@Returnvalue as varchar(10)), '<NULL>') + ' is an unknown and unanticipated value'
               end
--  Oddball case: if cmd.exe process is killed, return value is 1, but process will continue anyway
--  and could finish 100% succesfully... and @ReturnValue will equal 1.  If you can figure out how,
--  write a check for this in here.

最后提到“如果在 SSIS 运行时,一些管理员小丑杀死了 CMD 会话(例如,来自 taskmanager),因为进程运行时间过长”的情况。我们从来没有发生过——据我所知——但当我写这篇文章时,他们非常偏执,所以我不得不调查一下……

于 2010-04-21T13:54:47.420 回答
0

为什么不使用内置在 SSIS 中的日志记录?我们将日志发送到数据库表,然后以更用户友好的格式将它们解析到另一个表,并且可以看到运行的每个包的每一步。和每一个错误。

于 2010-04-21T19:19:12.040 回答
0

我最终解决了这个问题,感谢您的建议。

基本上,我使用正在运行的代理用户帐户登录 Windows,并开始看到如下错误:“对于每个文件的枚举器为空”

我复制了项目文件并开始测试,结果我仍然在 For Each 循环框的属性中留下了一个文件路径 (N:/),尽管我更改了连接属性。一旦你有错误条件可以处理,就更容易了。我还必须重新创建变量映射。

难怪人们只是重新创建整个包。

现在已修复并正常工作!

于 2010-04-26T13:01:38.743 回答