Sicherheitshinweis
Die hier bereitgestellten Skripte sind stets auf eigene Gefahr anzuwenden!
Daher immer erst mit einem nicht-kritischen System oder in einer Testumgebung ausführlich testen!
Einleitung
Die WSUS-Datenbank gibt den in der Vergangenheit in Anspruch genommenen Festplattenspeicher nicht automatisch frei, auch wenn Teile oder der gesamte Inhalt der WSUS-Datenbank entsprechend bearbeitet worden sind. Durch z.B. dem Entfernen einzelner Windows Update Dateien, aller Windows Updates eines Produktes oder einer bestimmten Klassifizierung.
Standardpfade für die WSUS-Datenbank:
%SystemRoot%\WID\Data
ODER
%ProgramFiles%\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA
Die WSUS Datenbankdateien werden durch die folgenden Prozesse genutzt:
Webserver-Dienst (w3svc) Windows Update AutoUpdate Dienst (wuauserv) Windows Internal Database (MSSQL$MICROSOFT##WID)
Diese 3 Prozesse sind zu stoppen, sollte zuvor eine Kopie der Daten erstellt werden müssen. Für die nächsten Schritte sind diese Prozesse im gestarteten Modus wieder zwingende Voraussetzungen.
Voraussetzungen
In diesem Beitrag erläutere ich, wie diese Tätigkeiten mittels der Kommandozeile entsprechend durchgeführt werden können. Jedoch sind hierzu gewisse Voraussetzungen zu treffen, damit auf die SUSDB aus der Kommandozeile erfolgreich zugegriffen werden kann. Daher sind die folgenden Installationen zwingende Voraussetzungen…
Möglichkeit 1:
- Microsoft SQL Server Management Studio (SSMS) (Download)
– Ersetzt Möglichkeit 2! –
Möglichkeit 2:
- Microsoft Visual C++ 201x Redistributable (Download)
- Microsoft ODBC Driver 17 for SQL Server (Download)
- Microsoft Befehlenszeilenprogramm 15 für SQL Server (Download)
– Ersetzt Möglichkeit 1! –
Vorbereitungen
Aus der Kommandozeilenebene heraus, wird eine *.sql- Datei aufgerufen und ausgeführt. Deswegen muss zuvor noch eine entsprechende *.sql- Datei erstellt werden. Die Bennenung der SQL-Datei ist grundsätzlich egal!
SQL-Skript:
USE SUSDB; GO DBCC SHRINKDATABASE(N'SUSDB'); GO
Für den späteren Aufruf in der Kommandozeile, die *.sql- Datei entsprechend lokal auf dem System abspeichern. Für die Automatisierung bietet sich auf der Kommandozeile ebenfalls eine entsprechende *.cmd- Datei an.
CMD-Skript-Beispiel:
REM ============================================================================ @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET CMDNAME=%~NX0 (%~Z0 Bytes) TITLE %CMDNAME% MODE CON:COLS=81 LINES=12 COLOR 1F REM - Run SQL Script to prepare the database environment REM [-S Server] REM [-E vertrauenswürdige Verbindung] REM [-i Eingabedatei] REM [-o Ausgabedatei] REM [-W nachfolgende Leerzeichen entfernen] ECHO Preparing Databases... Sqlcmd -S "np:\\.\pipe\MICROSOFT##WID\tsql\query" -E -i "C:\Scripts\WSUS\db_shrink.sql" -o "C:\Scripts\WSUS\_LOG\db_shrink.log" -W ENDLOCAL EXIT /B %ERRORLEVEL% REM ============================================================================
(Ist die WSUS-DB umbenannt bzw. besitzt einen anderen DB-Namen, muss der entsprechende Aufruf abgeändert werden: \.\pipe\MICROSOFT##WID\tsql\query)
Für den späteren Aufruf in der Aufgabenplanung, die *.cmd- Datei entsprechend lokal auf dem System abspeichern. Zusätzlich muss das LOG-Verzeichnis zuvor erstellt sein. Die Speicherpfade an die eigenen Bedürfnisse anpassen!
-E -i "C:\Scripts\WSUS\db_shrink.sql" -o "C:\Scripts\WSUS\_LOG\db_shrink.log" -W
WSUS-Datenbankgröße verkleinern
Sind die Vorbereitungen abgearbeitet, ist die Durchführung der ausstehenden Aktionen schnell getan.
Variante 1:
- Die *.cmd- Datei manuell mit administrativer Berechtigungen starten und ausführen.
Variante 2:
In der Aufgabenplanung eine neue Aufgabe erstellen und hierbei auf die folgenden Optionen achten…
- Allgemein (Reiter) –> Sicherheitsoptionen –>
Unnabhängig von der Benutzeranmeldung ausführen
- Allgemein (Reiter) –> Sicherheitsoptionen –>
Mit höchsten Privilegien ausführen
- Allgemein (Reiter) –> Konfigurieren für:
Windows Server 20xx
- Aktionen (Reiter) –> Neu –> Aktion: –>
Programm starten
- Aktionen (Reiter) –> Neu –> Einstellungen –> Programm/Skript –>
C:\Scripts\WSUS\db_shrink.cmd
Prüfung der WSUS-Datenbankgröße
Die Kontrolle, ob sich die Datenbankgröße verkleinert hat, ist aus der erstellten LOG-Datei zu entnehmen.
Beispiel:
C:\Scripts\WSUS\_LOG\db_shrink.log