如何获取进程的开始时间和结束时间ssis
问题描述:
我有一个ssis包,其中包括一个foreach容器,用于循环遍历文件并将其加载到表中。现在我想跟踪进程开始时间,结束时间和状态到另一个表中。我怎样才能做到这一点..?如何获取进程的开始时间和结束时间ssis
答
创建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?,但这只会让你的开始时间,而不是结束时间。
答
我希望你正在使用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
答
然而,这个问题并没有真正的优雅的解决方案,你可以试试这个。
创建单独的包,其中包含单个或组包含的任务,从监视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.
}
您是否需要跟踪整个程序包或循环执行时间? – 2014-10-22 12:22:01
每个文件加载的循环开始时间和完成加载的时间 – 2014-10-23 04:06:36
请不要发布重复项。先完成你原来的问题。 http://stackoverflow.com/questions/26479439/load-files-into-a-table-using-loop-in-ssis-2008 – 2014-10-23 04:16:37