SQL Server代理2005作业运行但没有输出

时间:2010-04-21 13:36:20

标签: sql-server-2005 ssis sql-server-agent

基本上我有一个在BIDS和独立包中运行的作业,当它在SQL Server代理下运行时,它没有正确完成(尽管没有错误消息)。

工作步骤是:

1)删除表中的所有行;

2)使用对于每个循环来填充Excel spreasheets中的表格;

3)清理桌子。

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

this page的SQLServerCentral.com,无法解析。

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

注意我已经从服务器故障中重新发布了这个,因为它不是纯粹的管理员或编程问题之一。

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

3 个答案:

答案 0 :(得分:1)

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

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

    EXECUTE @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),因为该过程运行时间过长”情况。我从来没有发生过 - 我知道 - 但是当我写这篇文章时他们是超级偏执的所以我不得不调查它......

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

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

现在已修复并正常工作!