3

我有一个 .dtsx 文件(一个 SSIS 包),它从 FTP 服务器下载文件并导入数据。每当我手动运行它时它运行良好。但是,当我计划调用包作为 SQL Server 代理作业中的一个步骤时,它会失败。它失败的步骤是我调用 .bat 文件的步骤。作业历史查看器中的错误说明如下:

错误:2009-05-26 12:52:25.64
代码:0xC0029151 来源:执行批处理文件执行进程任务
描述:在执行“D:\xxx\import.bat”“”中“”,进程退出代码为“1 ”,而预期为“0”。结束错误 DTExec:包执行返回 DTSER_FAILURE (1)。

我认为这是一个权限问题,但我不知道如何解决这个问题。作业所有者是管理员用户,因此我已验证他们有权访问 .bat 文件所在的目录。我已经尝试进入服务并更改 SQL Server 代理的“登录身份”选项,但这两个选项都不起作用(本地系统帐户和此帐户)。有没有人知道需要调整哪些其他权限才能使其正常工作?

4

5 回答 5

2

对我来说,这是一个权限问题。转到环境 --> 目录,然后将本地目录更改为 SQLAgentUser 可以访问的目录。我使用了 C:\temp。单击保存下拉菜单,然后选择“设置默认值”。

于 2012-08-23T14:25:22.787 回答
1

您是在批处理文件中执行 SSIS 作业,还是批处理文件是 SSIS 控制流中的一个步骤?

我假设后者是这个答案。您使用什么任务来执行批处理文件(例如简单的执行程序任务或脚本任务)。如果是后者,看起来您的批处理文件实际上在某个步骤上失败了,而不是 SSIS 脚本。我会检查你的批处理文件试图访问的权限

事实上,将批处理文件重写为 SSIS 中的脚本任务可能是一个更好的主意,因为您将获得更好的错误报告(它会告诉您脚本中的哪个步骤失败)。

您可以尝试在命令窗口中使用 runas 命令执行批处理文件。如果您尝试在本地系统或网络系统帐户下执行它,它应该会给您一个更好的错误。如果确实出错,您可以通过“echo %ERRORLEVEL%”检查错误级别。

如果不是后者,并且您正在通过批处理文件执行 SSIS 包,为什么?

于 2009-05-27T01:38:48.947 回答
1

我尝试将批处理文件作为 SQL 作业步骤执行,它提供了更多细节。它表明当我尝试调用可执行文件时失败,该可执行文件与我的 .bat 文件位于同一目录中,但不在执行它的 windows/system32 目录中。

我将可执行文件移动到 system32 目录,但后来我不知道我的文件被下载到哪里。然后我发现Execute Process Task(执行.bat 的那个)有一个名为WorkingDirectory 的属性。我将其设置为 bat 所在的目录,将可执行文件移回与 .bat 文件相同的目录,现在它按预期工作。

于 2009-05-28T00:00:51.300 回答
0

您是否可能访问 .bat 文件中的映射驱动器?如果是这样,您不能依赖服务中的映射驱动器,因此您必须使用 UNC 路径。

于 2009-05-27T01:45:44.610 回答
0

我遇到了同样的错误,我通过登录到运行该作业的用户帐户来解决它,在那里打开有问题的 Coreftp 站点,测试站点访问,在那里进行更改(在我的情况下,我必须重新输入新密码)现在它可以工作了。所以是的,这是文件访问的问题。这是对相关 coreftp 站点的文件访问。

于 2016-02-29T07:08:07.013 回答