it-swarm.com.de

Kann ich einen Wartungsplan ohne Integration Services exportieren?

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, über das Exportziel eine Verbindung zu Integration Services herzustellen, wird folgende Fehlermeldung angezeigt:

Die Verbindung zum Integration Services-Dienst auf dem Computer "WEBSERVER" ist mit dem folgenden Fehler fehlgeschlagen: Der angegebene Dienst ist nicht als installierter Dienst vorhanden.

Wir haben Integration Services auf WEBSERVER deaktiviert, da wir dieses Feld nur zum Bereitstellen von Daten für Verbraucheranwendungen verwenden. Alle Daten auf WEBSERVER werden von einer Backend-Instanz repliziert. Integration Services wird häufig für die Verarbeitung von Daten auf der Backend-Instanz verwendet.

Gibt es eine dokumentierte Möglichkeit, einen Wartungsplan ohne Verwendung von Integration Services zu exportieren? Unterstützt Microsoft das?

Wartungspläne werden wie alle anderen SSIS-Pakete, die in SQL Server gespeichert sind, in msdb.dbo.sysssispackages gespeichert. Ich habe einen praktischen Beitrag über SSIS-Paketextrakt aus MSDB , der Ihre Beschwerden heilen sollte.

10
billinkc

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 gehumpelten Server auf den nicht gehumpelten kopiert. Die relevanten Zeilen sind:

SELECT name 
FROM msdb.dbo.sysssispackages 
WHERE packagetype = 6

Sie müssten dies SP) schreiben, damit alle Zeilen mit übereinstimmenden id zuerst gelöscht und dann die neuesten Versionen (oder ein ähnlicher Ansatz, z. B. UPDATE Matching) eingefügt werden ids, dann INSERT fehlt ids). Und Sie müssen auf der einen oder anderen Seite einen Verbindungsserver einrichten, damit Sie SQL schreiben können, das beide Server adressiert.

Das war's wirklich, Sie können dies dann regelmäßig aufrufen ... zum Beispiel aus einem Wartungsplan ... und alle Wartungspläne auf der nicht humpelnden Seite sichern.

Dies ist natürlich ein massiver 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 in msdb.dbo.sysssispackages Zwischen verschiedenen Serverinstanzen so kompatibel sind, wie es tatsächlich scheint.)

Natürlich können Sie die relevanten Zeilen jederzeit direkt aus der SSIS-Datenbanktabelle sichern. Das würde sowieso 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 im System ohne SSIS funktioniert. Der Vorteil der oben beschriebenen komplexeren, hackigeren Methode besteht darin, dass exportierte Pläne in einem Standardformat bereitgestellt werden, nicht nur als bloße Datenzeilen. Daher denke ich, dass dies später viel wahrscheinlicher in eine andere Version von SQL Server importiert werden kann.

3
MikeBeaton

Ich habe mit genau demselben Problem zu kämpfen. Hier ist das Haupt-Take-Away:

Für Ihren WEBSERVER sind keine Integrationsservices erforderlich. Eine dokumentierte Möglichkeit ist die Verwendung von DTUTIL. Verwenden Sie einfach JEDEN SQL Server (sogar 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 aus MySSISServerA, um ein SQL-Wartungspaket von MySourceServerB nach - zu kopieren. MyDestServerC.

DTUTIL /SQL "Maintenance Plans\Nightly Maintenance" /copy  sql;"Maintenance Plans\Nightly Maintenance" /sourceserver MySourceServerB /destserver MyDestServerC /Q
1
Sting

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:

  1. Stellen Sie in SSMS keine Verbindung zu "Database Engine ..." her, sondern stellen Sie für denselben Servernamen eine Verbindung zu "Integration Services ..." her.

  2. Navigieren Sie zu 'Gespeicherte Pakete/MSDB/Wartungspläne'.

  3. Es gibt alle Ihre Wartungspläne. Klicken Sie mit der rechten Maustaste darauf, um sie zu exportieren.

0
RicardoBalda