SQL Server Integration Servicesの2012リリースであるSSISは、(とりわけ)パッケージの操作を追跡するSSISDBカタログを提供しています。プロジェクト展開モデルを使用するソリューションのデフォルトのパッケージ実行では、SSISDBへのログが有効になります。
パッケージが実行されると、System::ExecutionInstanceGUID
には、明示的なロギングを使用している場合(sys.sysdtslog90
/sys.sysssislog
へ)に特定のパッケージ実行のすべてのイベントを記録する値が入力されます。
私が知りたいのは、SSISDBカタログのExecutionInstanceGUIDをanythingに関連付ける方法です。または、SSISパッケージでcatalog.executions.execution_id
の値を実行するSSISパッケージです。
最終的に、私は既存のカスタム監査テーブルを使用して、SSISDBカタログの詳細な履歴にリンクしようとしていますが、リンクを見つけることができません。
コメントには多すぎますが、何かを試みています。そのシステムテーブルのmsdnページから catalog.executions 取得:
execution_id-bigint-実行インスタンスの一意の識別子(ID)。
この記事から- SSIS 2012 –過去の実行に関する接続マネージャー情報の表示 -私はそれを理解しています:
SSIS 2012には、パッケージ内で使用するための新しいシステム変数ServerExecutionIDが用意されているため、カスタムのログ/通知を行う場合は、検索に使用するカタログビューへの直接のポインターになるため、これを含めることをお勧めします。接続文字列情報。 ... Catalog.executionsには、実行ごとに1行が含まれます。これは、execution_idでフィルタリングする場所です。
次のサンプルクエリを使用します。
DECLARE @execution_id BIGINT = 41753; -- Your execution_id/ServerExecutionID goes here.
SELECT e.package_name,
e.start_time,
e.end_time,
e.status,
emc.package_path,
CAST(emc.property_value AS VARCHAR(1000)) AS connection_string
FROM catalog.executions e
JOIN catalog.event_messages em
ON e.execution_id = em.operation_id
JOIN catalog.event_message_context AS emc WITH (FORCESEEK)
ON em.event_message_id = emc.event_message_id
AND emc.property_name = 'ConnectionString'
AND emc.context_type = 80 -- Connection Managers
WHERE e.execution_id = @execution_id;
このテーブルのExecutionInstanceGUIDが表示されません。しかし、私が見るのは この古代のConnectアイテム で、次のストーリーがあります。
SSIS RunningPackage.InstanceID!= System :: ExecutionInstanceGUIDただし、これらは等しい必要があります。
したがって、私の結論は、ExecutionInstanceGUIDはexecution_idとは関係ありませんが、SSISDBにある場合は、いくつかのInstanceId列に関係があるということです。
単一のパッケージで構成される2012配置モデルを使用してSSISプロジェクトを作成しました。そのパッケージでは、OLE DB接続マネージャーを追加し、それをtempdbにポイントして、スクリプトタスクをキャンバスにドロップしました。また、そのOLE DB接続マネージャーを使用して明示的なロギングをオンにし、OnInformation
イベントをキャプチャしました。
_System::ExecutionInstanceGUID
_と_System::ServerExecutionID
_の2つのパラメーターを取得するようにスクリプトタスクを構成しました。この時点で認めますが、2番目の変数はマリアンの答えが出るまでnotでした。タスク内で、2つの情報イベントを発生させて、記録された値を取得できるようにします。これは、明示的なテーブル(dbo.sysssislog)と「無料」のログ(catalog.operation_messages)の両方に記録されます。
_ public void Main()
{
bool fireAgain = true;
string description = string.Empty;
string variable = string.Empty;
string value = string.Empty;
variable = "System::ServerExecutionID";
value = Dts.Variables[variable].Value.ToString();
description = string.Format("{0}: {1}", variable, value);
Dts.Events.FireInformation(0, "Reporting", description, string.Empty, 0, ref fireAgain);
variable = "System::ExecutionInstanceGUID";
value = Dts.Variables[variable].Value.ToString();
description = string.Format("{0}: {1}", variable, value);
Dts.Events.FireInformation(0, "Reporting", description, string.Empty, 0, ref fireAgain);
Dts.TaskResult = (int)ScriptResults.Success;
}
_
次に、プロジェクトをサーバーにデプロイして実行しました。
オペレーションレポートを開き、_SCR Fire info
_タスクの詳細をクリックしました。
赤い丸で囲まれた項目は、予想どおり、操作8の詳細を表示していることを示しています。強調表示された行は、これらの2つのシステム変数の値をバブルアップしたOnInformation
イベントです。また、予想どおり、_System::ServerExecutionID
_の値はレポートの内容と一致しました。 _System::ExecutionInstanceGUID
_の値はいつものように無意味でしたが、存在していました{3F515780-8062-40AA-B9EC-C320CBAC5EFD}。
現在、2つの異なるログを結び付けたいと考えていました。
このクエリを実行すると、旧式のロギングテーブルから関連する行がプルバックされました。
_SELECT
L.event
, L.source
, L.message
FROM
dbo.sysssislog AS L
WHERE
L.executionid = '{3F515780-8062-40AA-B9EC-C320CBAC5EFD}'
ORDER BY
L.id ASC;
_
結果は次のようになりました
_event source message
PackageStart ParameterTest Beginning of package execution.
OnInformation SCR Fire info System::ServerExecutionID: 8
OnInformation ParameterTest System::ServerExecutionID: 8
OnInformation SCR Fire info System::ExecutionInstanceGUID: {3F515780-8062-40AA-B9EC-C320CBAC5EFD}
OnInformation ParameterTest System::ExecutionInstanceGUID: {3F515780-8062-40AA-B9EC-C320CBAC5EFD}
PackageEnd ParameterTest End of package execution.
_
SSISDBカタログに対してこのクエリを実行すると、上記のレポートにあるすべてのメッセージが表示され、message
の値を_operation_id
_だけでなく_dbo.sysssislog.executionid
_にもリンクできることが確認されました
_SELECT
OM.*
FROM
catalog.operation_messages AS OM
WHERE
OM.operation_id = 8;
_
それらの結果は
_operation_message_id operation_id message_time message_type message_source_type message extended_info_id
30 8 2013-04-02 21:02:34.1418917 -05:00 10 30 ParameterTest:Validation has started. NULL
31 8 2013-04-02 21:02:34.1738922 -05:00 10 40 SCR Fire info:Validation has started. NULL
32 8 2013-04-02 21:02:34.1768872 -05:00 20 40 SCR Fire info:Validation is complete. NULL
33 8 2013-04-02 21:02:34.1788903 -05:00 20 30 ParameterTest:Validation is complete. NULL
34 8 2013-04-02 21:02:34.3349188 -05:00 30 30 ParameterTest:Start, 9:02:34 PM. NULL
35 8 2013-04-02 21:02:34.4009253 -05:00 30 40 SCR Fire info:Start, 9:02:34 PM. NULL
36 8 2013-04-02 21:02:34.4009253 -05:00 10 40 SCR Fire info:Validation has started. NULL
37 8 2013-04-02 21:02:34.4019251 -05:00 20 40 SCR Fire info:Validation is complete. NULL
38 8 2013-04-02 21:02:34.4219283 -05:00 70 40 SCR Fire info:Information: System::ServerExecutionID: 8 NULL
39 8 2013-04-02 21:02:34.4259295 -05:00 70 40 SCR Fire info:Information: System::ExecutionInstanceGUID: {3F515780-8062-40AA-B9EC-C320CBAC5EFD} NULL
40 8 2013-04-02 21:02:34.4409316 -05:00 40 40 SCR Fire info:Finished, 9:02:34 PM, Elapsed time: 00:00:00.031. NULL
41 8 2013-04-02 21:02:34.4419388 -05:00 40 30 ParameterTest:Finished, 9:02:34 PM, Elapsed time: 00:00:00.125. NULL
_
パッケージがSSISDBカタログのコンテキスト外で実行されると(別名SSDT-BIまたはコマンドラインから.ispacへ)、_System::ServerExecutionID
_の値は0になります。これは理にかなっていますが、将来の読者もallパッケージの実行をキャッチする場合は、sysssislogをcatalog.operation_messagesにリンクするときにLEFT OUTER JOINを使用します。
帽子のヒント、心からの感謝と答えのクレジットは、私を正しい軌道に乗せてくれたマリアンに感謝します。要約したロギングテーブルにGUID(16バイト)とbigint(8バイト)のどちらを保存するかを選択すると、私にとってはそれほど単純なことではありません。大きな整数を単調に増やしてください。