ExecutionInstanceGUID를 SSISDB에 연결


13

SQL Server Integration Services (SSIS)의 2012 릴리스는 패키지 작업을 추적하는 SSISDB 카탈로그를 제공했습니다. 프로젝트 배포 모델을 사용하는 솔루션의 기본 패키지 실행에는 SSISDB에 로깅이 설정되어 있습니다.

패키지가 실행될 때, System::ExecutionInstanceGUID명시 적 로깅 ( sys.sysdtslog90/로 sys.sysssislog)을 사용하는 경우 특정 패키지 실행에 대한 모든 이벤트를 기록 하는 값으로이 값이 채워집니다 .

내가 알고 싶은 것은 ExecutionInstanceGUID를 SSISDB 카탈로그의 어떤 것에 연결하는 방법 입니다. 또는 SSISDB prive에서 실행되는 SSIS 패키지의 가치catalog.executions.execution_id

궁극적으로 기존의 사용자 지정 감사 테이블을 사용하여 SSISDB 카탈로그의 세부 기록에 다시 연결하려고하지만 링크를 찾지 못하는 것 같습니다.

답변:


5

의견이 너무 많지만 무언가를 시도하고 있습니다. 해당 시스템 테이블 catalog.executions 의 msdn 페이지에서 다음을 얻습니다.

execution_id-bigint-실행 인스턴스의 고유 ID (ID)입니다.

이 기사 -SSIS 2012 – 과거 실행에 대한 연결 관리자 정보보기-다음 사항을 이해합니다.

SSIS 2012는 패키지 내부에서 사용할 수있는 새로운 시스템 변수 인 ServerExecutionID를 제공하므로 사용자 지정 로깅 / 알림을 수행하는 경우 찾을 때 사용할 카탈로그 뷰에 대한 직접적인 포인터이므로 포함하는 것이 좋습니다. 연결 문자열 정보. ... Catalog.executions는 실행 당 하나의 행을 포함합니다. 우리가 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입니다. 그러나 내가 보는 것은 다음 이야기 가있는 이 고대 연결 항목입니다 .

SSIS RunningPackage.InstanceID! = System :: ExecutionInstanceGUID 는 같아야합니다.

따라서 내 결론은 ExecutionInstanceGUID는 execution_id와 관련이 없지만 SSISDB에 하나가있을 수있는 경우를 대비하여 일부 InstanceId 열입니다.


9

단일 패키지로 구성된 2012 배포 모델을 사용하여 SSIS 프로젝트를 만들었습니다. 이 패키지에서 OLE DB 연결 관리자를 추가하고 tempdb를 가리키고 스크립트 작업을 캔버스에 떨어 뜨 렸습니다. 또한 해당 OLE DB 연결 관리자를 사용하여 명시 적 로깅을 설정하고 OnInformation이벤트를 캡처했습니다 .

스크립트 작업으로 제어 흐름-SCR Fire 정보

SCR 화재 정보

내가 잡아 두 개의 매개 변수를 내 스크립트 작업을 구성 : System::ExecutionInstanceGUID그리고 System::ServerExecutionID나는이 시점에서 인정할 것이다, 나는 한 하지 마리아의 대답 때까지 두 번째 변수를 나타났습니다. 작업 내에서 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;
    }

배포 및 실행

그런 다음 프로젝트를 서버에 배포하고 실행했습니다.

작업 보고서를 확인하라는 메시지, 작업 ID 8

작업 보고서를 열고 SCR Fire info작업 세부 정보를 클릭했습니다 .

조작 내용

빨간색 원으로 표시된 항목은 예상대로 오퍼레이션 8에 대한 세부 사항을보고 있음을 나타냅니다. 강조 표시된 줄은이 OnInformation두 시스템 변수의 값을 버블 링 한 이벤트입니다. 또한 예상 한대로 값이 System::ServerExecutionID보고서에있는 것과 일치했습니다. 그 가치는 System::ExecutionInstanceGUID항상 의미가 없었지만 {3F515780-8062-40AA-B9EC-C320CBAC5EFD}에있었습니다.

모두 함께 묶어

이제 서로 묶고 싶은 두 개의 다른 통나무가있었습니다.

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 카탈로그에 대해이 쿼리를 보였다 실행 messageoperation_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::ServerExecutionID0입니다. 의미가 있지만 향후 독자는 LEFT OUTER JOIN을 사용합니다. 패키지의 모든 실행 을 잡으려면 sysssislog를 catalog.operation_messages에 연결할 때 .

모자 팁, 진심으로 감사와 답변 크레딧은 Marian에게 정확한 길을 안내해줍니다. 요약 된 로깅 테이블에 GUID (16 바이트)와 bigint (8 바이트)를 저장할 수 있다는 점을 고려할 때 큰 정수는 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.