【问题标题】:SQL Server Agent 2005 job runs but no outputSQL Server 代理 2005 作业运行但没有输出
【发布时间】:2010-04-21 13:36:19
【问题描述】:

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

工作步骤是:

1) 从表中删除所有行;

2) 使用 For each 循环从 Excel 电子表格中填充表格;

3) 清理桌子。

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

还有this page 的 SQLServerCentral.com,没有解决方案。

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

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

我已作为运行此操作的代理帐户登录,作业独立运行但抱怨 Excel 表为空?

【问题讨论】:

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


    【解决方案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 的来源)。以下是相关代码和cmets:

    --  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),因为进程运行时间过长”的情况。我们从来没有发生过这种情况——据我所知——但是当我写这篇文章的时候他们非常偏执,所以我不得不调查一下......

    【讨论】:

    • 感谢您的详细解释,我以后可能会返回此代码。
    【解决方案2】:

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

    【讨论】:

    • 您必须在包中设置登录。是你做的吗?它仍然没有记录?
    【解决方案3】:

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

    基本上,我使用正在运行的代理用户帐户登录 Windows,并开始看到如下错误: "For each file 枚举器为空"

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

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

    现在已修复并正常工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多