Ein seit langem lästiges Problem sind die Verbindungsabbrüche wenn man den Serverberinigungsassistenten beim WSUS ausführt. Meist geschieht dies beim entfernen alter Updates.Für die Abbrüche kann es mehrere Ursachen, wie z.B. den Verbindungs-Timeout zur Datenbank oder langsame Hardware. Ersteres kann man relativ leicht ändern. Auf einem Windows Server 2016 mit WSUS 4.0 und WID (Windows Internal Database) hatte ich allerdings mit der grafischen Oberfläche des Management Studio (getestet mit Version 2012 und 2017) kein Glück, die Verbindungeinstellungen ändern zu können. Es erschien immer folgende Fehlermeldung beim Versuch auf die Eigenschaften zuzugreifen:

Oder als Text (damit die Suchmaschinen auch etwas davon haben):

TITEL: Microsoft SQL Server Management Studio
------------------------------

Das angeforderte Dialogfeld kann nicht angezeigt werden.

------------------------------
ZUSÄTZLICHE INFORMATIONEN:

Das angeforderte Dialogfeld kann nicht angezeigt werden. (SqlMgmt)

------------------------------

Fehler beim Abrufen von Daten für diese Anforderung. (Microsoft.SqlServer.Management.Sdk.Sfc)

Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&LinkId=20476

------------------------------

Ausnahme beim Ausführen einer Transact-SQL-Anweisung oder eines Transact-SQL-Batches. (Microsoft.SqlServer.ConnectionInfo)

------------------------------

Für den aktuellen Befehl ist ein schwerwiegender Fehler aufgetreten. Löschen Sie eventuelle Ergebnisse.
RegQueryValueEx() returned error 2, 'Das System kann die angegebene Datei nicht finden.' (Microsoft SQL Server, Fehler: 0)

Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=0&LinkId=20476

------------------------------
SCHALTFLÄCHEN:

OK
------------------------------

Die Links zu Microsoft führen allerdings ins “nirgendwo”, außer zu Surface-Werbung.

Den Timeout kann man alternativ über folgenden Weg ändern:

Eine Eingabeaufforderung öffnen:

osql -E -S \\.\pipe\Microsoft##WID\tsql\query

exec sp_configure 'show advanced option', '1';
reconfigure;
exec sp_configure; <- Zeigt die Eintellungen an, sobald das nachfolgende go abgesetzt wird. Am besten diese zur Sicherheit Kopieren.
go
exec sp_configure 'remote query timeout (s)', 0;
reconfigure with override;
go
quit

