2010-09-07 11 views
5

Mam wiele pakietów integracyjnych SSIS logujących się do bazy danych. Wszyscy piszą do tabeli sysssislog.SSIS - Jak rozpoznać, do którego pakietu odnosi się wiersz w tabeli dziennika?

Chcę, aby procedura składowana była w stanie zwrócić sukces ostatniego uruchomienia wybranego pakietu.

Jak zidentyfikować pakiet w sysssislog? Pole executionid wydaje się działać, ale wygląda na to, że zmienia wartości na większości uruchomień tego samego pakietu (czasami pozostaje taki sam). Czy jest jakiś sposób, aby dowiedzieć się, z którego pakietu pochodzi wpis dziennika?

Struktura sysssislog dla odniesienia:

CREATE TABLE [dbo].[sysssislog](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [event] [sysname] NOT NULL, 
    [computer] [nvarchar](128) NOT NULL, 
    [operator] [nvarchar](128) NOT NULL, 
    [source] [nvarchar](1024) NOT NULL, 
    [sourceid] [uniqueidentifier] NOT NULL, 
    [executionid] [uniqueidentifier] NOT NULL, 
    [starttime] [datetime] NOT NULL, 
    [endtime] [datetime] NOT NULL, 
    [datacode] [int] NOT NULL, 
    [databytes] [image] NULL, 
    [message] [nvarchar](2048) NOT NULL, 
+0

Wygląda na to, że nie włączono zdarzeń PackageStart i PackageEnd. –

Odpowiedz

1

Spójrz, czy to pomaga, z Books On Line

źródło nvarchar

Nazwą pliku wykonywalnego, w opakowaniu, które wygenerował wpis do logowania.

sourceid uniqueidentifier

GUID wykonywalnego w pakiecie, który wygenerował wpis rejestrowania.

+0

source ma nazwę zadań uruchamianych wewnątrz paczki, więc nie wygląda na to, że będzie działać dla mnie. Różne pakiety mogą zawierać zadania o tej samej nazwie lub nazwy zadań w pakietach mogą być zmieniane. – Greg

2

Oto ładny widok kandydat spojrzeć na historię wykonanie wszystkich paczek w SSIS, można również zobaczyć, jak długo pakiet został uruchomiony w minutach:

select 
source [PackageName], s.executionid 
, min(s.starttime) StartTime 
, max(s.endtime) EndTime 
, (cast(max(s.endtime) as float) - cast(min(s.starttime) as float))*24*60 DurationInMinutes 
from dbo.sysssislog as s 
where event in ('PackageStart', 'PackageEnd') 
--and source = 'foobar' 
group by s.source, s.executionid 
order by max(s.endtime) desc 
+0

Dzięki, ale źródło wydaje się odnosić do rzeczy wewnątrz mojego pakietu, a nie samej nazwy pakietu. – Greg

+0

Również w przypadku błędów pakietu nie otrzymuję zdarzeń typu packagestart ani zdarzeń końcowych. – Greg

0

Źródło kolumna ID gdzie zdarzenie "Start pakietu" identyfikuje nazwę pakietu. Identyfikator wykonania powiązania we wszystkich powiązanych wierszach dla tego wystąpienia uruchomienia pakietu.

Źródło ID można powiązać z rozwojem pakietu, otwierając pakiet i patrząc na pole ID we właściwościach pakietu. Ten identyfikator GUID jest zgodny z kolumną identyfikatora źródła na poziomie pakietu w dzienniku. Każdy obiekt w twoim pakiecie będzie miał swój własny identyfikator GUID, który można zobaczyć w dzienniku.

+0

Nie widzę tego. Źródło zawiera zadania wewnątrz pakietu. Również nie ma uruchamiania pakietu, gdy błędy mojego pakietu. – Greg

+0

Jeśli logujesz się, pierwszy wpis, który zostanie wysłany do sp_ssis_addlogentry, zawsze ma wydarzenie "Rozpocznij przesyłkę" Spróbuj uruchomić pakiet w OFERTY i wyświetlić okno Dzienniki zdarzeń, aby sprawdzić, czy logowanie zostało włączone poprawnie. Aby wszystkie te funkcje działały, należy włączyć rejestrowanie. –

+0

Dostaję początek pakietu, ale nie, gdy uderzę w pewne błędy, takie jak plik nieistniejący. – Greg

1

Kolumna "sourceid" byłby taki sam jak Twój pakiet SSIS GUID dla zdarzeń

  • PackageStart
  • PackageEnd

Jak wspomniano powyżej - executionid jest GUID szczególny przypadek biegu.

Możesz włączyć obsługę zdarzenia "OnError", aby utworzyć pakiet, który nie zawiódł.

Aby wygenerować raport, co można zrobić:.

przyłączenia msdb [dbo] [sysdtspackages] i dbo.sysssislog stół na id = sourceid.. Pakiety, które się nie powiodą, będą miały wpis OnError w tabeli sysssislog, z którego można wywnioskować status.

- Proszę zaznaczyć, czy to odpowiedzi na swoje pytania

1

Podobnie jak w przypadku oryginalnego plakatu, chciałem zobaczyć nazwę mojego pakietu przed wszystkim moim nazw źródłowych, gdy przeżywa moim dzienniku SSIS. Czytając odpowiedź Williama, zdałem sobie sprawę, że ExecutionID może zostać wykorzystany do zrobienia właśnie tego, przynajmniej przy korzystaniu z dostawcy dziennika SSIS dla SQL Server.

Jeśli używasz SQL Server 2008 i tabelę rejestrowania SSIS wykorzystuje standardową nazwę "sysssislog", a następnie spróbuj to zapytanie:

SELECT s1.id, s1.operator, s1.event, s2.source package_name, s1.source, 
    CONVERT(varchar, s1.starttime, 120) AS starttime, s1.message, s1.datacode 
FROM dbo.sysssislog AS s1 LEFT OUTER JOIN 
     dbo.sysssislog AS s2 ON s1.executionid = s2.executionid 
WHERE s2.event = 'PackageStart' 
ORDER BY s1.id 

Uwagi:

  • Convert przycina rachunku poza ułamkowymi sekundami.
  • Ustaw nazwę tabeli, jeśli używasz SQL Server 2005.
  • użyłem zapytanie do utworzenia widoku nazwałem „SSIS_Log_View”

Mam nadzieję, że pomaga.

Powiązane problemy