A versão 2012 do SQL Server Integration Services, SSIS, forneceu um catálogo SSISDB que rastreia as operações de pacotes (entre outras coisas). A execução do pacote padrão para soluções usando o modelo de implantação de projeto terá o registro no SSISDB ativado.
Quando um pacote é executado, o System::ExecutionInstanceGUID
é preenchido com um valor que, se alguém estivesse usando log explícito (para sys.sysdtslog90
/ sys.sysssislog
), registraria todos os eventos para uma execução de pacote específica.
O que eu gostaria de saber é como vincular um ExecutionInstanceGUID a qualquer coisa no catálogo SSISDB. Como alternativa, um pacote SSIS em execução no SSISDB é privado do valor de seucatalog.executions.execution_id
Por fim, estou tentando usar a tabela de auditoria personalizada existente e vinculá-la ao histórico detalhado no catálogo SSISDB, mas não consigo encontrar o link.
Criei um projeto SSIS usando o Modelo de Implantação 2012 que consiste em um único pacote. Nesse pacote, adicionei um OLE DB Connection Manager, apontei para tempdb e soltei uma tarefa de script na tela. Também ativei o log explícito usando o OLE DB Connection Manager e capturei o
OnInformation
evento.Informações de incêndio SCR
Eu configurei minha tarefa de script para obter dois parâmetros:
System::ExecutionInstanceGUID
eSystem::ServerExecutionID
devo admitir que, neste ponto, não havia notado a segunda variável até a resposta de Marian. Dentro da tarefa, crio 2 eventos de informação para que eu possa obter os valores registrados. Isso deve ser registrado na tabela explícita (dbo.sysssislog) e no log "livre" (catalog.operation_messages).Implantar e executar
Em seguida, implantei meu projeto em um servidor e o executei.
Abri o Relatório de Operações e cliquei nos
SCR Fire info
detalhes da tarefa.O item circulado em vermelho mostra que estamos visualizando os detalhes da Operação 8, como esperado. As linhas destacadas são os
OnInformation
eventos que criaram os valores dessas duas variáveis do sistema. Também como esperado, o valor deSystem::ServerExecutionID
correspondeu ao que estava no relatório. O valor deSystem::ExecutionInstanceGUID
não fazia sentido como sempre, mas estava presente {3F515780-8062-40AA-B9EC-C320CBAC5EFD}.Amarrando tudo junto
Agora eu tinha dois troncos diferentes que queria amarrar.
consulta sysssislog
A execução dessa consulta retirou as linhas relevantes da tabela de log da velha escola.
Os resultados pareciam
consulta catalog.operation_messages
A execução desta consulta no catálogo SSISDB mostrou todas as mensagens que estavam no relatório acima e também confirmou que eu poderia vincular o valor
message
aoperation_id
e também adbo.sysssislog.executionid
Esses resultados foram
Embrulhar
Quando o pacote é executado fora do contexto do catálogo SSISDB (também conhecido como SSDT-BI ou linha de comando para um .ispac), o valor do the
System::ServerExecutionID
será 0. Faz sentido, mas os leitores futuros usarão LEFT OUTER JOIN ao vincular sysssislog a catalog.operation_messages se desejar capturar todas as execuções do pacote.Dica de chapéu, meus sinceros agradecimentos e o crédito da resposta vão para Marian por me colocar no caminho certo. Dada a escolha entre armazenar um GUID (16 bytes) e um bigint (8 bytes) em minha tabela de log resumida, é óbvio para mim: aumentar monotonicamente o grande número inteiro, por favor.
Demais para um comentário, mas tentando alguma coisa. Na página msdn dessa tabela de sistema catalog.executions , obtenho:
A partir deste artigo - SSIS 2012 - Exibir informações do gerenciador de conexões para execuções anteriores - entendo que:
Com uma consulta de amostra de:
O que não vejo é seu ExecutionInstanceGUID nesta tabela. O que vejo, porém, é este antigo item Connect onde há a seguinte história:
Portanto, minha conclusão é que ExecutionInstanceGUID não está relacionado a operation_id, mas a alguma coluna InstanceId, caso você tenha uma no SSISDB.