可能なオプション:
Logging
SSISの機能を利用する必要があります。これにより、メッセージをキャプチャするイベントを構成できます。私は通常、ログOnWarning
をOnError
作成し、パッケージで発生するすべての警告メッセージとエラーメッセージを追跡することを好みます。ロギングデータを保存するためのさまざまなプロバイダーがあります。ロギング情報を照会できるように、SQLServerを使用することを好みます。
SSIS 2012から表示されるログオプション:
Business Intelligence Development Studio (BIDS)
パッケージへのログインを有効にするには、SSIS 2005-2008 R2でSQL Server Data Tools (SSDT)
パッケージを開発している場合、またはSSIS 2012でパッケージを開発している場合は、パッケージをクリックする必要があります。
メニューをクリックしSSIS
てからクリックLogging...
[SSISログの構成]ダイアログが表示されます。
左側では、パッケージまたは個々のタスクをチェックして、イベントデータをログに記録できます。
[プロバイダーとログ]タブで、ログ情報を保存できる適切なプロバイダーを選択できます。次のスクリーンショットは、接続マネージャーを使用してイベント情報がSQLServerデータベースにキャプチャされていることを示していますOLEDB_PracticeDB
。

[詳細]タブで、キャプチャするイベントを選択できます。以下のスクリーンショットは、次のイベントをキャプチャしていることを示しています。
- OnError
- OnInformation
- OnTaskFailed
- OnWarning
イベントを推薦してくれた@WilliamToddSalzmanに感謝しますOnTaskFailed
![SSISログの構成-[詳細]タブ](https://i.stack.imgur.com/ptUuD.png)
サンプルパッケージの図:
データフロータスクとスクリプトタスクSO_15004109.dtsx
で名前が付けられたパッケージがあるとしましょう。データフロータスクは単なるダミーであり、内部にコンポーネントはありません。
![サンプルパッケージ-[データフロー]タブ](https://i.stack.imgur.com/JI6cN.png)
スクリプトタスクのMainメソッドには、カスタム情報、警告、およびエラーメッセージを送信する次のコードが含まれているため、ログデータソースでどのようにキャプチャされるかを確認できます。コードはSSIS2012用に記述されているため、SSIS 2005用に変更する必要がある場合があります。sql-server-2005でこの質問にタグを付け、SSIS 2005はVB.NETのみをサポートしているため、VB.NET
代わりに選択しました。C#
SSIS2005以降のVB.NETのスクリプトタスクコード。
#Region "Imports"
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
#End Region
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute()> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Public Sub Main()
Dim fireAgain As Boolean = False
Dts.Events.FireInformation(101, "Custom Script Information", "This is a test information message.", String.Empty, 0, fireAgain)
Dts.Events.FireWarning(201, "Custom Script Warning", "This is a test warning message.", String.Empty, 0)
Dts.Events.FireError(201, "Custom Script Error", "This is a test error message.", String.Empty, 0)
Dts.TaskResult = ScriptResults.Success
End Sub
#Region "ScriptResults declaration"
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
#End Region
End Class

パッケージを実行すると、スクリプトタスク内でエラーが発生したため失敗します。

エラーをログに記録したデータソースに移動すると、SQL Serverログプロバイダーを選択した場合、SSISが情報をログに記録するためのテーブルを作成することに気付くでしょう。次の表に、ログプロバイダーとして選択されたSQLServerデータベースにSSISが作成するログテーブルを示します。
SSIS Version Log table name Table type
-------------- ---------------- ----------
SSIS 2005 dbo.sysdtslog90 User
SSIS 2008 dbo.sysdtslog100 User
SSIS 2008 R2 dbo.sysssislog System
SSIS 2012 dbo.sysssislog System
このサンプルパッケージによってキャプチャされたイベントを表示するために、データベースで以下のクエリが実行されました。イベントはコンテナとタスクごとにログに記録されるため、いくつかのメッセージに2回気付くでしょう。このテーブルの名前はdbo.sysssislog
、パッケージがSSIS2012で作成されたためです。
select id, event, source, message from dbo.sysssislog;

ロギングの個人的な経験:
何が悪かったのかを理解するためにロギングエラーメッセージを表示するだけで、かなりの成功を収めました。私の意見では、本番環境でパッケージをデバッグすることはお勧めできません。ただし、ログイベントをキャプチャすることをお勧めします。
SSIS 2005および2008で働いていたとき、ログテーブルにクエリを実行してジョブ実行の日次レポートを生成し、関係者にPDF添付ファイルを送信するSSRSベースのレポートを作成しました。
SSIS 2012では、ツールに、という名前のデータベースを作成するIntegrationServicesCatalogSSIDB
を備えたレポート機能が組み込まれていることが改善されました。