AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 118737
Accepted
Marcello Miorelli
Marcello Miorelli
Asked: 2015-10-22 04:05:41 +0800 CST2015-10-22 04:05:41 +0800 CST 2015-10-22 04:05:41 +0800 CST

como consultar o SSISDB para descobrir os erros nos pacotes?

  • 772

Eu vi esta pergunta SSIS 2012 - Como consultar pacotes atualmente em execução no T-SQL?

Ele me dá o seguinte script:

SELECT
    E.execution_id
,   E.folder_name
,   E.project_name
,   E.package_name
,   E.reference_id
,   E.reference_type
,   E.environment_folder_name
,   E.environment_name
,   E.project_lsn
,   E.executed_as_sid
,   E.executed_as_name
,   E.use32bitruntime
,   E.operation_type
,   E.created_time
,   E.object_type
,   E.object_id
,   E.status
,   E.start_time
,   E.end_time
,   E.caller_sid
,   E.caller_name
,   E.process_id
,   E.stopped_by_sid
,   E.stopped_by_name
,   E.dump_id
,   E.server_name
,   E.machine_name
,   E.total_physical_memory_kb
,   E.available_physical_memory_kb
,   E.total_page_file_kb
,   E.available_page_file_kb
,   E.cpu_count
,   F.folder_id
,   F.name
,   F.description
,   F.created_by_sid
,   F.created_by_name
,   F.created_time
,   P.project_id
,   P.folder_id
,   P.name
,   P.description
,   P.project_format_version
,   P.deployed_by_sid
,   P.deployed_by_name
,   P.last_deployed_time
,   P.created_time
,   P.object_version_lsn
,   P.validation_status
,   P.last_validation_time
,   PKG.package_id
,   PKG.name
,   PKG.package_guid
,   PKG.description
,   PKG.package_format_version
,   PKG.version_major
,   PKG.version_minor
,   PKG.version_build
,   PKG.version_comments
,   PKG.version_guid
,   PKG.project_id
,   PKG.entry_point
,   PKG.validation_status
,   PKG.last_validation_time
FROM
    SSISDB.catalog.executions AS E
INNER JOIN
    ssisdb.catalog.folders AS F ON F.name = E.folder_name
INNER JOIN 
    SSISDB.catalog.projects AS P ON P.folder_id = F.folder_id
                                 AND P.name = E.project_name
INNER JOIN
    SSISDB.catalog.packages AS PKG ON PKG.project_id = P.project_id
                                   AND PKG.name = E.package_name;

Mas não responde à minha busca. Estou investigando as razões pelas quais os pacotes falham e preciso obter as mensagens de erro.

Onde posso encontrá-lo?

Eu gostaria de usar o T-SQL para consultar a mensagem de erro.

Eu também tenho este script abaixo, que me aproxima, mas não exatamente:

SELECT 
    q.*
FROM
    (SELECT em.*
     FROM SSISDB.catalog.event_messages em
     WHERE em.operation_id = (SELECT MAX(execution_id) 
                              FROM SSISDB.catalog.executions)
       AND event_name NOT LIKE '%Validate%') q
/* Put in whatever WHERE predicates you might like*/
--WHERE event_name = 'OnError'
WHERE package_name = 'InfoGroup Feed.dtsx'
--WHERE execution_path LIKE '%<some executable>%'
ORDER BY message_time DESC

Este é o e-mail que eu gostaria de abordar, como eles chegaram a essa mensagem de erro:

Qualquer informação sobre como solucionar erros do SSIS é bem-vinda.

insira a descrição da imagem aqui

sql-server sql-server-2014
  • 4 4 respostas
  • 72975 Views

