SSIS-Fehler beim Bereitstellen von Projekten

Versionierung in den Systemtabellen der SSISDB

Hatten Sie das auch schon mal? Sie wollen ein Projekt in die SSISDB deployen und bekommen eine kryptische Fehlermeldung a’ la „Failed to deploy the project. Try again later. (Microsoft SQL Server, Error: 27118)” Mir ist das jetzt schon zum zweiten Mal in einem Jahr passiert und ich bin der Ursache auf den Grund gegangen.

Um die Lösung vorweg zu nehmen, das ist das SQL-Statement, das Abhilfe schafft:

DELETE FROM ssisdb.[internal].[object_versions] 
WHERE  object_status = 'D'

Aber nun zum Ursprung allen Übels
Die komplette Fehlermeldung ist folgende:

Failed to deploy the project. Try again later. (Microsoft SQL Server, Error: 27118)
Fehler beim Bereitstellen des Projekts. Wiederholen Sie den Vorgang später. (Microsoft SQL Server, Error: 27118)
____
Error Number:
Severity: 16
State: 1
Procedure: prepare_deploy
Line Number: 221

Der Fehler wird bei mir an zwei unterschiedlichen Stellen innerhalb der genannten Prozedur “prepare_deploy” aufgerufen. Einmal hier:

				
					IF EXISTS (SELECT [project_id]
           FROM   [internal].[projects] projs
                  INNER JOIN [internal].[object_versions] vers
                          ON projs.[project_id] = vers.[object_id]
           WHERE  vers.[object_status] = 'D'
                  AND [folder_id] = @folder_id
                  AND [name] = @project_name)
  BEGIN
      RAISERROR(27118,16,1) WITH nowait
      RETURN 1
  END 

				
			

Und einmal an dieser Stelle:

				
					IF EXISTS (SELECT [project_id]
           FROM   [internal].[projects] projs
                  INNER JOIN [internal].[object_versions] vers
                          ON projs.[project_id] = vers.[object_id]
           WHERE  vers.[object_status] = 'D'
                  AND [folder_id] = @folder_id
                  AND [name] = @project_name)
  BEGIN
      RAISERROR(27118,16,1) WITH nowait
      RETURN 1
  END 

				
			

Da der Fehler, nach meiner Recherche, ein nicht alltäglicher ist, bekommt man im Internet nicht viele Tipps und eine zielführende Fehlerbehebung gestaltet sich schwierig. Die einzig nützliche Information, die ich dazu gefunden habe: Lösche das entsprechende Projekt und lege es neu an. Nicht wirklich hilfreich, aber tatsächlich ist das ein Teil der Lösung.

In meinen zwei Fällen, wurde der Fehler aufgerufen, weil ich einen object_status D hatte:

				
					SELECT *
FROM   ssisdb.[internal].[object_versions]
WHERE  object_status = 'D' 

				
			

Ich habe versucht eine genaue Spaltendefinition zu lokalisieren, bin jedoch nicht fündig geworden. Das Einzige, was ich gefunden habe, ist die Referenz der View „catalog.object_versions“. Allerdings wird hier nicht die entsprechende Spalte verwendet bzw. erwähnt.

Alles, was ich also weiß, ist:

				
					[object_status] char (1) NOT NULL,
				
			

Herzlichen Glückwunsch!

Ich schaue mir also die genannte View an, um ihren Sinn und Zweck zu verstehen und stelle fest, dass hier die versionierten SSIS Pakete zu finden sind.

“Displays the versions of objects in the Integration Services catalog. In this release, only versions of projects are supported in this view.”

Innerhalb der Projekt-Versionen steht auch, welche Version die derzeit aktive ist:

In meinem Fall wirft die vermutlich fehlerhafte Version „Projekt-LSN 40.701“ die bekannte Fehlermeldung und ich entscheide mich, da die Version nicht aktiv ist, zu löschen:

				
					
DELETE FROM ssisdb.[internal].[object_versions]
WHERE  object_status = 'D' 

				
			

Et voilà, das Bereitstellen der Projekte geht in rasanter Geschwindigkeit und ohne lästige Fehlermeldung vonstatten.

Andere Anwender hatten dieses Problem und die Fehlermeldung auch und durch die Änderung von Rechten (Stichwort: „adding user AllSchemaOwner to role ssis_admin“) in den Griff bekommen, aber damit habe ich mich nicht weiter beschäftigt. Vielleicht ein Thema für einen weiteren Blog-Artikel… ich bleibe am Ball, falls solch mystische Fehler weiter hin und wieder auftauchen.