use*_*905 1 sql logging ssis sql-server-2005
我已经创建并部署了一个 SSIS 包到 SQL 服务器 (2005)。我没有在部署的包中启用任何日志记录。我已经配置了一个作业来运行包。我现在无法修改包。
有什么我可以做的有某种日志在SQL代理作业包或东西提供一些日志?
在SQL代理作业的历史不被保留,所以这不是一个选项。
如何将您的作业步骤类型从集成服务更改为操作系统命令。从那里,您将从命令行调用dtexec并将输出重定向到一个文件。逻辑大约
dtexec.exe /sql "\OptionalFolder\PackageName" /Server MyServer /reporting V > PackageName.log
Run Code Online (Sandbox Code Playgroud)
您可能还对 dtexec 的 ConsoleLog 参数感兴趣。请注意,这将在每次运行包时覆盖文件。如果您希望在一个文件中多次运行,请使用>>而不是单个重定向。
你目前的工作可能是这样定义的。右键单击该作业并将该作业编写为创建新查询编辑器窗口的脚本。找到其中的部分@subsystem=N'SSIS'
USE [msdb]
GO
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'MyJob',
@enabled=0,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'No description available.',
@category_name=N'[Uncategorized (Local)]', @job_id = @jobId OUTPUT
-- This is approximates your existing job step of type (assuming defaults)
-- SQL Server Integration Services Package
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run SSIS Package',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'SSIS',
@command=N'/SQL "\OptionalFolder\PackageName" /SERVER MyServer /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING E',
@database_name=N'master',
@flags=0
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
Run Code Online (Sandbox Code Playgroud)
真正要做的就是为您的 SQL Server 版本调用正确的 dtexec(32 位或 64 位)可执行文件(以防您并行安装)。您也许可以手动编辑命令行并重定向输出。我从未尝试过,但理论上它应该有效。

如果没有,那么我知道将起作用的是从作业步骤显式调用可执行文件。上面的步骤将被替换为类似
EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run SSIS from OS type',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_fail_action=2,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'CmdExec',
@command=N'"C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTExec.exe" /sql "\OptionalFolder\PackageName" /Server MyServer /reporting V > PackageName.log',
@database_name=N'master',
@flags=0
Run Code Online (Sandbox Code Playgroud)
我不知道的是,重定向>似乎在 OS 子步骤中引发了错误。鉴于作业步骤也需要能够捕获输出流,这可能是有意义的。无论如何,方法仍然相同,将输出重定向到文件——我们将简单地更新机制。
创建一个 .bat 文件或一对。我打电话给我RunPackage.bat,RunPackage32.bat并将它们放入一个名为 C:\ssis 的文件夹中。它们的内容是
"C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTExec.exe" /sql "\%1" /Server MyServer /reporting V > C:\ssis\%1.log
Run Code Online (Sandbox Code Playgroud)
和
"C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exe" /sql "\%1" /Server MyServer /reporting V > C:\ssis\%1.log
Run Code Online (Sandbox Code Playgroud)
作业步骤仍然是一种操作系统,但实际命令变为
@command=N'C:\ssis\RunPackage.bat Package'
Run Code Online (Sandbox Code Playgroud)
SQL 代理或操作系统步骤的代理需要对您记录详细信息的任何位置进行读写访问。