2014-10-22 156 views
1

我有一个ssis包,其中包括一个foreach容器,用于循环遍历文件并将其加载到表中。现在我想跟踪进程开始时间,结束时间和状态到另一个表中。我怎样才能做到这一点..?如何获取进程的开始时间和结束时间ssis

+0

您是否需要跟踪整个程序包或循环执行时间? – 2014-10-22 12:22:01

+0

每个文件加载的循环开始时间和完成加载的时间 – 2014-10-23 04:06:36

+0

请不要发布重复项。先完成你原来的问题。 http://stackoverflow.com/questions/26479439/load-files-into-a-table-using-loop-in-ssis-2008 – 2014-10-23 04:16:37

回答

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?,但这只会让你的开始时间,而不是结束时间。

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 
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. 
    } 
相关问题