Den Dienst “Interne Windows-Datenbank” (Dienstname: “MSSQL$MICROSOFT##WID”) neu starten, um die Änderung zu übernehmen. Statt “osql” funktioniert auch “sqlcmd”.

Mit etwas Glück läuft der Assistent nun durch. Leider war mir das Glück nicht hold, nach etwas über 1.5 Stunde kam es erneut zum Abbruch. Wiederholte Ausführungsversuche halfen auch nicht wirklich weiter, dem Hörensagen nach, soll aber immer ein Fortschritt stattfinden.

Plan B

Es gibt einige Skripte zum Automatisieren der WSUS-Bereinigung. Ein recht umfangreiches Exemplar kommt dabei von Adam Marshall:

Adam Consulting – WSUS Automatic Maintenance

spiceworks – WSUS Automated Maintenance (Formerly Adamj Clean-WSUS)

Das Skript ist gut dokumentiert, es können bzw. müssen nur wenige Variablen den eigenen Bedürfnissen angepasst werden und automatisierbar samt E-Mail-Benachrichtigung ist es obendrein auch noch. Aber das ist nicht alles: So lässt sich z.B. auch das Speicherlimit des Anwendungspools ändern, dieses Thema hatten wir ja neulich erst:

Windows Server 2016: WSUS-„Schluckauf“ nach März 2018-Updates

Im Vergleich zum Assistenten war es in diesem Fall-Beispiel nicht nur erfolgreich, sondern auch rasend schnell. Nach 1.5 Minuten waren 5980 Updates entfernt und damit ca. 78 GB zusätzlich an Speicherplatz frei. Und das war nur der “First-Run”. Weitere Durchläufe kann man mit gewünschten Parametern durchführen.

Update 11.05.2018

Wer die Bereinigung ohne Fremdskripte mittels Powershell durchführen möchte, sollte sich diesen Beitrag von Wolfgang Sommergut ansehen:

WindowsPro – WSUS-Server bereinigen mittels GUI-Assistenten oder PowerShell

Update 24.07.2019

WAM (WSUS Automatic Maintenance, Adamj bzw. AJ Tek) ist mittlerweile kostenpflichtig. Weitere Alternativen und Möglichkeiten gibt es wie diese hier zeigen:

Automated WSUS Maintenance Utility von Mike Galvin

Eine aktuelle Quelle für dieses Skript ist:

https://github.com/DeploymentBunny/Files/blob/master/Tools/Invoke-WSUSMaint/WsusDBMaintenance.sql

WSUS automated cleanup script von Gleb F.NG

Re-Index der Datenbank durchführen:

Re-index the WSUS Database von The Scripting Guys

Auf einem Windows Server 2012 hat folgender Befehl funktioniert:

sqlcmd -S np:\\.\pipe\MICROSOFT##WID\tsql\query -i C:\temp\WsusDBMaintenance.sql

Weiteres zum Thema WSUS-Datenbank aufräumen und optimieren:

ugg.li – WSUS 4 Performance optimieren durch Datenbank-Reindexierung, Löschen und manuelles bearbeiten

ugg.li – WSUS Assistent für die Serverbereinigung bricht mit Datenbankfehler ab „Serverknoten zurücksetzen“

Und nochmal via PowerShell:

chilltimes.de – Windows Server 2012 – WSUS Server Cleanup

Arbeitsspeichernutzung der WID konfigurieren:

Windows: Die Arbeitsspeichernutzung der Windows Internal Database (WID) konfigurieren

Die Skripte aus diesem Update haben dabei geholfen, auf einem seit langem nicht mehr gepflegten/gewartetem WSUS auf einem untermotorisiertem Windows Server 2012 wieder einen lauffähigen Dienst zu machen.

Update 30.07.2019

Kleine Ergänzung zu “WSUS 4 Performance optimieren durch Datenbank-Reindexierung, Löschen und manuelles bearbeiten” unter “Tipp 4 – Abgelaufene oder ersetzte Updates löschen”.

Mangels Management Studio wurde die SQL-Abfrage als Skript gespeichert, als erste Zeile noch

USE SUSDB

ergänzt und mittels folgendem Befehl ausgeführt:

sqlcmd -S np:\\.\pipe\MICROSOFT##WID\tsql\query -i C:\temp\Wsus01.sql

Der Durchlauf brauchte gut zwei Tage, also nicht nervös werden, wenn es “etwas” dauert, bis “Deleting …” angezeigt wird oder das Skript beendet wird. Danach war es (endlich) wieder möglich die PowerShell-Befehle

Invoke-WsusServerCleanup -CleanupObsoleteUpdates

und

Invoke-WsusServerCleanup -DeclineSupersededUpdates

erfolgreich durchlaufen zu lassen.

Update 09.06.2021

Damit man “sqlcmd” auf einem Windows Server 2021 R2 zur Verfügung hat, müssen folgende beiden Komponenten heruntergeladen und installiert werden:

Microsoft ODBC Driver 11 für SQL Server – Windows

Microsoft Befehlszeilenprogramme 11 für SQL Server

Und dann gib es noch einen neuen Beitrag von Wolfgang Sommergut zum WAM:

WSUS Automated Maintenance im Test: Updates ablehnen und entfernen, Datenbank und IIS optimieren

Wie man dort lesen kann, hat sich das einstige Powershell-Skript mittlerweile ganz schön weiterentwickelt inkl. GUI.