4 respostas

  • Voted
  1. Best Answer
    billinkc
    2015-10-22T18:27:07+08:002015-10-22T18:27:07+08:00

    Eu tenho um punhado de consultas que eu uso. Os conceitos gerais são que a tabela com as informações é catalog.operation_messagese você está interessado em eventos do tipo 120 (erro).

    Dependendo da robustez de uma consulta que você deseja criar, as duas tabelas derivadas a seguir também podem ser de interesse.

    --- http://technet.microsoft.com/en-us/library/ff877994.aspx
    -- This query translates the message_type from SSISDB.catalog.operation_messages
    -- into useful text
    SELECT
        D.message_type
    ,   D.message_desc
    FROM
    (
        VALUES
            (-1,'Unknown')
        ,   (120,'Error')
        ,   (110,'Warning')
        ,   (70,'Information')
        ,   (10,'Pre-validate')
        ,   (20,'Post-validate')
        ,   (30,'Pre-execute')
        ,   (40,'Post-execute')
        ,   (60,'Progress')
        ,   (50,'StatusChange')
        ,   (100,'QueryCancel')
        ,   (130,'TaskFailed')
        ,   (90,'Diagnostic')
        ,   (200,'Custom')
        ,   (140,'DiagnosticEx Whenever an Execute Package task executes a child package, it logs this event. The event message consists of the parameter values passed to child packages.  The value of the message column for DiagnosticEx is XML text.')
        ,   (400,'NonDiagnostic')
        ,   (80,'VariableValueChanged')
    ) D (message_type, message_desc);
    
    
    -- Where was the error message generated?
    SELECT
        D.message_source_type
    ,   D.message_source_desc
    FROM
    (
        VALUES
            (10,'Entry APIs, such as T-SQL and CLR Stored procedures')
        ,   (20,'External process used to run package (ISServerExec.exe)')
        ,   (30,'Package-level objects')
        ,   (40,'Control Flow tasks')
        ,   (50,'Control Flow containers')
        ,   (60,'Data Flow task')
    ) D (message_source_type, message_source_desc);
    

    Eu uso consultas como esta para encontrar informações sobre os erros. Talvez eu só me importe com quais foram os erros (consulta 1). Outras vezes, quero saber todas as atividades de todas as operações que falharam (consulta 2). Geralmente, sou preguiçoso e quero ver todas as informações sobre a última operação com falha (consultar 3 e observar a ressalva).

    -- http://msdn.microsoft.com/en-us/library/ff877994.aspx
    -- Find all error messages
    SELECT
        OM.operation_message_id
    ,   OM.operation_id
    ,   OM.message_time
    ,   OM.message_type
    ,   OM.message_source_type
    ,   OM.message
    ,   OM.extended_info_id
    FROM
        catalog.operation_messages AS OM
    WHERE
        OM.message_type = 120;
    
    -- Generate all the messages associated to failing operations
    SELECT
        OM.operation_message_id
    ,   OM.operation_id
    ,   OM.message_time
    ,   OM.message_type
    ,   OM.message_source_type
    ,   OM.message
    ,   OM.extended_info_id
    FROM
        catalog.operation_messages AS OM
        INNER JOIN
        (  
            -- Find failing operations
            SELECT DISTINCT
                OM.operation_id  
            FROM
                catalog.operation_messages AS OM
            WHERE
                OM.message_type = 120
        ) D
        ON D.operation_id = OM.operation_id;
    
    -- Find all messages associated to the last failing run
    SELECT
        OM.operation_message_id
    ,   OM.operation_id
    ,   OM.message_time
    ,   OM.message_type
    ,   OM.message_source_type
    ,   OM.message
    ,   OM.extended_info_id
    FROM
        catalog.operation_messages AS OM
    WHERE
        OM.operation_id = 
        (  
            -- Find the last failing operation
            -- lazy assumption that biggest operation
            -- id is last. Could be incorrect if a long
            -- running process fails after a quick process
            -- has also failed
            SELECT 
                MAX(OM.operation_id)
            FROM
                catalog.operation_messages AS OM
            WHERE
                OM.message_type = 120
        );
    

    Talvez eu seja preguiçoso e não queira procurar essas informações no caso de uma falha, tanto quanto sua equipe parece ter feito. Eu tenho um trabalho do SQL Agent que é executado sob demanda e tenho trabalhos que executam pacotes SSIS definidos para executar esse trabalho em caso de falha.

    DECLARE
        @profile_name sysname = 'SQLAdmins'
    ,   @recipients varchar(max) = '[email protected]'
    ,   @copy_recipients varchar(max) = NULL
    ,   @blind_copy_recipients varchar(max) = NULL
    ,   @subject nvarchar(255) = 'failed package test'
    ,   @body nvarchar(max) = 'Stuff has failed, fix please'
    ,   @body_format varchar(20) = NULL
    ,   @importance varchar(6) = 'NORMAL'
    ,   @sensitivity varchar(12) = 'NORMAL'
    ,   @file_attachments nvarchar(max) = NULL
    ,   @query nvarchar(max) = N'
    SELECT
        O.object_name AS FailingPackageName
    ,   O.object_id
    ,   O.caller_name
    ,   O.server_name
    ,   O.operation_id
    ,   OM.message_time
    ,   EM.message_desc
    ,   D.message_source_desc
    ,   OM.message
    FROM
        SSISDB.catalog.operation_messages AS OM
        INNER JOIN
            SSISDB.catalog.operations AS O
            ON O.operation_id = OM.operation_id
        INNER JOIN
        (
            VALUES
                (-1,''Unknown'')
            ,   (120,''Error'')
            ,   (110,''Warning'')
            ,   (70,''Information'')
            ,   (10,''Pre-validate'')
            ,   (20,''Post-validate'')
            ,   (30,''Pre-execute'')
            ,   (40,''Post-execute'')
            ,   (60,''Progress'')
            ,   (50,''StatusChange'')
            ,   (100,''QueryCancel'')
            ,   (130,''TaskFailed'')
            ,   (90,''Diagnostic'')
            ,   (200,''Custom'')
            ,   (140,''DiagnosticEx Whenever an Execute Package task executes a child package, it logs this event. The event message consists of the parameter values passed to child packages.  The value of the message column for DiagnosticEx is XML text.'')
            ,   (400,''NonDiagnostic'')
            ,   (80,''VariableValueChanged'')
        ) EM (message_type, message_desc)
            ON EM.message_type = OM.message_type
        INNER JOIN
        (
            VALUES
                (10,''Entry APIs, such as T-SQL and CLR Stored procedures'')
            ,   (20,''External process used to run package (ISServerExec.exe)'')
            ,   (30,''Package-level objects'')
            ,   (40,''Control Flow tasks'')
            ,   (50,''Control Flow containers'')
            ,   (60,''Data Flow task'')
        ) D (message_source_type, message_source_desc)
            ON D.message_source_type = OM.message_source_type
    WHERE
        OM.operation_id = 
        (  
            SELECT 
                MAX(OM.operation_id)
            FROM
                SSISDB.catalog.operation_messages AS OM
            WHERE
                OM.message_type = 120
        )
        AND OM.message_type IN (120, 130);
    '
    ,   @execute_query_database sysname = NULL
    ,   @attach_query_result_as_file bit = 0
    ,   @query_attachment_filename nvarchar(260) = NULL
    ,   @query_result_header bit = 1
    ,   @query_result_width int = 256
    ,   @query_result_separator char(1) = char(13)
    ,   @exclude_query_output bit  = 0
    ,   @append_query_error bit = 0
    ,   @query_no_truncate bit = 0
    ,   @query_result_no_padding bit = 0
    ,   @mailitem_id int = NULL
    ,   @from_address varchar(max) = NULL
    ,   @reply_to varchar(max) = NULL;
    
    -- Send email about the failure    
    EXECUTE msdb.dbo.sp_send_dbmail
        @profile_name 
    ,   @recipients
    ,   @copy_recipients
    ,   @blind_copy_recipients
    ,   @subject
    ,   @body
    ,   @body_format
    ,   @importance
    ,   @sensitivity
    ,   @file_attachments
    ,   @query
    ,   @execute_query_database
    ,   @attach_query_result_as_file
    ,   @query_attachment_filename
    ,   @query_result_header
    ,   @query_result_width
    ,   @query_result_separator
    ,   @exclude_query_output
    ,   @append_query_error
    ,   @query_no_truncate
    ,   @query_result_no_padding
    ,   @mailitem_id OUTPUT
    ,   @from_address
    ,   @reply_to;
    

    Ajuste como quiser

    • 28
  2. Peter Elzinga
    2015-10-22T04:21:14+08:002015-10-22T04:21:14+08:00

    Você pode usar:

    SELECT      OPR.object_name
                , MSG.message_time
                , MSG.message
    FROM        catalog.operation_messages  AS MSG
    INNER JOIN  catalog.operations          AS OPR
        ON      OPR.operation_id            = MSG.operation_id
    WHERE       MSG.message_type            = 120
    

    Isso fornecerá apenas as mensagens de erro das execuções do pacote SSIS.

    • 12
  3. Mangal Pardeshi
    2015-11-30T20:26:27+08:002015-11-30T20:26:27+08:00

    Aqui está uma consulta que criei para encontrar a mensagem de erro do trabalho do SSISDB:

    DECLARE @DATE DATE = GETDATE() - 7 -- This is to restrict the data for last 7 days, used in ON condition 
    
    SELECT O.Operation_Id -- Not much of use 
    ,E.Folder_Name AS Project_Name 
    ,E.Project_name AS SSIS_Project_Name 
    ,EM.Package_Name 
    ,CONVERT(DATETIME, O.start_time) AS Start_Time 
    ,CONVERT(DATETIME, O.end_time) AS End_Time 
    ,OM.message as [Error_Message] 
    ,EM.Event_Name 
    ,EM.Message_Source_Name AS Component_Name 
    ,EM.Subcomponent_Name AS Sub_Component_Name 
    ,E.Environment_Name 
    ,CASE E.Use32BitRunTime 
    WHEN 1 
    THEN 'Yes' 
    ELSE 'NO' 
    END Use32BitRunTime 
    ,EM.Package_Path 
    ,E.Executed_as_name AS Executed_By 
    
    FROM [SSISDB].[internal].[operations] AS O 
    INNER JOIN [SSISDB].[internal].[event_messages] AS EM 
    ON o.start_time >= @date -- Restrict data by date 
    AND EM.operation_id = O.operation_id 
    
    -- Edit: I change the alias from OMs to OM here:
    INNER JOIN [SSISDB].[internal].[operation_messages] AS OM
    ON EM.operation_id = OM.operation_id 
    
    INNER JOIN [SSISDB].[internal].[executions] AS E 
    ON OM.Operation_id = E.EXECUTION_ID 
    
    WHERE OM.Message_Type = 120 -- 120 means Error 
    AND EM.event_name = 'OnError' 
    -- This is something i'm not sure right now but SSIS.Pipeline just adding duplicates so I'm removing it. 
    AND ISNULL(EM.subcomponent_name, '') <> 'SSIS.Pipeline' 
    ORDER BY EM.operation_id DESC 
    

    Para a explicação detalhada, por favor: como consultar o SSISDB para descobrir os erros nos pacotes?

    • 7
  4. IT Thug Ninja
    2015-10-22T04:21:30+08:002015-10-22T04:21:30+08:00

    Se você realmente deseja saber por que está falhando, aqui estão algumas coisas para verificar com o pacote e como solucionar problemas para garantir que não seja um problema de conexão ou autenticação.

    Observe o script taskque aparece logo antes do FTP taske altere as propriedades da conexão FTP. Isso deve incluir o FTP server URL (or IP address), o TCP port numberservidor FTP escuta, o username, e password.

    Certifique-se de que todos os atributos de FTP nestas propriedades de string de conexão estejam configurados corretamente e teste a partir da linha de comando ou de uma ferramenta de cliente FTP para garantir que tudo o que você tenha valor ali também permita a conexão por meio desse método para garantir que não seja uma senha ou um problema de valor incorreto do que você está se conectando.

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve