Führen Sie ein SSIS-Paket fern und programmatisch aus

Problem

Ich habe ein SSIS-Paket für einen ETL-process entwickelt, den ich erfolgreich auf einem Remote-server implementiert habe. Ich habe Windows und SQL-Logins für diesen server, aber nicht admin. Die data, die dieser ETL-process lädt, werden auf einem anderen Rechner in einer anderen Domäne am frühen Morgen jeden Tag generiert (dh bevor ich an die Arbeit gehe) und muss nach dem dataerzeugungsprozess so schnell wie möglich geladen werden.

Derzeit habe ich das ETL-Paket manuell in SSMS ausgeführt und es authentifiziere dies durch das Spoofing der Windows-Benutzeranmeldeinformationen auf dem Remote-server durch das Starten von SSMS mit runas.exe . Dies ist derzeit in Ordnung, da wir in der frühen Entwicklung sind, aber das ist offensichtlich keine akzeptable Lösung in der Produktion. Daher möchte ich diesen process automatisieren, da a) die data extrem zeitempfindlich sind und b) manuelles Ausführen dieses processes ein PITA ist.

Wie soll ich die Ausführung des ETL-Pakets automatisieren, so dass:

  1. Die Ausführung erfolgt unmittelbar nach dem Erreichen der data und

  2. Es ist keine Benutzereingabe von mir erforderlich, zB um Passwörter einzugeben?

Versuchte Lösungen

Die Terminierung eines SQL server-Agent-Jobs auf einem timeplan ist keine Option, wegen der timeempfindlichkeit. (Auch mein Sysadmin scheint den SQL server Agent nicht aktiviert / deaktiviert zu haben)

Die Fortsetzung der Verwendung von runas.exe ist auch keine Option, da das /netonly Flag, welches erforderlich ist, und das /savecred Flag, das die Notwendigkeit einer manuellen Passworteingabe verhindern würde, sich gegenseitig ausschließt.

sqlcmd.exe kann sqlcmd.exe werden, um mit einem SQL-Benutzer und Passwort zu laufen (schlechte Praxis Putting Passwörter in Klartext, ich weiß), aber dann eine gespeicherte Prozedur, die das SSIS-Paket aufruft fehlschlägt, da Windows-authentication erforderlich ist, um das Paket auszuführen.

Ich würde Ihnen dringend empfehlen, nach SQL Agent zu fragen und einen Agent Job zu erstellen, um das Paket auszuführen. Auf diese Weise gibt es viele Vorteile:

  • Native Windows Benutzeranmeldeinformationen mit Proxy-Konten
  • Sie können spezifische Werte für Paket- / Projektparameter, Verbindungsmanager über SSMS-interface konfigurieren
  • Sie können Umgebungsreferenzen von SSIS 2012 und höher verwenden und diese auch über SSMS verwalten
  • Der Job kann termingerecht oder manuell aus dem SQL-Befehl gestartet werden. So können Sie den Paketstart automatisieren.

In einer Nußschale – es ist viel einfacher zu verwalten und Sie nicht offen legen Benutzer Anmeldeinformationen benötigt, um das Paket laufen – Sie können es sogar nicht wissen.

Für die Alternative – können Sie versuchen, PsExec aus SysInternals-Tools. Es erlaubt, Programm auf einem anderen Computer zu starten, der explizit den Benutzernamen und das Kennwort als psexec \\server -u user -p password ... spezifiziert. Allerdings würde ich mich dagegen entscheiden.