如何获取进程的开始时间和结束时间

时间:2014-10-22 05:06:15

标签: ssis

我有一个ssis包,其中包含一个foreach容器来循环遍历文件并将其加载到表中。现在我想跟踪进程的开始时间,结束时间和状态到另一个表中。我怎样才能实现这个目标..?

3 个答案:

答案 0 :(得分:2)

创建2个全局变量 - 一个用于开始时间,一个用于结束时间。 使用在foreach容器之前运行的脚本任务来设置开始时间变量,以及在foreach容器之后运行的另一个脚本任务来设置结束时间变量。之后,使用派生列数据流转换将开始和结束时间输入管道非常简单,以便您可以保留它们。

在脚本任务中不要忘记引用变量,脚本应该如下所示:

public void Main()
    {
        DateTime currentDate = DateTime.Now;
        Dts.Variables["StartDate"].Value = currentDate;
        Dts.TaskResult = (int)ScriptResults.Success;
    }

此处也可以找到另一种方法:How can a step in an SSIS package check for the time?但这只会让您获得开始时间,而不是结束时间。

答案 1 :(得分:1)

这个问题并不是一个优雅的解决方案,但你可以试试这个。

创建包含单个或组包含任务的单独包,从监视Stopwatch对象的脚本任务中加载和执行它。

    public void Main()
    {
        Application dtsRuntimeApp = new Application();
        Package dtsPackage = dtsRuntimeApp.LoadPackage(@"PackageFileName.dtsx", null);
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        dtsPackage.Execute();
        stopwatch.Stop();
        var totalElapsedTime = stopwatch.Elapsed; // package timing here.
    }

答案 2 :(得分:0)

我希望您使用SSIS 2012.

SSISDB中,可以使用一组视图。这些给了我们执行包的每个细节。您可以从下面的sql编辑。 (只是一个例子)

SELECT  E.execution_id,
        E.project_name,
        E.package_name,
        S.start_time,
        S.end_time
FROM [SSISDB].[catalog].[executions] E
JOIN [SSISDB].[catalog].[executables] EX ON E.execution_id = EX.executable_id
JOIN [SSISDB].[catalog].[executable_statistics] S ON E.execution_id = S.execution_id