我已经为SQL服务器(2005)创建并部署了一个SSIS包。我没有在我部署的包中启用任何日志记录。我已配置一个作业来运行包。我现在无法修改包。
我能做些什么来为包中的某种日志记录或SQL Agent作业中的某些内容提供一些日志记录?
SQL代理作业历史记录未被保留,因此这不是一个选项。
答案 0 :(得分:4)
如何将作业步骤类型从Integration Services更改为OS命令。从那里,您将从命令行调用dtexec并将输出重定向到文件。逻辑大约
dtexec.exe /sql "\OptionalFolder\PackageName" /Server MyServer /reporting V > PackageName.log
您可能也对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)'
所有正在做的就是为您的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
我不知道,重定向>
似乎在操作系统子步骤中抛出错误。考虑到作业步骤也需要能够捕获输出流,这可能是有意义的。无论如何,方法仍然相同,将输出重定向到文件---我们只需更新机制。
创建.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
和
"C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exe" /sql "\%1" /Server MyServer /reporting V > C:\ssis\%1.log
作业步骤仍然是一种操作系统,但实际命令变为
@command=N'C:\ssis\RunPackage.bat Package'
SQL代理或操作系统步骤的代理将需要对您记录详细信息的任何位置进行读写访问。