1

SSIS パッケージを作成し、SQL サーバー (2005) にデプロイしました。展開したパッケージでログを有効にしませんでした。パッケージを実行するジョブを構成しました。現在、パッケージを変更できません。

パッケージのログを記録したり、SQL エージェント ジョブでログを記録したりするためにできることはありますか?

SQL エージェントのジョブ履歴は保持されていないため、これはオプションではありません。

4

1 に答える 1

6

ジョブ ステップの種類を 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

編集 2

私には知られていないが>、OS サブステップでリダイレクトがエラーをスローしているようだ。ジョブステップが出力ストリームもキャプチャできる必要があることを考えると、これは理にかなっています。とにかく、アプローチは同じで、出力をファイルにリダイレクトします。メカニズムを更新するだけです。

バッチアプローチ

.bat ファイルまたはそれらのペアを作成します。私に電話RunPackage.batRunPackage32.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 エージェント、または OS ステップのプロキシには、詳細をログに記録する場所への読み取りおよび書き込みアクセスが必要です。

于 2012-12-07T15:18:39.780 に答える