【发布时间】:2024-01-01 03:25:01
【问题描述】:
尊敬的 * 用户,
我有一个 SQL 代理作业,它在 PDF 文件中生成特定报告,然后将 PDF 复制到网络目录,然后删除源目录中的 PDF 文件。
SQL 作业由 2 个步骤组成: 1. 生成报告 2. 将报告复制到网络位置。
对于第 2 步,我制作了一个 bat 文件,用于处理 pdf 文件的复制和删除。
bat文件如下:
set source_dir=C:\Reports\Energie\Uur
set dest_dir=\\KWS2-WEB-SERVER\Share\Reports\Uur
C:\Windows\System32\Robocopy.exe %source_dir% %dest_dir% /MOV /Z
但是,当我运行作业时,它会挂在第二步。状态只是停留在“正在执行”。
这是我在步骤中声明的行(要执行的 bat 文件的位置):
cmd.exe /c "C:\Reports\rapport_uur_copy.bat"
我的工作设置如下:
第 1 步
类型:操作系统 (CmdExec) 成功时:转到下一步
失败时:退出作业报告失败
第 2 步
类型:操作系统(CmdExec)
成功时:辞职报告成功
失败时:退出作业报告失败
一些事实:
- 我有网络目录的读/写权限
- 我以管理员帐户(登录用户,默认)运行这些步骤
- 第一步成功
- 我运行的是 Windows Server 2008 R2 Standard
- 我有 SQL Server 2008 R2
- 当我从 cmd 手动运行脚本时,它可以工作(在管理员帐户下)。
提前致谢!
【问题讨论】:
-
直接运行批处理文件会发生什么?它提示你对吗?你需要找出正确的开关来停止它的提示。 SQL 代理无法运行的另一个原因是它运行的帐户与您的帐户不同。例如,默认情况下 SQL 代理帐户无法访问任何网络驱动器,即使您可以。
-
@ElectricLlama 当我直接运行批处理脚本(即双击文件)时,不会出现任何提示。它只是运行。我以管理员身份运行脚本。我创建了一个名为“asAdminProxy”的代理,其中定义了管理员凭据。
-
抱歉,我看到您已经尝试手动运行它。当作业挂起时,您可以打开任务管理器并检查您的 CMD 进程是否在预期的凭据下?您可以尝试将 /Log: 参数添加到日志操作(无论如何这是个好主意)。只要确保您登录到您肯定可以访问的文件。您也可以使用 /v 来表示详细信息。您还可以使用
"C:\Reports\rapport_uur_copy.bat" >> C:\Log.TXT将您的批处理文件记录到另一个日志中。
标签: sql-server-2008 batch-file jobs sql-agent