Ich versuche, einen einfachen Wartungsplan aus einer SQL Server-Instanz zu exportieren.
Ich möchte den Export in die Quellcodeverwaltung überprüfen und den exportierten Wartungsplan auf funktionsidentische Instanzen anwenden.
StackOverflow und SQL Server Newbie empfehlen die Verwendung von Integration Services zum Exportieren des Wartungsplans.
Wenn ich versuche, auf dem Exportziel eine Verbindung zu Integration Services herzustellen, wird die folgende Fehlermeldung angezeigt:
Die Verbindung zum Integration Services-Dienst auf dem Computer "WEBSERVER" ist mit folgendem Fehler fehlgeschlagen: Der angegebene Dienst ist nicht als installierter Dienst vorhanden.
Wir haben Integration Services in WEBSERVER deaktiviert, da wir dieses Feld nur zum Bereitstellen von Daten für Consumer-Anwendungen verwenden. Alle Daten auf WEBSERVER werden von einer Backend-Instanz repliziert. Integration Services wird häufig für die Verarbeitung von Daten in der Backend-Instanz verwendet.
Gibt es eine dokumentierte Möglichkeit, einen Wartungsplan ohne Verwendung von Integration Services zu exportieren? Unterstützt Microsoft das?
quelle
dtutil
- worauf aufbauend - dies ansonsten grundsätzlich deaktiviert ist, obwohl es vorhanden ist. In einigen Versionen von SQL Server (z. B. Web Edition) kann SSIS nicht vollständig installiert werden, obwohl Wartungspläne im Wesentlichen die gesamte Funktionalität von SSIS verwenden. (Allerdings gibt es einen Hack, um dies zu umgehen, vorausgesetzt, Sie haben zwei Versionen von SQL Server, von denen eine nicht manipuliert ist - siehe meine Antwort unten.)Es gibt einen Weg, dies zu tun.
Angenommen, Sie haben wie das OP zwei SQL Server-Instanzen, von denen eine SSIS installiert hat und eine nicht (wahrscheinlich nicht, z. B. wenn es sich um SQL Server Web Edition handelt).
Schreiben Sie eine gespeicherte Prozedur, die die Zeilen des Benutzerwartungsplans vom ausgelagerten Server auf den nicht ausgelagerten Server kopiert. Die relevanten Zeilen sind:
Sie müssen diesen SP so schreiben, dass alle Zeilen mit übereinstimmenden
id
zuerst gelöscht werden. Anschließend werden die neuesten Versionen (oder ein ähnlicher Ansatz, z. B.UPDATE
übereinstimmendeid
s, dannINSERT
fehlendeid
s) eingefügt. Außerdem müssen Sie auf der einen oder anderen Seite einen Verbindungsserver einrichten, damit Sie SQL schreiben können, das beide Server anspricht.Das ist es wirklich, Sie können dies dann regelmäßig aufrufen ... zum Beispiel aus einem Wartungsplan heraus ... und alle Wartungspläne auf der nicht-manipulierten Seite sichern.
Dies ist natürlich ein gewaltiger Hack, aber er funktioniert tatsächlich. (Ich würde mir vorstellen, dass es ziemlich wichtig ist, dass die Versionsnummer von SQL Server auf beiden Seiten gleich ist, damit die Daten
msdb.dbo.sysssispackages
zwischen den verschiedenen Serverinstanzen so kompatibel sind, wie es tatsächlich scheint.)Natürlich können Sie die relevanten Zeilen immer nur direkt aus der SSIS-Datenbanktabelle sichern. Das würde auf jeden Fall funktionieren - als vollständige Antwort auf die ursprüngliche Frage. Wie bereits erwähnt, hat dies nichts mit der Voraussetzung von SSIS zu tun - es setzt lediglich Wartungspläne voraus!
Das ist also eine unterstützte, leichte Methode, die überall auf dem System ohne SSIS funktioniert. Der Vorteil der oben beschriebenen komplexeren, hackigeren Methode besteht darin, dass exportierte Pläne in einem Standardformat und nicht nur als leere Datenzeilen ausgegeben werden. Daher denke ich, dass dies wahrscheinlich später in eine andere Version von SQL Server importiert werden kann.
quelle
Schauen Sie sich an:
Wie werden Wartungspläne von einem Server auf einen anderen übertragen (kopiert)? von Sreekanth Bandarla
Um es zu paraphrasieren und zusammenzufassen:
Stellen Sie in SSMS für denselben Servernamen eine Verbindung zu "Integration Services ..." her, anstatt eine Verbindung zu "Database Engine ..." herzustellen.
Navigieren Sie zu "Gespeicherte Pakete / MSDB / Wartungspläne".
Es gibt alle Ihre Wartungspläne. Klicken Sie mit der rechten Maustaste darauf, um sie zu exportieren.
quelle
Ich habe mit genau dem gleichen Problem zu kämpfen. Hier ist der Haupt-Take-Away:
Auf Ihrem WEBSERVER werden keine Integrationsdienste benötigt. Eine dokumentierte Möglichkeit ist die Verwendung von DTUTIL. Verwenden Sie einfach JEDEN SQL Server (auch die kostenlose Developer Edition mit allen Enterprise-Funktionen), auf dem Integration Services installiert ist, um SQL Server-Wartungspakete von einer Quelle auf ein Ziel zu kopieren - auch wenn es nicht die Quelle oder das Ziel des Pakets ist, wie in gezeigt Beispiel A.
Beispiel A: Führen Sie DTUTIL auf SQL Server MySSISServerA aus, um ein SQL-Wartungspaket von MySourceServerB nach MyDestServerC zu kopieren .
quelle
ANY
gleiche Version =, andernfalls wird dtutil den Plan vCurrent Upgrade