远程执行DTSX文件(SSIS包)并捕获事件

时间:2012-10-15 18:12:45

标签: vb.net ssis

我正在浏览一个简单的应用程序,并尝试进行一些更改/改进。目前,我们让应用程序在远程计算机上运行bat文件,该文件又执行DTSX文件。这很好。

我希望能够捕获bat / dtsx文件中的事件/输出。我找到了this,但由于我没有通过代码直接运行DTSX文件,我不确定这是否适用于此。我对运行DTSX / SSIS软件包知之甚少,所以我真的不确定从哪里开始。

还应该注意,这是在VB.NET中完成的。

1 个答案:

答案 0 :(得分: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。这将需要对已部署的软件包进行代码更改,但我发现

具有最佳的SSIS体验
  1. 开启日志记录,
  2. 捕获OnError,OnTaskFailed,OnInformation,OnWarning和OnPre / PostExecute事件
  3. 登录到SQL Server(2005将在软件包部署模式下登录到dbo.sysdtslog90,2008,R2和2012日志到dbo.sysssislog。这些表存在于msdb中,但如果提供的连接字符串指向不同的目录,则将在该目录中创建表,并在那里进行日志记录)