0

私は私たちが持っている簡単なアプリを試し、いくつかの変更を加えたり、改善したりしようとしています。現在、リモートコンピューターでbatファイルを実行しているアプリがあり、DTSXファイルが実行されます。それはうまくいきます。

私ができるようにしたいのは、bat/dtsxファイルからイベント/出力をキャプチャすることです。私はこれを見つけましが、コードを介してDTSXファイルを直接実行していないため、ここで適用されるかどうかはわかりません。DTSX / SSISパッケージの実行についてはほとんど知らないので、ここからどこから始めればよいのかさえよくわかりません。

これはVB.NETで行われていることにも注意してください。

4

1 に答える 1

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

At this point though, with either of the above solutions you are looking at parsing the above text for "whatever information you deem important." If it were me and based on what little I know so far of the problem domain, I'd skip the .NET capturing of information entirely. The batch script capture might be helpful if you like double duty but I'd go for native SSIS logging. This will require a code change on your deployed packages but I find I have the best SSIS experience by

  1. turning on logging,
  2. capturing OnError, OnTaskFailed, OnInformation, OnWarning and OnPre/PostExecute events
  3. SQL Serverへのログ記録(2005はパッケージ展開モードでdbo.sysdtslog90、2008、R2、および2012にログを記録します。これらのテーブルはmsdbに存在しますが、提供された接続文字列が別のカタログを指している場合、テーブルは次のようになります。そのカタログで作成され、ログがそこで発生します)
于 2012-10-15T18:45:03.577 に答える