Sql 如何在部署的SSIS包中启用日志记录?
我已经创建了一个SSIS包并将其部署到SQL server(2005)。我没有在部署的包中启用任何日志记录。我已经配置了一个作业来运行包。我现在无法修改包 我可以做些什么来对包进行某种类型的日志记录,或者在SQL代理作业中提供某种日志记录Sql 如何在部署的SSIS包中启用日志记录?,sql,sql-server-2005,logging,ssis,Sql,Sql Server 2005,Logging,Ssis,我已经创建了一个SSIS包并将其部署到SQL server(2005)。我没有在部署的包中启用任何日志记录。我已经配置了一个作业来运行包。我现在无法修改包 我可以做些什么来对包进行某种类型的日志记录,或者在SQL代理作业中提供某种日志记录 SQL代理作业历史记录不会被保留,因此这不是一个选项。将作业步骤类型从Integration Services更改为OS命令如何。从那里,您将从命令行调用并将输出重定向到文件。近似逻辑 dtexec.exe /sql "\OptionalFolder\Pack
SQL代理作业历史记录不会被保留,因此这不是一个选项。将作业步骤类型从Integration Services更改为OS命令如何。从那里,您将从命令行调用并将输出重定向到文件。近似逻辑
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
编辑2
我不知道,重定向
似乎在操作系统子步骤中抛出了一个错误。考虑到作业步骤也需要能够捕获输出流,这可能是有意义的。无论如何,方法还是一样的,将输出重定向到一个文件——我们只需更新机制
批量法
创建一个.bat文件或一对.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
及
作业步骤仍然是一种操作系统类型,但实际命令变为
@command=N'C:\ssis\RunPackage.bat Package'
SQL代理或操作系统步骤代理需要对记录详细信息的任何位置具有读写权限。将作业步骤类型从Integration Services更改为操作系统命令如何。从那里,您将从命令行调用并将输出重定向到文件。近似逻辑
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
编辑2
我不知道,重定向
似乎在操作系统子步骤中抛出了一个错误。考虑到作业步骤也需要能够捕获输出流,这可能是有意义的。无论如何,方法还是一样的,将输出重定向到一个文件——我们只需更新机制
批量法
创建一个.bat文件或一对.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
及
作业步骤仍然是一种操作系统类型,但实际命令变为
@command=N'C:\ssis\RunPackage.bat Package'
SQL代理或操作系统步骤代理需要对记录详细信息的任何位置具有读写权限。这可能是一个选项,但对我来说不是,因为我很忙。无法重新部署,也无法更改执行方法。只是拥有SQL作业的权限。但是,如果明天之前我找不到任何其他内容,我会将此标记为答案。@billinkc不是要求您重新部署,只是更改正在执行包的sql作业。这是在您在问题中陈述的几乎不合理的限制下执行此操作的唯一方法。Microsoft(R)SQL Server Execute Package Utility版本9.00.5000.00 for 64位版权所有(C)Microsoft Corp 1984-2005。版权所有。选项“>”无效。命令行参数无效。该步骤失败。我已添加第二个更新。我能够重现您的问题,并已解决它。对此表示歉意。这可能是一个选择,但对我来说不是,因为我很忙。无法重新部署,也无法更改执行方法。只是拥有SQL作业的权限。但是,如果明天之前我找不到任何其他内容,我会将此标记为答案。@billinkc不是要求您重新部署,只是更改正在执行包的sql作业。这是在您在问题中陈述的几乎不合理的限制下执行此操作的唯一方法。Microsoft(R)SQL Server Execute Package Utility版本9.00.5000.00 for 64位版权所有(C)Microsoft Corp 1984-2005。版权所有。选项“>”无效。命令行参数无效。该步骤失败。我已添加第二个更新。我能够重现您的问题,并已解决它。对此表示歉意。