Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Você pode monitorar a execução de um pacote SSIS, em BIDS, conforme ele é executado no servidor?

Opção possível:


Você precisa usar o Logging recurso no SSIS. Permite configurar os eventos para os quais deseja capturar as mensagens. Eu geralmente prefiro o log OnWarning e OnError para acompanhar todas as mensagens de aviso e erro que ocorrem no pacote. Você tem vários provedores para salvar os dados de registro. Prefiro usar o SQL Server para poder consultar as informações de log.

Opções de registro mostradas no SSIS 2012:


Para habilitar o login em um pacote, você precisa clicar no pacote Business Intelligence Development Studio (BIDS) se você estiver desenvolvendo pacotes no SSIS 2005 - 2008 R2 ou SQL Server Data Tools (SSDT) se você estiver desenvolvendo pacotes no SSIS 2012.

Clique em SSIS menu e clique em Logging...

Você verá a caixa de diálogo Configurar logs do SSIS.

No lado esquerdo, você pode verificar o pacote ou tarefas individuais para registrar os dados do evento.

Em Provedores e registros guia, você pode selecionar um provedor apropriado no qual você pode salvar as informações de log. A captura de tela abaixo mostra que as informações do evento são capturadas em um banco de dados SQL Server usando o gerenciador de conexões OLEDB_PracticeDB .



Nos Detalhes guia, você pode selecionar quais eventos deseja capturar. A captura de tela abaixo mostra que estou capturando os seguintes eventos.
  • OnError
  • Sobre informações
  • OnTaskFailed
  • Aviso

Obrigado a @William Todd Salzman por recomendar OnTaskFailed evento


Exemplo de ilustração de pacote:


Digamos que temos um pacote chamado SO_15004109.dtsx com uma Tarefa de fluxo de dados e Tarefa de script . A Tarefa de Fluxo de Dados é apenas um boneco sem componentes internos.



A tarefa de script tem o seguinte código no método Main para disparar informações personalizadas, mensagens de aviso e de erro para que possamos observar como ele é capturado na fonte de dados de log. O código foi escrito para o SSIS 2012, portanto, talvez seja necessário alterá-lo para o SSIS 2005. Escolhi VB.NET em vez de C# porque você marcou esta pergunta em e o SSIS 2005 suporta apenas VB.NET.

Código de tarefa de script em VB.NET para SSIS 2005 e superior.

#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



Se executarmos o pacote, ele falhará porque geramos um erro na Tarefa de script .



Se você navegar até a fonte de dados onde registrou os erros, notará que o SSIS cria uma tabela para registrar as informações se você escolher o provedor de log do SQL Server. A tabela abaixo lista a tabela de log que o SSIS cria no banco de dados do SQL Server escolhido para ser o provedor de log.
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

A consulta abaixo foi executada no banco de dados para visualizar os eventos capturados por este pacote de amostra. Você notará algumas mensagens duas vezes porque os eventos são registrados para cada contêiner e tarefa. A tabela é denominada dbo.sysssislog porque o pacote foi criado no SSIS 2012.
select id, event, source, message from dbo.sysssislog;


Experiência pessoal com registro:


Eu tive bastante sucesso em apenas visualizar as mensagens de erro de log para entender o que deu errado. Depurar pacotes em ambiente de produção não é aconselhável, na minha opinião. No entanto, é preferível capturar eventos de log.

Quando trabalhei no SSIS 2005 e 2008, criei relatórios baseados em SSRS que consultam a tabela de log para gerar relatório diário das execuções de trabalho e enviar um anexo em PDF para pessoas de interesse.

As coisas melhoraram no SSIS 2012 que a ferramenta vem com recursos de relatórios integrados com Catálogo de serviços de integração que cria um banco de dados chamado SSIDB .