WSUS-Datenbank neu indizieren, geplante Aufgabe einrichten

    Kostenloses Backup für VMware und Hyper-V: Sicherung ohne Agent, Restore von VMs oder Dateien, dauerhaft gratis, kein VM-Limit. Jetzt herunterladen »

    (Anzeige)

    Index für WSUS-Datenbank neu erstellenZu den regel­mäßigen Wartungs­arbeiten an den Windows Server Update Services (WSUS) gehört die Neu­indexierung der Daten­bank. Setzt man die interne Windows-Datenbank (WID) ein, dann muss diese Tätigkeit lokal erfolgen. Am einfach­sten ist es daher, zu diesem Zweck eine geplante Auf­gabe mit PowerShell zu erstellen.

    Durch das häufige Hinzufügen und Löschen von Einträgen fragmentiert der Index der WSUS-Datenbank relativ rasch, was sich in einer schlechten Performance bemerkbar macht. Diese zeigt sich dann bei der Verwaltung der Updates im WSUS-Manager und meist noch stärker bei den PowerShell-Cmdlets für WSUS. Microsoft empfiehlt daher, die Datenbank einmal pro Monat neu zu indizieren.

    Für Server Core geeignetes Vorgehen

    Die folgende Anleitung geht von einer weit verbreiteten Konfiguration aus, bei der die WSUS unter Windows Server 2016 Core laufen und die WID als Datenbank nutzt. Aber das hier beschriebene Vorgehen funktioniert natürlich auch auf einem Server mit Desktop Experience.

    Die Besonderheit an dieser Konstellation besteht darin, dass sich das grafische SQL Server Management Studio dort nicht verwenden lässt. Seine Installation auf Server Core ist ausgeschlossen und eine Remote-Verwaltung der Internal Database nicht möglich.

    Tools installieren

    Die erforderlichen Kommandozeilen-Tools werden mit der WSUS-Rolle nicht installiert, ebenso wenig der benötigte ODBC-Treiber für SQL Server. Sie müssen in zueinander passenden Versionen von Microsofts Website heruntergeladen werden:

    Zuerst installiert man den ODBC-Treiber, weil sich das Setup der Kommandozeilen-Tools sonst verweigert. Beide kommen als MSI-Paket, sie lassen sich trotz eines grafischen Setup-Assistenten unter Server Core ausführen.

    Installation der SQL Server Command Line Utilities

    Damit wären nun die Voraus­setzungen für das Management der Datenbank gegeben. Für die Indexierung benötigt man aber zusätzlich ein T-SQL-Script, das Microsoft als WsusDB­Maintenance.sql in der TechNet-Gallery zum Download anbietet. Offiziell ist es für WSUS 3.0 vorgesehen, funktioniert aber auch einwandfrei unter Server 2016.

    Reindexierung starten

    Wenn man die Command Line Utilities im Standard­pfad installiert hat und das Script sich im aktuellen Verzeichnis befindet, dann kann man in der PowerShell nun folgendes Kommando absetzen, um die Indizes neu zu erstellen:

    . "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\sqlcmd" -I -S np:\\.\pipe\MICROSOFT##WID\tsql\query -i WsusDBMaintenance.sql

    Reindizierung der WID-Datenbank manuell anstoßen

    Geplante Aufgabe erstellen

    Nachdem es sich dabei um einen wieder­kehrenden Ablauf handelt, liegt es nahe, diesen Vorgang zeitgesteuert regelmäßig auszuführen. Der Aufruf eines Kommandozeilen-Tools ist wie geschaffen für eine geplante Aufgabe. Unter Server Core geht es am schnellsten, wenn man dafür zur PowerShell greift.

    Im ersten Schritt definiert man den Auslöser für die Aktion, das ist hier die Definition eines Zeitpunktes:

    $trig = New-ScheduledTaskTrigger -weekly -At 23:00 -DaysOfWeek @("Friday")

    In diesem Beispiel würde der Job jeden Freitag um 23:00 starten. Als nächsten legen wir das Kommando fest, das ausgeführt werden soll:

    $action = New-ScheduledTaskAction -Execute "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\sqlcmd.exe" -Argument '-I -S np:\\.\pipe\MICROSOFT##WID\tsql\query -i C:\sql\WsusDBMaintenance.sql'

    Dieser Aufruf geht davon aus, dass sich das T-SQL-Script unter c:\sql befindet. Wenn man nun zusätzliche Optionen konfigurieren möchte, dann kann man das mit New-ScheduledTaskSettingsSet tun, und zwar wie hier beschrieben.

    Jetzt bleibt noch die eigentliche Erzeugung der geplanten Aufgabe:

    Register-ScheduledTask -TaskName IndexSUSDB -TaskPath "\WSUS\" -Action $action -Trigger $trig

    Dieser Befehl speichert den Auftrag unter dem Namen IndexSUSDB im Pfad \WSUS\, beide kann man natürlich nach Belieben anpassen.

    Geplante Aufgabe für Reindexierung der WSUS-Datenbank mit PowerShell einrichten

    Wenn man nun noch die Scheduled Task testen und daher gleich starten möchte, dann hilft dabei dieser Befehl:

    Start-ScheduledTask -TaskPath "\WSUS\" -TaskName IndexSUSDB

    Geplante Aufgabe für Reindexierung der WSUS-Datenbank starten und Erfolg im Eventlog prüfen

    Nachdem sich gerade beim Auftreten von Fehlern das Fenster des Kommando­interpreters sehr schnell wieder schließt, empfiehlt es sich, den Erfolg der Ausführung im Eventlog zu prüfen:

    Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational -MaxEvents 10 | fl

    Dieser Aufruf zeigt die letzten 10 Log-Einträge, was reichen sollte, wenn man ihn unmittelbar nach Ausführung der Aufgabe eingibt.

    3 Kommentare

    Bild von Martin
    Martin sagt:
    13. Juni 2018 - 15:53

    Hallo,
    vielen Dank für den interessanten Hinweis. Funktioniert die Indizierung auch unter Win Server 2012 R2? Habe es versucht, bekomme aber bei der Ausführung der Reindexierung den Fehler "Sqlcmd: 'WsusDBMaintenance.sql': Ungültiger Dateiname."
    Dabei bin ich davon ausgegangen, dass das in der TechNet-Gallery angebotene Visual Basic-Skript als WsusDBMaintenance.sql gespeichert werden muss? Oder übersehe ich den Download der WsusDBMaintenance.sql?

    Viele Grüße
    Martin

    Bild von Andi
    Andi sagt:
    15. Juni 2018 - 9:51

    Kann es sein das du den Pfad nicht angegeben hast im Script sondern nur den Dateinamen?
    Du legst die Datei z.b. unter C:\SQL\WsusDBMaintenance.sql und musst das halt dementsprechend im Script anpassen

    Bild von Martin
    Martin sagt:
    15. Juni 2018 - 15:05

    Der Fehler ist beim Kopieren des T-SQL-Script entstanden. Ich habe an jedem Ende einer Zeile mind. eine Leerstelle gefunden und gelöscht. Zusätzlich habe ich überprüft, dass die 'großen Os' wirklich ein O sind und nicht eine 0 (Zahl Null).
    Um Probleme mit dem Pfad auszuschließen ist es aus meiner Sicht einfacher die Datei 'WsusDBMaintenance.sql' zuerst nach C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\ zu kopieren ...