1

我已经创建了一个 SSIS 包并将其部署到 SQL Server (2005)。我没有在我的部署包中启用任何日志记录。我已经配置了一个作业来运行这个包。我现在无法修改包。

我可以做些什么来为包或 SQL 代理作业中的某些东西提供某种日志记录以提供一些日志记录

SQL 代理作业历史不会被保留,所以这不是一个选项。

4

1 回答 1

6

如何将您的作业步骤类型从集成服务更改为操作系统命令。从那里,您将从命令行调用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

编辑 2

我不知道,重定向>似乎在操作系统子步骤中引发了错误。考虑到作业步骤也需要能够捕获输出流,这可能是有道理的。无论如何,方法仍然是相同的,将输出重定向到一个文件——我们将简单地更新机制。

批量方法

创建一个 .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 代理或操作系统步骤的代理需要对您记录详细信息的任何位置进行读写访问。

于 2012-12-07T15:18:39.780 回答