PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Microsoft SQL Server 2005] SSIS über Stored Procedure rufen


()V()r.Freeze
2012-02-19, 21:51:15
Hallo zusammen,

ich versuche derzeit über die server-eigene sp_start_job ein SSIS-Paket (genauer gesagt eine .dtsx-Datei zum Datenimport eines Flat Files) zu rufen.
Der Job muss nicht in die Schedule (*yeah* :freak: ) weil er nur einige wenige Male im Jahr ausgeführt werden soll.
Meine Frage: Wie und wo muss ich die dtsx-Datei ablegen? Wenn ich sie auf dem Server ablege (Per "Kopie von xy Speichern unter", DB-Server) und mit msdb.sp_start_job einen Aufruf versuche zeigt er mir an dass das Paket nicht gefunden wurde. Weiß jemand Rat?

Matrix316
2012-02-19, 22:27:31
? Mit den Integration Services verbinden, rechte Maustaste -> Paket importieren -> Dateisystem und dann Paket wählen (wo es auch immer liegt) und mit der rechten Maustaste ausführen auswählen.

Warum eigentlich über eine Stored Procedure?

()V()r.Freeze
2012-02-19, 22:53:36
Der Aufruf muss über das Frontend eines ASP.net Projektes möglich sein, außerdem will ich die Option offen halten den Import irgendwann über eine andere SP zu rufen.
Oder gibt's nen eleganteren Weg?

xxxgamerxxx
2012-02-20, 11:21:22
Der Aufruf muss über das Frontend eines ASP.net Projektes möglich sein, außerdem will ich die Option offen halten den Import irgendwann über eine andere SP zu rufen.
Oder gibt's nen eleganteren Weg?

Du kannst einen Sql Job on the fly aus einer Sproc erstellen und ihn so konfigurieren, dass er nur für die Dauer der Ausführung existiert. Das würde ich machen und dann bei der Konfiguration in der Sproc das SSIS package definieren, das du zuvor importiert hast.

Matrix316
2012-02-20, 12:26:21
Man kann auch über DOS Befehl ein SSIS Paket starten:

"C:\Programme (x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exe" /SQ "Paketname_Im_IntegrationServices"

Oder einen SQL Auftrag, der dieses importierte Paket startet (ohne scheduler) und dann diesen Auftrag starten mit: (als sql Befehl in einer Funktion)

exec msdb.dbo.sp_start_job 'Name_Des_Auftrages'

EDIT: Kann es sein, dass ihr mit start_job das SSIS Paket starten wolltet?

Freeze @ Unterwegs
2012-02-20, 14:20:04
Korrekt, das Paket soll mit sp_start_job gerufen werden.
Der Aufruf schlägt aber fehl, das Objekt (der Job) kann nicht gefunden werden. Ich weiß nicht wo ich das Ding ablegen/speichern muss, damit die sp_start_job in findet.

Matrix316
2012-02-20, 15:12:00
Ich weiß nicht, ob du ein SSIS Paket mit start Job starten kannst, weil star_job wie der Name schon heißt für SQL Jobs gedacht ist (so weit ich weiß). Deswegen mein Hinweis einfach das SSIS Paket zu importieren, dann einen Job zu machen, der das SSIS Paket startet und DANN über start_job den SQL Auftrag ausführen. Du musst ja keinen Scheduler definieren für den Auftrag.

Oder hast du das schon gemacht und DAS funktioniert nicht? ;) Mit start_job das ssis Paket aufrufen dürfte eh nur gehen wenn es schon importiert ist, aber ich glaube nicht, dass es funktionieren wird.

()V()r.Freeze
2012-02-20, 20:19:33
Ein Job der das SSIS-Paket startet... Ja, daran könnte es liegen. Kannst du mir kurz erklären wie das geht?

Matrix316
2012-02-21, 09:52:07
Also wie schon gesagt, erst mit Integration Services Verbinden im SQL Management Studio.

Dann importieren des SSIS Paketes.

Dann einen Job erstellen und entweder als Schritt Typ "Betriebsystem (CmdExec)" auswählen und als Befehl dann dieses hier eingeben:

"C:\Programme (x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exe" /SQ "Paketname_Im_IntegrationServices"

Je nach dem wo deine DTExec sich befindet und wie dein Paket heißt.

Oder als Typ "Sql Server Integration Services Paket" und einfach das Paket auswählen.

Dann kannste mit start_job dingens den Job starten.

Man kann auch über DTExec das irgendwie in einer Stored Procedure bzw. als SQL Befehl machen, aber hab ich noch nie probiert.

xxxgamerxxx
2012-02-22, 21:05:25
Wie schon erwähnt, du kannst einen Job auch über T-SQL zur Laufzeit erstellen und konfigurieren. Schau dir mal die Sprocs sp_add_job und sp_add_jobstep an. Starten kannst du den Job dann mit sp_start_job.

Du kannst z.B. sp_add_job als delete_level den Wert 3 angeben. Damit wird der Job dann sofort gelöscht, nachdem er ausgeführt wurde. Bei sp_add_jobstep kannst du für den Parameter @subsystem den Wert 'Dts' angeben, um ein SSIS Paket auszuführen.

http://msdn.microsoft.com/de-de/library/ms182079.aspx
http://msdn.microsoft.com/en-us/library/ms187358.aspx

()V()r.Freeze
2012-02-24, 09:33:33
Danke an alle :smile:

Matrix316
2012-02-24, 13:50:22
Hats denn funktioniert? :)

()V()r.Freeze
2012-02-24, 15:46:59
Hätte ja, aber nur mit Rechten die im Normalbetrieb nicht zur Verfügung stehen. Bin daher jetzt den Weg über den Code des Webprojekts gegangen und importiere die Daten durch eine ausprogrammierte Routine