debugging - 您能否在 BIDS 中监视 SSIS 包在服务器上运行时的执行情况?

标签 debugging sql-server-2005 ssis bids

尽管我的头衔说明了我目前的目标,但我对其他解决方案持开放态度。简而言之,我有一系列 SSIS 包,它们计划在我们的 SQL Server 机器上每晚运行。

由于我的公司 IT 中发生的各种更新,有时这些导出会在工作中停止,并且该过程将停止工作。为了解决这个过程,我在我的工作站上启动 BIDS 并重新启动失败的过程。这很有用,因为根据我的经验,BIDS 中生成的任何错误都比我从 SQL Server/包执行历史记录或服务器事件日志中发现的任何错误有用得多。

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

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

如果没有,还有什么我可以做的,以便我可以在流程执行时监控内部步骤?

我担心这一切都不可能,但我不得不问。这将使我的调试和故障排除工作变得更加轻松。

最佳答案

可能的选择:
您需要利用 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 日志”对话框。
在左侧,您可以检查包或单个任务以记录事件数据。
在提供程序和日志选项卡上,您可以选择一个适当的提供程序,您可以将日志信息保存到该提供程序。以下屏幕截图显示使用连接管理器 OLEDB_PracticeDB 在 SQL Server 数据库中捕获事件信息。 .
Configure SSIS Logs - Providers and Logs
在详细信息选项卡上,您可以选择要捕获的事件。下面的屏幕截图显示我正在捕获以下事件。

  • OnError
  • 在线咨询
  • OnTaskFailed
  • 关于警告

  • 感谢 @William Todd Salzman推荐 OnTaskFailed事件
    Configure SSIS Logs - Details tab
    sample 包说明:
    假设我们有一个名为 SO_15004109.dtsx 的包带有数据流任务和脚本任务。数据流任务只是一个内部没有组件的虚拟对象。
    Sample Package - Data Flow Tab
    脚本任务在 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
    
    Script Task code
    如果我们执行包,它将失败,因为我们在脚本任务中引发了错误。
    Package Execution
    如果您导航到记录错误的数据源,您会注意到如果您选择了 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
    
    在数据库中执行以下查询以查看此示例包捕获的事件。您会两次注意到一些消息,因为每个容器和任务都记录了事件。该表名为 dbo.sysssislog因为该包是在 SSIS 2012 中创建的。
    select id, event, source, message from dbo.sysssislog;
    
    Logging data
    个人日志记录:
    我在查看日志错误消息以了解出了什么问题方面取得了相当大的成功。在我看来,不建议在生产环境中调试包。但是,最好捕获日志事件。
    当我在 SSIS 2005 和 2008 中工作时,我创建了基于 SSRS 的报告,该报告查询日志表以生成作业执行的每日报告并将 PDF 附件发送给感兴趣的人。
    SSIS 2012 中的情况有所改善,该工具带有内置报告功能 Integration Services Catalog创建一个名为 SSIDB 的数据库.

    关于debugging - 您能否在 BIDS 中监视 SSIS 包在服务器上运行时的执行情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15004109/

    相关文章:

    c# - 更新前锁定记录?

    SSIS 填充日期时间格式 : "hh mm ss nnn cc yy mm dd"

    c# - 作为 SSIS 脚本任务的一部分,在 C# 中打开、保存然后关闭 xls 文件

    linux - 调试输出未正确显示

    javascript - 有没有办法从 Internet Explorer 中的错误对象获取行号或堆栈跟踪?

    javascript - 在 Mac 上的 VSCode 中调试 Javascript

    sql - 无法解决联合选择中的排序规则冲突

    sql - 使用 Oracle SQL Developer 作为我的客户端时如何为 SQL Server 调用 sp_help [table]

    mysql - 将 SQL Server DATETIMEOFFSET 转换为 mySQL DateTime

    ruby - 我如何跟踪我的堆栈跟踪高度以进行调试?