Dziś będzie kilka słów o tym czym jest debugowanie SQL Server integration services. Kilka miesięcy temu napisałem o problemach, gdy korzystamy z 32 bit sterownika w 64 bit SQL Server. Teraz spotkałem się z kolejnym problemem związanym z tym rozwiązaniem. Podnieśliśmy wersję bazy danych z istniejącej SQL Server 2008 R2 do SQL Server 2012. Niestety w efekcie tego mój pakiet, którego używałem do pobierania danych z bazy Oracle przestał działać. A znalezienie rozwiązania wcale nie było tak oczywiste jak by się mogło wydawać. Gdy sprawdziłem “View history” w SQL Sever był tylko błąd i prosty wpis:

“To view the details for the execution right-click on the Integration Services Catalog and open the [All Executions] report”

No więc jak można wykonać Debugowanie SQL Server integration services?

Teraz po aktualizacji SQL Servera moje pakiety SSIS nie są przechowywane w bazie MSDB. Zamiast tego można je znaleźć w bazie “SSISDB” – i to było coś nowego dla mnie 🙂 . No dobrze idźmy dalej. Nazwy tabel same się opisują :

Zacznijmy od znalezienie wartości w polu “Execution_id”. Wszystkie informacje bazują na tym ID. Aby to zrobić musimy pobrać dane z tabeli [SSISDB].[internal].[executions] . Teraz mając tą wartość możemy pobrać pozostałe informacje. Wszystkie kroki, które miały miejsce znajdziemy w tabeli [SSISDB].[internal].[operation_messages] . Ważna uwaga. Kolumna przechowująca nasze “Execution_id” w tej tabeli nazywa się teraz: “operation_id”. W moim przypadku zapytanie wyglądało jak poniżej:

SELECT TOP 1000 [operation_message_id]
,[operation_id]
,[message_time]
,[message_type]
,[message_source_type]
,[message]
,[extended_info_id]
FROM [SSISDB].[internal].[operation_messages]
where operation_id = '160256'

bo mój “execution_id” wynosił '160256′. Teraz gdy posortujemy wiersze po “operation_message_id” zobaczymy wszystkie kroki które zostały wykonane przez nasz projekt SSIS. A wtedy mogliśmy zobaczyć oczywisty błąd:

Error: The requested OLE DB provider OraOLEDB.Oracle.1 is not registered.
If the 64-bit driver is not installed, run the package in 32-bit mode. Error code: 0x00000000.
An OLE DB record is available. Source: „Microsoft OLE DB Service Components” Hresult: 0x80040154 Description: „Class not registred.”.

No dobrze mamy nasz błąd, ale jak go usunąć?

No cóż rozwiązanie jest bardzo proste. Wystarczy tylko przejść do listy zadań SQL Server agent i znaleźć naszą paczkę SSIS, a następnie ją edytować. W parametrach konfiguracyjnych należy przejść do zakładki Advanced i zaznaczyć checkbox “31-bit runtime”. I to wszystko, paczka po zapisaniu uruchomi się bez problemu.

Jak widzicie w tym stosunkowo krótkim wpisie Debugowanie SQL Server integration services to nie są jakiś magiczne rzeczy i tak na prawdę każdy z nas może sobie poradzić