SSIS - 如何识别日志表中一行所指的包?

时间:2010-09-07 13:43:47

标签: sql-server ssis

我有多个SSIS集成包记录到数据库。他们都写信给表sysssislog。

我希望存储过程能够返回上次运行所选包的成功。

如何识别sysssislog中的包? executionid字段似乎有效,但似乎它在同一个包的大多数运行中改变了值(有时它保持不变)。有没有办法知道日志条目来自哪个包?

sysssislog的结构供参考:

CREATE TABLE [dbo].[sysssislog](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [event] [sysname] NOT NULL,
    [computer] [nvarchar](128) NOT NULL,
    [operator] [nvarchar](128) NOT NULL,
    [source] [nvarchar](1024) NOT NULL,
    [sourceid] [uniqueidentifier] NOT NULL,
    [executionid] [uniqueidentifier] NOT NULL,
    [starttime] [datetime] NOT NULL,
    [endtime] [datetime] NOT NULL,
    [datacode] [int] NOT NULL,
    [databytes] [image] NULL,
    [message] [nvarchar](2048) NOT NULL,

6 个答案:

答案 0 :(得分:2)

这是一个很好的视图候选者,可以查看SSIS中所有软件包的执行历史记录,您还可以看到软件包在几分钟内运行了多长时间:

select 
 source [PackageName], s.executionid
, min(s.starttime) StartTime
, max(s.endtime) EndTime
, (cast(max(s.endtime) as float) - cast(min(s.starttime) as float))*24*60 DurationInMinutes
from dbo.sysssislog as s
where event in ('PackageStart', 'PackageEnd')
--and source = 'foobar'
group by s.source, s.executionid
order by max(s.endtime) desc

答案 1 :(得分:1)

Books On Line

了解这是否对您有所帮助

来源nvarchar

包中的可执行文件的名称,用于生成日志记录条目。

sourceid uniqueidentifier

生成日志记录条目的包中的可执行文件的GUID。

答案 2 :(得分:1)

“sourceid”与您的事件的SSIS包GUID相同

  • PackageStart
  • PackageEnd

如上所述 - executionid是run的特定实例的guid。

您可能希望启用“OnError”事件处理程序,以便生成未失败的程序包。

要生成报告,您可以执行以下操作:

在id = sourceid上加入msdb。[dbo]。[sysdtspackages]和dbo.sysssislog表。失败的软件包将在sysssislog表中具有OnError条目,您可以从中推断状态。

- 请标记这是否回答了您的问题

答案 3 :(得分:1)

与原始海报一样,我希望在浏览SSIS日志时在我的所有源名称前面看到我的包的名称。在阅读William的回复时,我意识到可以利用ExecutionID来做到这一点,至少在使用SQL Server的SSIS日志提供程序时。

如果您使用的是SQL Server 2008,并且您的SSIS日志记录表使用标准名称“sysssislog”,请尝试以下查询:

SELECT s1.id, s1.operator, s1.event, s2.source package_name, s1.source,
    CONVERT(varchar, s1.starttime, 120) AS starttime, s1.message, s1.datacode
FROM dbo.sysssislog AS s1 LEFT OUTER JOIN
       dbo.sysssislog AS s2 ON s1.executionid = s2.executionid
WHERE s2.event = 'PackageStart'
ORDER BY s1.id

注意:

  • 转换语句会修剪小数秒。
  • 如果您使用的是SQL Server 2005,请调整表名。
  • 我使用查询创建了一个名为“SSIS_Log_View”的视图

我希望有所帮助。

答案 4 :(得分:0)

事件为“Package Start”的源ID列标识包名称。执行ID绑定到包运行的该实例的所有相关行。

通过打开包并查看包级别属性中的ID字段,可以将源ID绑定到您的包的开发。此GUID与日志中的包级别源ID列相匹配。包中的每个对象也都有自己的GUID,这些可以在日志中看到。

答案 5 :(得分:0)

如果要在运行项目期间监视执行情况,则必须使用更复杂的查询,例如:

SELECT MIN(A.ID) AS ID,
 A.Source
, MIN(A.StartTime) AS StartTime
,  case when MAX(B.endtime) IS NULL then null else round((cast(MAX(B.endtime) as float) - cast(MIN(A.starttime) as float))*24*60*60, 0) end AS Seconds
, C.Message
FROM (
SELECT ID, Source, StartTime, ExecutionID
FROM SysSSiSLog
WHERE Event = 'PackageStart' 
) A
LEFT OUTER JOIN (
SELECT Source, EndTime, ExecutionID
FROM SysSSiSLog
WHERE Event = 'PackageEnd' 
) B 
ON A.Source = B.Source AND A.ExecutionID = B.ExecutionID
LEFT OUTER JOIN (
SELECT distinct Source, EndTime, ExecutionID, Message
FROM SysSSiSLog
WHERE Event = 'OnError'
) C 
ON A.Source = C.Source AND A.ExecutionID = C.ExecutionID
WHERE A.ID >= (SELECT MAX(ID) FROM SysSSiSLog WHERE Source = 'Main' AND Event = 'PackageStart')
GROUP BY A.Source, A.ExecutionID, C.Message
ORDER BY min(A.ID) Asc