SSIS记录到SQL Server

7
我是SSIS的新手。我创建了一个包含一些Sequence Containers和其中的一些Tasks的包。该包将自动定时运行,因此我想捕获运行时错误和状态,例如插入/更新/删除的行数,并将它们记录到SQL数据库中我的自定义日志表中。
我考虑使用SSIS Logging to SQL Server功能将条目记录到默认表中,然后创建一个SQL任务将它们插入到我的自定义日志表中。这样做好吗?还是您建议其他更好的方法?
此外,我无法正确使用SSIS日志记录功能。我在网上找到了一个博客(如何在SSIS Package中创建错误日志或自定义错误日志)来描述使用SSIS日志记录将条目记录到SQL Server。但与博客中所述不同,
我无法在我的SQL Server数据库中看到创建dbo.sysssislogdbo.sp_ssis_addlogentry表。我可能做错了什么?以下是我遵循的步骤-
  1. 进入SSIS Logging
  2. 选择提供程序类型为SQL Server
  3. 添加OLEDB连接以进行配置
  4. 进入每个序列容器的详细选项卡并选择适当的事件
  5. 点击“保存…”
  6. 提供XML文件的位置和名称
  7. 保存包并运行。
  8. 仍然无法在数据库中看到那些ssis表或过程。我使用的是SQL 2008R2。

    如有建议和推荐,非常感激。
    先谢谢了。

当包首次执行时,存储过程和模板日志表将被复制到您在日志提供程序中选择的目录中。它们目前存在于 msdb 中。 - billinkc
4个回答

11

请查看你列表中的#3,记录下该数据库的位置。

在SSMS中导航到该数据库。展开数据库(点击左侧的加号)。

对于表位置:

展开Tables文件夹。展开System Tables文件夹。表应该在那里可见。它的名称是dbo.sysssislog

对于过程位置:

展开Programmability文件夹。展开System Stored Procedures文件夹。存储过程应该可见。它的名称是dbo.sp_ssis_addlogentry


我现在可以看到msdb数据库中的表了。但是当我执行程序包时,无法将任何内容记录到其中。我甚至更改了“配置”,在“SSIS日志记录”屏幕的“提供程序和日志”选项卡中包括OLE DB连接到msdb数据库。我还选择了所有顶级容器的事件,这些容器向下流入所有的序列容器和任务。我可能做错了什么。谢谢。 - edyleddie
MSDB数据库中的副本只是模板。您应该在另一个数据库中使用它们。在您更改之前,#3中的数据库是什么?那里将是您的对象所在的地方。请记住,在2008和2008 R2中,它们将是系统对象。不确定2012年如何。 - William Salzman

2
关于用户数据库(位于系统表文件夹中)中sysssislog系统表的可见性问题。我已经使用“将事件写入SQL Server数据库的日志条目”为SSIS包(2008 R2)设置了日志记录,并指定了用户数据库。然后运行了SSIS包,发现系统表文件夹中的sysssislog表已经存在(且其中包含预期数据)。之后我决定测试一下这个表是否“在每次运行SSIS包时都会被创建”。我删除了此表。再次运行SSIS包后,确实已经在用户表中重新创建了sysssislog表,并包含正确的数据。但是我在SSMS的系统表中从未看到过它,也就是说,该表存在(例如存在于sysobjects、systables等中),但没有显示在SSMS对象浏览器列表中。我明白这不是SSIS的bug(SSIS确实每次运行都重新创建该表),而是SSMS的bug(它某种方式丢失了此表的元数据)。我多次删除此表并重新运行SSIS包,它确实每次都会被重新创建并用上一个SSIS包运行的数据重新填充。但我从未能在对象浏览器中看到它(当然,我已经在任何级别上刷新它、关闭/重新打开SSMS——出于任何原因,此表从未出现过)。我能够在MSDB数据库中看到此系统表(但它是空的)。我重复为不同的数据库创建日志记录(为不同的数据库创建新连接),SSIS运行后,sysssislog表被创建并可以在系统表中看到(但再次删除此表后,在重新创建时永远无法在对象浏览器中看到它)。只是想分享一下这个有趣的bug。MS QA从未测试过这种情况(即在SSIS中通知SSMS在第二次和随后的实例中创建该表)。Alexei

2

对于日志记录,我通常通过变量获取所需信息,然后在流程结束时执行存储过程,将记录插入到“ProjectLog”表中。不确定是否理想,但对我们有效。

原因: *错误消息可以自定义,因此更容易阅读和排除故障。 *我们有“OnError”任务,带有自定义、易于理解的错误消息(例如,“进程未执行。文件x缺少x列/字段的必需数据”)。 *可以添加对您的团队有价值的数据以满足业务要求。

*请注意,这是我们额外进行的一步,除了每天覆盖的错误日志文本文件。


1
我做同样的事情 - 所以我不会提供竞争性答案。基本上,你在数据流中有RowCount个任务,它们根据条件分割捕获计数。也许,作为答案,您可以为OP提供一些屏幕截图和查询示例。 - J Weezy

1
即使您已启用了SSIS日志记录,但如果您尝试执行任务(而不是执行实际包),则sysssislog表将不会在msdb或所述连接管理器中创建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接