你可以在服务器上运行的BIDS中监控SSIS包的执行吗?

RLH*_*RLH 7 debugging ssis sql-server-2005 bids

虽然我的标题说明了我目前的目标,但我愿意接受其他解决方案.简而言之,我有一系列SSIS包计划在我们的SQL Server计算机上每晚运行.

由于各种更新发生在我公司IT 的以太网中,有时这些出口制动并且该过程将在工作中间停止工作.要对此过程进行故障排除,我会在工作站上启动BIDS并重新启动哪个进程失败.这很有用,因为根据我的经验,从BIDS中生成的任何错误都比我在SQL Server /程序包执行历史记录或服务器事件日志中发现的任何错误更有用.

从历史上看,我的问题是并非所有问题都会出现在BIDS中,但它们会一直在服务器上.这些问题对于诊断来说是痛苦的,并且花费了我很多时间.

因此,我想要做的是将我的包发布到SSIS服务器,从BIDS启动服务器实例并在运行时监视项目.这可能吗?

如果没有,是否还有其他我可以做的事情,以便我可以在流程执行时监控内部步骤?

我担心这一切都不可能,但我不得不问.它将使我的调试和故障排除生活变得更加容易.

小智 13

可能的选择:

您需要Logging在SSIS中使用功能.它允许您配置要捕获消息的事件.我通常更喜欢日志OnWarningOnError跟踪包中出现的所有警告和错误消息.您有各种提供程序来保存日志记录数据.我更喜欢使用SQL Server,以便我可以查询日志记录信息.

SSIS 2012中显示的日志选项:

要在程序包中启用日志记录,Business Intelligence Development Studio (BIDS)如果要在SSIS 2005 - 2008 R2 SQL Server Data Tools (SSDT)中开发程序包,或者要在SSIS 2012中开发程序包,则需要单击该程序包.

单击SSIS菜单,然后单击Logging...

您将看到"配置SSIS日志"对话框.

在左侧,您可以检查包或单个任务以记录事件数据.

在" 提供程序和日志"选项卡上,您可以选择可以保存日志信息的相应提供程序.下面的屏幕截图显示了使用连接管理器在SQL Server数据库中捕获事件信息OLEDB_PracticeDB.

配置SSIS日志 - 提供程序和日志

在" 详细信息"选项卡上,您可以选择要捕获的事件.下面的屏幕截图显示我正在捕获以下事件.

  • 的OnError
  • OnInformation
  • OnTaskFailed
  • OnWarning

感谢@William Todd Salzman推荐OnTaskFailed活动

配置SSIS日志 -

样品包装图:

比方说,我们有一个名为包SO_15004109.dtsx数据流任务脚本任务.数据流任务只是一个假人,内部没有组件.

示例包 - 数据流选项卡

脚本任务在Main方法中具有以下代码,用于触发自定义信息,警告和错误消息,以便我们可以观察它在日志记录数据源中的捕获方式.代码是为SSIS 2012编写的,因此您可能需要为SSIS 2005更改它.我选择的VB.NET不是C#因为您在下标记了此问题而SSIS 2005仅支持VB.NET.

用于SSIS 2005及更高版本的VB.NET中的脚本任务代码.

#Region "Imports"
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
#End Region

<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute()> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
    Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

    Public Sub Main()

        Dim fireAgain As Boolean = False
        Dts.Events.FireInformation(101, "Custom Script Information", "This is a test information message.", String.Empty, 0, fireAgain)
        Dts.Events.FireWarning(201, "Custom Script Warning", "This is a test warning message.", String.Empty, 0)
        Dts.Events.FireError(201, "Custom Script Error", "This is a test error message.", String.Empty, 0)

        Dts.TaskResult = ScriptResults.Success
    End Sub

#Region "ScriptResults declaration"

    Enum ScriptResults
        Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
        Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    End Enum

#End Region

End Class
Run Code Online (Sandbox Code Playgroud)

脚本任务代码

如果我们执行包,它将失败,因为我们在脚本任务中引发了错误.

包执行

如果导航到记录错误的数据源,您会注意到如果选择SQL Server日志记录提供程序,SSIS会创建一个表来记录信息.下表列出了SSIS在选择作为日志提供程序的SQL Server数据库中创建的日志记录表.

SSIS Version   Log table name    Table type
-------------- ----------------  ----------
SSIS 2005      dbo.sysdtslog90   User
SSIS 2008      dbo.sysdtslog100  User
SSIS 2008 R2   dbo.sysssislog    System
SSIS 2012      dbo.sysssislog    System
Run Code Online (Sandbox Code Playgroud)

下面的查询在数据库中执行,以查看此示例包捕获的事件.您会注意到两次消息,因为每个容器和任务都会记录事件.该表的命名dbo.sysssislog是因为该包是在SSIS 2012中创建的.

select id, event, source, message from dbo.sysssislog;
Run Code Online (Sandbox Code Playgroud)

记录数据

记录的个人经验:

我只是在查看日志记录错误消息以了解出了什么问题时取得了相当不错的成功.在我看来,不建议在生产环境中调试包.但是,捕获日志事件是更可取的.

当我在SSIS 2005和2008工作时,我创建了基于SSRS的报告,查询日志表以生成作业执行的每日报告,并向感兴趣的人发送PDF附件.

在SSIS 2012中,该工具已经改进,该工具带有内置的报告功能,其中Integration Services Catalog创建了一个名为的数据库SSIDB.

  • +1 @Siva你给我一个类似的答案(像往常一样更详细),因为你把它更快地输入了,我放弃了我的.请注意我上面编辑的日志记录表名称的更改.我还将OnTaskFailed错误添加到我的默认日志记录首选项中. (2认同)