I want to see SSIS error messages in the ADF monitor or in the ADF email notification so that I can have a quick look to determine the severity of the problem without logging in with SSMS to the catalog in Azure. Is that possible?
Need more details in case of an error |
Solution
It is possible but it requires to adjust the T-SQL statement that executes the package. Please follow all steps in this blog post, but replace the T-SQL code from step 4 with the code below.
The change is in the last part only. Previously it only showed that the execution failed, but now it also retrieves error messages from the catalog. Because the space is a bit limited we only show 7 errors. Errors with 'validation' in the text are less useful for the quick look we want. So those are filtered out as well. All messages are separated with a linefeed for a better overview.
-- Variables for execution and error message declare @err_msg as varchar(8000) declare @err_msg_part as varchar(1000) declare @execution_id as bigint -- Create execution and fill @execution_id variable EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'SSISJoost', @project_name=N'MyAzureProject', @use32bitruntime=False, @reference_id=2, @useanyworker=True, @runinscaleout=True -- Set logging level: 0=None, 1=Basic, 2=Performance, 3=Verbose EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=1 -- Set synchonized option 0=A-SYNCHRONIZED, 1=SYNCHRONIZED -- A-SYNCHRONIZED: don't wait for the result EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'SYNCHRONIZED', @parameter_value=1 -- Execute the package with parameters from above EXEC [SSISDB].[catalog].[start_execution] @execution_id, @retry_count=0 -- Check if the package executed successfully (only for SYNCHRONIZED execution) IF (SELECT [status] FROM [SSISDB].[catalog].[executions] WHERE execution_id=@execution_id) <> 7 BEGIN SET @err_msg = 'Your package execution did not succeed for execution ID: ' + CAST(@execution_id AS NVARCHAR(20)) + CHAR(13) + CHAR(10) DECLARE err_cursor CURSOR FOR SELECT top(7) CAST([message] as varchar(1000)) as message -- Max 7 errors FROM [catalog].[event_messages] WHERE [event_name] = 'OnError' -- Only show errors AND [operation_id] = @execution_id AND [message] not like '%validation%' -- Exclude less usefull validation messages like: -- Error: One or more component failed validation. -- Error: There were errors during task validation. -- Error: Error 0xC0012050 while executing package from project reference package "xxx". Package failed validation from the ExecutePackage task. The package cannot run. -- Error: xxx failed validation and returned error code 0xC020801C. -- Error: "xxx" failed validation and returned validation status "VS_ISBROKEN". OPEN err_cursor FETCH NEXT FROM err_cursor INTO @err_msg_part WHILE @@FETCH_STATUS = 0 BEGIN SET @err_msg = @err_msg + @err_msg_part + CHAR(13) + CHAR(10) FETCH NEXT FROM err_cursor INTO @err_msg_part END CLOSE err_cursor DEALLOCATE err_cursor RAISERROR(@err_msg,15,1) END
Now it shows more details in the ADF monitor and if you are also using the ADF email notifications then the same messages will appear in the email. Feel free to suggest improvements in the comments.
More error details |
Note that it is not a complete overview of all messages, but in most cases it should be enough for the seasoned developer to quickly identify the problem and take actions to solve it.
*update 13-04-2018: There is a new Execute SSIS Package activity, but without error options.*