2012-10-15 4 views
0

간단한 응용 프로그램을 사용 중이며 약간 변경/개선하려고합니다. 현재, 우리는 DTSX 파일을 실행하는 원격 컴퓨터에 박쥐 파일을 실행하는 응용 프로그램을 가지고 있습니다. 그건 잘 작동합니다.DTSX 파일 (SSIS 패키지)을 원격으로 실행하고 이벤트 캡처하기

내가 할 수있는 일은 bat/dtsx 파일의 이벤트/출력을 캡처하는 것입니다. this을 찾았습니다. 그러나 코드를 통해 직접 DTSX 파일을 실행하고 있지 않기 때문에 여기에 해당되는지 확실하지 않습니다. DTSX/SSIS 패키지를 실행하는 것에 대해서는 거의 알지 못하기 때문에 여기서 어디서부터 시작해야할지 모르겠습니다.

VB.NET에서이 작업이 수행되고 있음을 유의해야합니다.

+0

DTS (legacy) 또는 DTSX 일명 SSIS 패키지에 대해 이야기하고 있습니까? – billinkc

+0

죄송합니다. DTSX (SSIS 패키지)입니다. – Kurt

+0

VB.NET에서 시작된'dtexec.exe/file myPackage.dtsx ... '와 같은 일괄 처리 스크립트를 가지고 있고 실행중인 패키지가 뱉어내는 정보를 캡처하고 싶습니다. 텍스트 파일로 충분합니까? – billinkc

답변

1

가장 간단한 옵션은 출력을 리디렉션하도록 배치 스크립트를 수정하는 것입니다.

dtexec.exe /file myPackage.dtsx > myPackage.log 

이렇게하면 실행 당 로그 파일을 덮어 씁니다. 현재 % date % 및 % time %를 출력 파일 이름에 추가하여 더 좋아질 수 있습니다.

다음 옵션은 호출 코드를 변경하는 것입니다. 파일에 쓰도록 배치 스크립트를 리디렉션하는 대신 표시되는 내용에서 .NET 코드를 읽을 수 있습니다. 최고의 코드가 아니며 C#에 있지만 회의에 참석해야하며 변경할 수있는 시간이 필요하지 않습니다. 다음 코드는 ProcessResults 객체를 살펴보고 표준 출력 및 표준 오류 스트림을 추출합니다. 당신이 위의 텍스트 분석을 찾고 있습니다 위의 해결 방법 중 하나를 가진하지만이 시점에서

  this.processStartInfo = new ProcessStartInfo(this.dtUtilPath, parameters); 
      this.processStartInfo.RedirectStandardError = true; 
      this.processStartInfo.RedirectStandardOutput = true; 
      this.processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      this.processStartInfo.UseShellExecute = false; 
      System.Diagnostics.Process process = null; 

      // Perhaps it would be better to set this to 0 so that it runs to completion 
      int waitInMilliSeconds = 1 * 1000; 

      process = System.Diagnostics.Process.Start(this.processStartInfo); 
      System.IO.StreamReader standardError = process.StandardError; 
      System.IO.StreamReader standardOutput = process.StandardOutput; 
      process.WaitForExit(waitInMilliSeconds); 
      if (process.HasExited) 
      { 
       // Did it do well? 
       // Currently, prints results to console but based on 
       // exit code values can do whatever the business need is 
       System.Console.WriteLine(standardOutput.ReadToEnd()); 
       System.Console.WriteLine(standardError.ReadToEnd()); 
       System.Console.WriteLine(process.ExitCode); 
      } 

, "당신이 중요하다고 생각하는 어떤 정보를." 그것이 나이고, 지금까지 문제 영역에서 알지 못했던 것을 기반으로한다면 .NET의 정보 캡처를 건너 뛰었을 것입니다. 배치 스크립트 캡처는 이중 근무를 원한다면 도움이 될 수 있지만 출생지는 SSIS logging입니다.

  • 가의 OnError, OnTaskFailed, OnInformation, OnWarning 및 OnPre/PostExecute 이벤트
  • 로깅을 포착,이 배포 된 패키지의 코드 변경을 필요로하지만 난 로깅 켜기

    1. 으로 최고의 SSIS 경험을 찾을 수 SQL Server (2005는 dbo.sysdtslog90, 2008, R2 및 2012에 dbo.sysssislog에 패키지 배포 모드 로그로 기록합니다.이 테이블은 msdb에 있지만 제공된 연결 문자열이 다른 카탈로그를 가리키는 경우 테이블이 만들어집니다 해당 카탈로그 및 로깅에서 발생합니다)
  • +0

    나를 혼란스럽게 여기는 유일한 것은 ProcessResults() 객체입니다. 그 물체는 존재하지 않는 것 같습니다. 내가 여기서 뭔가를 놓치고 있니? – Kurt

    +0

    아, 네가 누락되어 샘플 코드를 통해 충분히 보지 못했다. 나는이 프로젝트의 내부적으로 그 구조를 정의했다. 위의 코드를 정리하자 – billinkc

    +0

    고마워. 전체 응용 프로그램을 완료하는 데는 시간이 걸릴 것입니다. 그러나 이것이 작동해야합니다 (또는 적어도 작동하게 만들 수있는 것 같습니다). – Kurt

    관련 문제