web-dev-qa-db-ja.com

ExecutionInstanceGUIDをSSISDBに関連付ける

SQL Server Integration Servicesの2012リリースであるSSISは、(とりわけ)パッケージの操作を追跡するSSISDBカタログを提供しています。プロジェクト展開モデルを使用するソリューションのデフォルトのパッケージ実行では、SSISDBへのログが有効になります。

パッケージが実行されると、System::ExecutionInstanceGUIDには、明示的なロギングを使用している場合(sys.sysdtslog90/sys.sysssislogへ)に特定のパッケージ実行のすべてのイベントを記録する値が入力されます。

私が知りたいのは、SSISDBカタログのExecutionInstanceGUIDをanythingに関連付ける方法です。または、SSISパッケージでcatalog.executions.execution_idの値を実行するSSISパッケージです。

最終的に、私は既存のカスタム監査テーブルを使用して、SSISDBカタログの詳細な履歴にリンクしようとしていますが、リンクを見つけることができません。

13
billinkc

コメントには多すぎますが、何かを試みています。そのシステムテーブルの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列に関係があるということです。

5
Marian

単一のパッケージで構成される2012配置モデルを使用してSSISプロジェクトを作成しました。そのパッケージでは、OLE DB接続マネージャーを追加し、それをtempdbにポイントして、スクリプトタスクをキャンバスにドロップしました。また、そのOLE DB接続マネージャーを使用して明示的なロギングをオンにし、OnInformationイベントをキャプチャしました。

Control flow with script task - SCR Fire info

SCR火災情報

_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;
    }
_

デプロイして実行する

次に、プロジェクトをサーバーにデプロイして実行しました。

Prompt to view Operations Report, operation id 8

オペレーションレポートを開き、_SCR Fire info_タスクの詳細をクリックしました。

Operation details

赤い丸で囲まれた項目は、予想どおり、操作8の詳細を表示していることを示しています。強調表示された行は、これらの2つのシステム変数の値をバブルアップしたOnInformationイベントです。また、予想どおり、_System::ServerExecutionID_の値はレポートの内容と一致しました。 _System::ExecutionInstanceGUID_の値はいつものように無意味でしたが、存在していました{3F515780-8062-40AA-B9EC-C320CBAC5EFD}。

それをすべて一緒に結ぶ

現在、2つの異なるログを結び付けたいと考えていました。

sysssislogクエリ

このクエリを実行すると、旧式のロギングテーブルから関連する行がプルバックされました。

_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.
_

catalog.operation_messagesクエリ

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バイト)のどちらを保存するかを選択すると、私にとってはそれほど単純なことではありません。大きな整数を単調に増やしてください。

9
billinkc