Ich hatte nun des öfteren das Problem, dass es auf einem Server 2016 einen WSUS Connection Error gab. Das sieht dann als Fehlermeldung folgendermaßen aus:
[pullquote align=”normal”]Error: Connection Error
An error occurred trying to connect the WSUS server. This error can happen for a number of reasons. Check connectivity with the server. Please contact your network administrator if the problem persists.
Click reset Server Node to try to connect to the server again. [/pullquote]
Dieses Problem hatten bestimmt schon mehrere, und es gibt im Netz unendlich viele Problemlösungen, Fixes, Updates und Möglichkeiten dieses Problem zu beheben. Ich habe euch eine Zusammenfassung der Lösungen zusammengeschrieben 🙂
WSUS Connection Error – Reset Server Node
Bevor wir loslegen, sollten wir mal die Updates aufräumen und die Regeln anwenden:
IIS App Pool anpassen
Bei vielen WSUS Servern hat es geholfen, die Speichernutzung des IIS Application Pool anzupassen. Dafür geht man wie folgt vor:
- Auf den WSUS Server verbinden
- “Internet Information Services Server” (IIS) öffnen
- WSUS Server aufklappen
- “Application Pools” wählen
- Rechtsklick auf “WsusPool“
- “Advanced Settings…”
- Hier ändern wir den Wert “Private Memory Limit” auf “0“
Durch diese Änderung wird die Speichernutzung des WSUS Application Pools nicht limitiert 🙂
Alternativ kann auch z.B. “4000000” für 4 GB verwendet werden – je nach dem 🙂
(Empfehlung)
WSUSUTIL
Um den WSUS Connection Error zu beheben, kann folgendes kleines (mitgeliefertes) Tool benutzt werden. Die wsusutil.exe.
- Auf den Server verbinden
- Eine CMD als Administrator starten
"C:\Program Files\Update Services\Tools\wsusutil.exe" postinstall /servicing
Danach muss noch ein Feature über den Server Manager installiert werden, falls es noch nicht aktiviert ist (bsp. Server 2016)
Zum Schluss einen Server Neustart / Reboot durchführen!
Windows Update / Fix installieren
Microsoft hat anscheinend auch eine Lösung für das Problem gefunden. Es handelt sich um das Update KB4039396. Dieses kann man auch offiziell im Microsoft Update Cataloge herunterladen:
[thrive_link color=’blue’ link=’https://www.catalog.update.microsoft.com/Search.aspx?q=KB4039396′ target=’_blank’ size=’medium’ align=”]Update herunterladen[/thrive_link]
Arbeitsspeicher / RAM
Auch wenn von Microsoft nur wenig Arbeitsspeicher angegeben ist, empfehle ich ein wenig mehr CPU und Arbeitsspeicher:
- 2 Cores (CPU)
- 6 GB Arbeitsspeicher
Klar läuft der Server mit weniger auch, allerdings macht es dann wirklich keinen Spaß darauf zu arbeiten 😉
WSUS Datenbank reparieren
Speichert euch folgendes Script als “cleanDB.sql” ab:
/****************************************************************************** This sample T-SQL script performs basic maintenance tasks on SUSDB 1. Identifies indexes that are fragmented and defragments them. For certain   tables, a fill-factor is set in order to improve insert performance.   Based on MSDN sample at http://msdn2.microsoft.com/en-us/library/ms188917.aspx   and tailored for SUSDB requirements 2. Updates potentially out-of-date table statistics. ******************************************************************************/ USE SUSDB; GO SET NOCOUNT ON; -- Rebuild or reorganize indexes based on their fragmentation levels DECLARE @work_to_do TABLE (    objectid int    , indexid int    , pagedensity float    , fragmentation float    , numrows int ) DECLARE @objectid int; DECLARE @indexid int; DECLARE @schemaname nvarchar(130); DECLARE @objectname nvarchar(130); DECLARE @indexname nvarchar(130); DECLARE @numrows int DECLARE @density float; DECLARE @fragmentation float; DECLARE @command nvarchar(4000); DECLARE @fillfactorset bit DECLARE @numpages int -- Select indexes that need to be defragmented based on the following -- * Page density is low -- * External fragmentation is high in relation to index size PRINT 'Estimating fragmentation: Begin. ' + convert(nvarchar, getdate(), 121) INSERT @work_to_do SELECT    f.object_id    , index_id    , avg_page_space_used_in_percent    , avg_fragmentation_in_percent    , record_count FROM    sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'SAMPLED') AS f WHERE    (f.avg_page_space_used_in_percent < 85.0 and f.avg_page_space_used_in_percent/100.0 * page_count < page_count - 1)    or (f.page_count > 50 and f.avg_fragmentation_in_percent > 15.0)    or (f.page_count > 10 and f.avg_fragmentation_in_percent > 80.0) PRINT 'Number of indexes to rebuild: ' + cast(@@ROWCOUNT as nvarchar(20)) PRINT 'Estimating fragmentation: End. ' + convert(nvarchar, getdate(), 121) SELECT @numpages = sum(ps.used_page_count) FROM    @work_to_do AS fi    INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id    INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id -- Declare the cursor for the list of indexes to be processed. DECLARE curIndexes CURSOR FOR SELECT * FROM @work_to_do -- Open the cursor. OPEN curIndexes -- Loop through the indexes WHILE (1=1) BEGIN    FETCH NEXT FROM curIndexes    INTO @objectid, @indexid, @density, @fragmentation, @numrows;    IF @@FETCH_STATUS < 0 BREAK;    SELECT        @objectname = QUOTENAME(o.name)        , @schemaname = QUOTENAME(s.name)    FROM        sys.objects AS o        INNER JOIN sys.schemas as s ON s.schema_id = o.schema_id    WHERE        o.object_id = @objectid;    SELECT        @indexname = QUOTENAME(name)        , @fillfactorset = CASE fill_factor WHEN 0 THEN 0 ELSE 1 END    FROM        sys.indexes    WHERE        object_id = @objectid AND index_id = @indexid;    IF ((@density BETWEEN 75.0 AND 85.0) AND @fillfactorset = 1) OR (@fragmentation < 30.0)        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';    ELSE IF @numrows >= 5000 AND @fillfactorset = 0        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD WITH (FILLFACTOR = 90)';    ELSE        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';    PRINT convert(nvarchar, getdate(), 121) + N' Executing: ' + @command;    EXEC (@command);    PRINT convert(nvarchar, getdate(), 121) + N' Done.'; END -- Close and deallocate the cursor. CLOSE curIndexes; DEALLOCATE curIndexes; IF EXISTS (SELECT * FROM @work_to_do) BEGIN    PRINT 'Estimated number of pages in fragmented indexes: ' + cast(@numpages as nvarchar(20))    SELECT @numpages = @numpages - sum(ps.used_page_count)    FROM        @work_to_do AS fi        INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id        INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id    PRINT 'Estimated number of pages freed: ' + cast(@numpages as nvarchar(20)) END GO --Update all statistics PRINT 'Updating all statistics.' + convert(nvarchar, getdate(), 121) EXEC sp_updatestats PRINT 'Done updating statistics.' + convert(nvarchar, getdate(), 121) GO
Nun Verbindet ihr euch auf den WSUS und Startet PowerShell mit Administrator Rechten.
Mit folgendem Befehl startet ihr das SQL Script auf der WSUS Datenbank:
sqlcmd -I -S \\.\pipe\MICROSOFT##WID\tsql\query -i C:\cleanDB.sql
Dan ganze kann bis zu einer Stunde dauern, also nicht erschrecken, wenn es lange dauert 😉