Was ist die bevorzugte Methode, um Updates für Hunderte von Datenbanken bereitzustellen?

7

Ich versuche herauszufinden, wie SQL-Skripte am besten auf Hunderten von verteilten Servern bereitgestellt werden können. Ich habe ein langsames SSIS-Paket und einen sehr schnellen OSQL / BATCH-Prozess.

Ich bin an einem Projekt beteiligt, bei dem mehrere hundert Datenbankserver vor Ort bereitgestellt werden. Ich muss in der Lage sein, die Server routinemäßig abzufragen und / oder Datenbank-Upgrade-Skripte anzuwenden.

Als wir nur 20 Server hatten, habe ich ein SSIS-Paket erstellt, um eine Liste von Servern abzurufen und einzeln zu verarbeiten. Das SSIS-Paket funktioniert hervorragend, verfügt über unzählige Fehlerbehandlungs- und Protokollierungsfunktionen usw. Es kann Ergebnissätze von jedem Server erfassen und zur weiteren Analyse an einem zentralen Ort speichern. Aufgrund der Art und Weise, wie ich es erstellt habe, verarbeitet es jeden Server seriell. Die Verarbeitung von 20 Servern dauert ca. 10 Minuten. Ich bin an einem Punkt angelangt, an dem diese Methode einfach zu langsam ist.

Bevor ich mehr Zeit in das Umschreiben dieses Pakets investiere, um andere Pakete (eines für jeden Server) hervorzubringen, hatte ich gehofft, einige Ratschläge von anderen zu erhalten, die sich einer ähnlichen Situation gegenübersahen.

Würden Sie SSIS auf diese Weise verwenden oder zu Powershell oder sogar OSQL wechseln?

Fast als Scherz habe ich meine Archive durchsucht und einen Stapelprozess herausgezogen, den ich vor 12 Jahren geschrieben habe, um Skripte auf Remote-Servern anzuwenden. Ich habe ein paar Änderungen vorgenommen (auf OSQL geändert) und es läuft unglaublich schnell. Ich kann 100 Server in weniger als 20 Sekunden verarbeiten. Ich starte es von einem Windows 7-Computer aus, der nicht an so vielen Befehlsfenstern erstickt, die geöffnet werden.

Der Nachteil der OSQL / BATCH-Lösung besteht darin, dass die Batchdatei mit Servernamen und Kennwörtern fest codiert ist. Aber es ist so schnell, dass ich es weiter verwenden werde, bis ich eine bessere Lösung gefunden habe.

SSIS-Paket - Das aktuelle SSIS-Paket führt Folgendes aus: - Verbindung zu einem zentralen Server herstellen - Eine Liste der abzufragenden Server abrufen - mithilfe eines Forloop-Containers eine Verbindung zu jedem Server (in Reihe) herstellen und die Abfrage ausführen - falls die Abfrage Gibt eine Ergebnismenge zurück. Diese Informationen werden erfasst und auf dem zentralen Server gespeichert. Der zentrale Server wird aktualisiert, um den Erfolg / Misserfolg jedes Servers widerzuspiegeln. Alle Fehler werden auf dem zentralen Server protokolliert

Datagod
quelle
Was genau passiert als Teil dieses Prozesses? Was macht das SSIS-Paket?
Thomas Stringer
@shark, ich werde mehr zur ursprünglichen Frage hinzufügen, um das SSIS-Paket zu erklären
datagod

Antworten:

10

Ich würde Ihre schnelle Lösung an etwas anpassen, das einfacher zu erweitern ist, wie PowerShell .

Es wäre trivial, wenn PS eine Textdatei für eine Liste von Servern lesen würde, auf denen ausgeführt werden soll, und eine andere Datei oder Dateien für die auszuführenden Befehle.

Sie können auch Fehlerbehandlung und ähnliches in Ihren SSIS-Stapel einfügen und ihn asynchron auslösen lassen, damit er auf allen Servern gleichzeitig funktioniert.

JNK
quelle
2
CozyRoc hat eine Parallel Loop- Erweiterung zu SSIS. Viele haben Microsoft gebeten, es zu SSIS hinzuzufügen, aber sie lehnten ab .
Nick Chammas
+1 Ah, PowerShell. Die wunderbare Antwort auf viele Fragen :)
Thomas Stringer
2

PowerShell ist DIE Antwort, aber wenn Sie bereits ein Skript haben, das blitzschnell ist, können Sie die Central Management Server- Funktionalität in Betracht ziehen . Es macht nicht viele Dinge, die ich in letzter Zeit versucht habe, aber es macht eine Sache super gut, die viele Server schnell mit Skripten trifft, wenn Sie bereits in SSMS sind.

Eric Higgins
quelle
Ich kann die Central Management Server-Funktionalität nicht verwenden, da unsere spezielle Umgebung keine Windows-Authentifizierung hat. Wir verwenden die SQL Server-Authentifizierung, die von CMS für verteilte Abfragen nicht unterstützt wird.
Datum
Wenn Sie bereits alle Ihre Server als registrierte Server haben, können Sie die Abfrage dagegen ausführen (funktioniert sowohl für die SQL- als auch für die Windows-Authentifizierung) - aber PowerShell ist dennoch die beste Lösung.
DaniSQL