Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst WSUS auf Server 2016 - Datenbank bereinigen?

Mitglied: Pedant

Pedant (Level 2) - Jetzt verbinden

19.07.2017 um 15:59 Uhr, 3913 Aufrufe, 3 Kommentare

Hallo,

vor einiger Zeit hatte ich den WSUS neu installiert und dieses mal auf einen Server 2016.

Ich hatte zuvor einmal wöchentlich eine automatische Bereinigung laufen lassen.
So oder ähnlich: https://wsus.de/de/serverbereinigung1
(Die genaue Quelle für das Skript weiß ich nicht mehr.)

Seit der Neuinstallation habe ich das nicht gemacht.
Ich hatte die automatische Bereinigung (per PS-Skript) nicht wieder eingerichtet, da ich mir unsicher war, ob das auch für die aktuellen Versionen von WSUS/MSSQL/PS funktionieren oder mir alles kaputt machen würde.

Jetzt ist, nicht überraschenderweise, die Datenbank recht groß (vermutlich zu groß) geworden.
- Die letzten Synchronisationen schlugen fehl.
- Der Server-Cleanup-Wizard der WSUS-Management-Console schlägt nach einiger Zeit fehl.
(Beides vermutlich wegen der Datenbankgröße)

Meine Frage
Ist dieses Skript auch für mein aktuelles 2016er-System noch funktionabel oder sollte ich ein anderes verwenden und wenn welches?
https://wsus.de/de/serverbereinigung1
Mir geht es primär darum, die Datenbankgröße im Zaum zu halten und nicht so sehr darum ein paar GB Plattenplatz bei den Updates einzusparen.


Mein System

OS
Windows Server 2016 Standard 64-bit (en-US) 1607 [10.0.14393.1480]

PowerShell
PSVersion: 5.1.14393.1480
CLRVersion: 4.0.30319.42000
Quelle: PS C:\> $PSVersionTable

.Net-Framework
v2.0: 2.0.50727.4927 SP2
v3.0: 3.0.30729.4926 SP2
v3.5: 3.5.30729.4926 SP1
v4.0: Client 4.0.0.0
v4.x: Client 4.7.02053, Full 4.7.02053

WSUS
Version: 10.0.14393.0
Quelle: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup], VersionString=

SQL
Microsoft SQL Server 2016 Express Edition (64-bit)
(Versionseinschränkung: 10GB max. Datenbankgröße)
Version: 13.0.4422.0
Quelle: Microsoft SQL Server Management Studio

SUS-DB
SUSDB.mdf: 10.678.697.984 Bytes (~9,95 GB)
SUSDB_log.ldf: 612.368.384 Bytes (~0,57 GB)
Quelle: C:\MSSQL\Data\> dir s*.*

Vielen Dank im Voraus
Gruß Frank
Mitglied: BassFishFox
LÖSUNG 19.07.2017 um 21:03 Uhr
Hallo,

Wieviele Clients hast Du denn? Von der Anzahl der Clients und den dazu gehoerigen Verwaltungsinformationen ist die Groesse der DB abhaengig.

Ist dieses Skript auch für mein aktuelles 2016er-System noch funktionabel

Probiere es doch aus.

Den Trick mit dem "shrink" einer SUSDB per SQL Server Management Studio kennt Du?

BFF
Bitte warten ..
Mitglied: Pedant
20.07.2017 um 10:17 Uhr
Hallo BassFishFox,

zur Zeit sind es 38 Clients.

Zitat von BassFishFox:
Probiere es doch aus

Ich habe mir die WSUS-Serverbereinigung.ps1 mal genauer angesehen.
Sie scheint nichts anderes zu tun, als beim Cleanup-Manager ein paar Einstellungen vorzunehmen und ihn dann zu starten.
Den Teil könnte ich durchaus ausprobieren.

Gestartet wird das PS-Skript von einer WSUS-Serverbereinigung.cmd und die nutzt auch eine WsusDBMaintenance.sql und da bin ich mir unsicher, ob dieses SQL-Skript zur aktuellen Datenbankstruktur passt.

Nichts von dem was ich zum Thema WSUS-Bereinigen im Netz bisher fand erwähnt die Existenz von WSUS 10 oder MSSQL 2016.
Ich meine, wir haben 2017, irgend jemand außer mir, wird doch auch den Kram vom letzten Jahr schon nutzen und ich hatte gehofft, dass der mir sagt:
"Nimm dieses oder jenes Sktript oder behalt dein altes und alles ist gut."

Wenn ich tatsächlich der Erste und Einzige bin, werde ich nicht umhin kommen ein Datenbank-Backup zu erstellen, das Skript auszuprobieren und zu hoffen, dass es keine kleinen, fiesen Fehler produziert, die erst auffallen, wenn man das Skript als mögliche Ursache schon nicht mehr auf dem Schirm hat.

Zitat von BassFishFox:
Den Trick mit dem "shrink" einer SUSDB per SQL Server Management Studio kennt Du?
Per Management Studio nicht, aber vielleicht ist der Trick in der erwähnten SQL-Datei enthalten.

Ich zeig mal was ich bei der vorhergehenden Installation regelmäßig nutzte:

WSUS-Serverbereinigung.cmd
01.
@echo off 
02.

03.
set TOOLPATH=D:\WSUS-Tools\WSUS-CleanUp
04.
set WSUS-SERVER=MeinServer
05.
set PORT-NUMBER=8530
06.
set DATABASECONNECT=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query
07.
set SQLCMD="C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.EXE"
08.

09.
set LOG=%TOOLPATH%\WSUS-CleanUp.log
10.
set CLEANUPSCRIPT=%TOOLPATH%\WSUS-Serverbereinigung.ps1
11.
set SQLSCRIPT=%TOOLPATH%\WsusDBMaintenance.sql
12.

13.
echo.> "%LOG%"
14.
echo Start der Datenbankbereinigung: %DATE% um %TIME% Uhr>> "%LOG%"
15.
echo =============================================================>> "%LOG%"
16.
echo.>> "%LOG%"
17.
echo Cleanup Report für [%WSUS-SERVER%] (Port: %PORT-NUMBER%)>> "%LOG%"
18.
echo ------------------------------------------------------------->> "%LOG%"
19.
REM "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" Set-ExecutionPolicy Remotesigned
20.
"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" "%CLEANUPSCRIPT%" %WSUS-SERVER% %PORT-NUMBER%>> "%LOG%"
21.
echo ------------------------------------------------------------->> "%LOG%"
22.
echo Ende Dateibereinigung: %DATE% um %TIME% Uhr>> "%LOG%"
23.
echo.>> "%LOG%"
24.
echo SQL Server Wartung (Connect %DATABASECONNECT%)>> "%LOG%"
25.
echo ------------------------------------------------------------->> "%LOG%"
26.
%SQLCMD% -I -S %DATABASECONNECT% -i %SQLSCRIPT%>> "%LOG%"
27.
%SQLCMD% -I -S %DATABASECONNECT% -dSUSDB -Q "DBCC SHRINKDATABASE(N'SUSDB' )">> "%LOG%"
28.
%SQLCMD% -I -S %DATABASECONNECT% -dSUSDB -Q "DBCC SHRINKFILE (N'SUSDB' , 0, TRUNCATEONLY)">> "%LOG%"
29.
%SQLCMD% -I -S %DATABASECONNECT% -dSUSDB -Q "DBCC SHRINKFILE (N'SUSDB_log' , 0, TRUNCATEONLY)">> "%LOG%"
30.
echo ------------------------------------------------------------->> "%LOG%"
31.
echo Ende der Datenbankbereinigung: %DATE% um %TIME% Uhr>> "%LOG%"
32.
echo =============================================================>> "%LOG%"
33.
exit
WSUS-Serverbereinigung.ps1
01.
#Region VARIABLES   
02.

03.
# WSUS Connection Parameters: 
04.
[String]$updateServer = $args[0] 
05.
[Boolean]$useSecureConnection = $False 
06.
[Int32]$portNumber = $args[1]   
07.

08.
# Cleanup Parameters: 
09.
# Decline updates that have not been approved for 30 days or more, 
10.
# are not currently needed by any clients, and are superseded by an aproved update. 
11.

12.
[Boolean]$supersededUpdates = $True 
13.
# Decline updates that aren't approved and have been expired my Microsoft. 
14.
[Boolean]$expiredUpdates = $True 
15.
# Delete updates that are expired and have not been approved for 30 days or more. 
16.
[Boolean]$obsoleteUpdates = $True 
17.
# Delete older update revisions that have not been approved for 30 days or more. 
18.
[Boolean]$compressUpdates = $True 
19.
# Delete computers that have not contacted the server in 30 days or more. 
20.
[Boolean]$obsoleteComputers = $True 
21.
# Delete update files that aren't needed by updates or downstream servers. 
22.
[Boolean]$unneededContentFiles = $True   
23.

24.
#EndRegion VARIABLES  
25.

26.
#Region SCRIPT   
27.

28.
# Load .NET assembly 
29.
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")   
30.

31.
# Connect to WSUS Server 
32.
$Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($updateServer,$useSecureConnection,$portNumber)  
33.

34.
# Perform Cleanup 
35.
$CleanupManager = $Wsus.GetCleanupManager() 
36.
$CleanupScope = New-Object Microsoft.UpdateServices.Administration.CleanupScope($supersededUpdates,$expiredUpdates,$obsoleteUpdates,$compressUpdates,$obsoleteComputers,$unneededContentFiles) 
37.
$CleanupManager.PerformCleanup($CleanupScope)
38.
   
39.
#EndRegion SCRIPT
WsusDBMaintenance.sql
01.
/******************************************************************************
02.
This sample T-SQL script performs basic maintenance tasks on SUSDB
03.
1. Identifies indexes that are fragmented and defragments them. For certain
04.
   tables, a fill-factor is set in order to improve insert performance.
05.
   Based on MSDN sample at http://msdn2.microsoft.com/en-us/library/ms188917.aspx
06.
   and tailored for SUSDB requirements
07.
2. Updates potentially out-of-date table statistics.
08.
******************************************************************************/
09.

10.
USE SUSDB;
11.
GO
12.
SET NOCOUNT ON;
13.

14.
-- Rebuild or reorganize indexes based on their fragmentation levels
15.
DECLARE @work_to_do TABLE (
16.
    objectid int
17.
    , indexid int
18.
    , pagedensity float
19.
    , fragmentation float
20.
    , numrows int
21.
)
22.

23.
DECLARE @objectid int;
24.
DECLARE @indexid int;
25.
DECLARE @schemaname nvarchar(130); 
26.
DECLARE @objectname nvarchar(130); 
27.
DECLARE @indexname nvarchar(130); 
28.
DECLARE @numrows int
29.
DECLARE @density float;
30.
DECLARE @fragmentation float;
31.
DECLARE @command nvarchar(4000); 
32.
DECLARE @fillfactorset bit
33.
DECLARE @numpages int
34.

35.
-- Select indexes that need to be defragmented based on the following
36.
-- * Page density is low
37.
-- * External fragmentation is high in relation to index size
38.
PRINT 'Estimating fragmentation: Begin. ' + convert(nvarchar, getdate(), 121) 
39.
INSERT @work_to_do
40.
SELECT
41.
    f.object_id
42.
    , index_id
43.
    , avg_page_space_used_in_percent
44.
    , avg_fragmentation_in_percent
45.
    , record_count
46.
FROM 
47.
    sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'SAMPLED') AS f
48.
WHERE
49.
    (f.avg_page_space_used_in_percent < 85.0 and f.avg_page_space_used_in_percent/100.0 * page_count < page_count - 1)
50.
    or (f.page_count > 50 and f.avg_fragmentation_in_percent > 15.0)
51.
    or (f.page_count > 10 and f.avg_fragmentation_in_percent > 80.0)
52.

53.
PRINT 'Number of indexes to rebuild: ' + cast(@@ROWCOUNT as nvarchar(20))
54.

55.
PRINT 'Estimating fragmentation: End. ' + convert(nvarchar, getdate(), 121)
56.

57.
SELECT @numpages = sum(ps.used_page_count)
58.
FROM
59.
    @work_to_do AS fi
60.
    INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id
61.
    INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id
62.

63.
-- Declare the cursor for the list of indexes to be processed.
64.
DECLARE curIndexes CURSOR FOR SELECT * FROM @work_to_do
65.

66.
-- Open the cursor.
67.
OPEN curIndexes
68.

69.
-- Loop through the indexes
70.
WHILE (1=1)
71.
BEGIN
72.
    FETCH NEXT FROM curIndexes
73.
    INTO @objectid, @indexid, @density, @fragmentation, @numrows;
74.
    IF @@FETCH_STATUS < 0 BREAK;
75.

76.
    SELECT 
77.
        @objectname = QUOTENAME(o.name)
78.
        , @schemaname = QUOTENAME(s.name)
79.
    FROM 
80.
        sys.objects AS o
81.
        INNER JOIN sys.schemas as s ON s.schema_id = o.schema_id
82.
    WHERE 
83.
        o.object_id = @objectid;
84.

85.
    SELECT 
86.
        @indexname = QUOTENAME(name)
87.
        , @fillfactorset = CASE fill_factor WHEN 0 THEN 0 ELSE 1 END
88.
    FROM 
89.
        sys.indexes
90.
    WHERE
91.
        object_id = @objectid AND index_id = @indexid;
92.

93.
    IF ((@density BETWEEN 75.0 AND 85.0) AND @fillfactorset = 1) OR (@fragmentation < 30.0)
94.
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';
95.
    ELSE IF @numrows >= 5000 AND @fillfactorset = 0
96.
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD WITH (FILLFACTOR = 90)';
97.
    ELSE
98.
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';
99.
    PRINT convert(nvarchar, getdate(), 121) + N' Executing: ' + @command;
100.
    EXEC (@command);
101.
    PRINT convert(nvarchar, getdate(), 121) + N' Done.';
102.
END
103.

104.
-- Close and deallocate the cursor.
105.
CLOSE curIndexes;
106.
DEALLOCATE curIndexes;
107.

108.

109.
IF EXISTS (SELECT * FROM @work_to_do)
110.
BEGIN
111.
    PRINT 'Estimated number of pages in fragmented indexes: ' + cast(@numpages as nvarchar(20))
112.
    SELECT @numpages = @numpages - sum(ps.used_page_count)
113.
    FROM
114.
        @work_to_do AS fi
115.
        INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id
116.
        INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id
117.

118.
    PRINT 'Estimated number of pages freed: ' + cast(@numpages as nvarchar(20))
119.
END
120.
GO
121.

122.

123.
--Update all statistics
124.
PRINT 'Updating all statistics.' + convert(nvarchar, getdate(), 121) 
125.
EXEC sp_updatestats
126.
PRINT 'Done updating statistics.' + convert(nvarchar, getdate(), 121) 
127.
GO
128.

129.
--Delete sync history
130.
PRINT 'Delete sync history.' + convert(nvarchar, getdate(), 121)
131.
DELETE FROM tbEventInstance WHERE EventNamespaceID = '2' AND EVENTID IN ('381', '382', '384', '386', '387', '389')
132.
GO
Die aufgezeigten Skripte hatte ich im Netz gefunden und weitgehend unverändert belassen.
(Pfade und Namen habe ich in der cmd natürlich angepasst.)

Gruß Frank
Bitte warten ..
Mitglied: Pedant
27.07.2017 um 11:23 Uhr
Hallo WSUS-2008/2012-Admins,

da ich anscheinend der Erste und momentan noch der Einzige bin, der WSUS auf 2016 (Server und MSSQL) betreibt, habe ich die Datenbank gesichert und das Skript, wie BassFishFox es eingangs vorschlug, einfach ausprobiert.

Aus der WSUS-Serverbereinigung.cmd habe ich noch das REM aus Zeile 19 entfernt:
REM "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" Set-ExecutionPolicy Remotesigned
"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" Set-ExecutionPolicy Remotesigned
Bevor ich das Skript insgesamt habe laufen lassen, habe ich zuerst nur den SQL-Teil benutzt.
Das reduzierte die Datenbankgröße von ~10 GB auf etwas über 6 GB und zeigte keine Auffälligkeiten im Log.
Danach habe ich zwei oder dreimal, den "Server Cleanup Wizard" mit allen fünf Haken über die GUI gestartet.
Das brach jeweils nach einiger Zeit ab und die Serverknoten-zurücksetzen-Aufforderung erschien.
Ich hatte allerdings das Gefühl, dass ein Teil der Arbeit erledigt wurde und so war es wohl auch.
Das vollständige Skript gestartet, lief dann ohne Fehler durch und hat nur noch 11 ObsoleteUpdates und 6 ObsoleteComputers gelöscht.
Danach habe ich noch einmal den "Server Cleanup Wizard" manuell gestartet und der lief dann flott und ohne Fehler durch und hatte auch nichts mehr zu tun.

Das Skript ist jetzt wieder in der Aufgabenplanung für sonntags eingetragen und wie es scheint ist alles gut.

Gruß Frank
Bitte warten ..
Ähnliche Inhalte
Windows Update
WSUS Updates Mai 2016
gelöst Frage von JudgelgWindows Update6 Kommentare

Moin, habt ihr zufällig schon die Updates Mai 2016 installiert. Ich habe gerade installiert und festgestellt, das wieder ein ...

Windows Server
Windows Server 2016 WSUS
gelöst Frage von Looser27Windows Server2 Kommentare

Guten Morgen liebe Kollegen, ich habe gestern einen Windows 2016 Server aufgesetzt und die WSUS Rolle hinzugefügt (Da wir ...

Microsoft Office

Access 2016: Datenbank plötzlich defekt

gelöst Frage von honeybeeMicrosoft Office9 Kommentare

Hallo, folgendes Problem: Heute morgen hatte ich an der betroffenen Datenbank gearbeitet und sie dann ordnungsgemäß geschlossen. Zwei Stunden ...

Windows Server

Windows Server 2016 WSUS Reparatur

gelöst Frage von MarabuntaWindows Server3 Kommentare

Hallo, ich habe einen Windows Server 2016, einige Registry Einträge vom WSUS sind verloren gegangen und zwar soweit, dass ...

Neue Wissensbeiträge
Windows Installation

Windows Install ISO mit übergroßer Install.wim auf FAT32 übertragen

Tipp von Lochkartenstanzer vor 2 TagenWindows Installation9 Kommentare

Moin Kollegen, Viele von euch werden sicher aus praktischen Gründen nicht nur DVDs oder "virtuelle" CD-Laufwerke (Zalman, IODD) zum ...

Datenschutz

Gehe zurück auf Los, ziehe keine 4.000 Mark. E-Privacy (erstmal) gescheitert

Information von certifiedit.net vor 3 TagenDatenschutz

Webbrowser

Firefox 71 verfügbar mit Picture in Picture Funktion

Information von sabines vor 3 TagenWebbrowser2 Kommentare

Die neue Firefox Version 71 unterstützt, zunächst nur für Windows, Picture in Picture. Damit kann ein Video in einem ...

E-Mail
SPF beim Versenden testen
Tipp von StefanKittel vor 4 TagenE-Mail3 Kommentare

Hallo, wenn man einen SPF für einen Exchange, oder anderen Mail-Server, konfigiruert muss man das ja auch testen. Ganz ...

Heiß diskutierte Inhalte
Server-Hardware
Hetzner Dedicated-Server für Terminalserver - RDSH 5 Benutzer gesucht
gelöst Frage von ra-user10Server-Hardware37 Kommentare

Hallo liebe IT-Fachleute! Ich möchte für unseren kleinen Betrieb einen Terminalserver aufsetzen und dafür das Angebot von Hetzner nutzen. ...

Switche und Hubs
PoE in erster und zweiter Instanz
Frage von moinmoin2016Switche und Hubs27 Kommentare

Moin. Ich habe versucht zum folgenden Sachverhalt ein Beitrag zu suchen, konnte aber nichts passendes finden. Folgender Sachverhalt: Ein ...

E-Business
Brainstorming: Zeiterfassungs- oder gesamtes Abrechnungssystem
Frage von certifiedit.netE-Business13 Kommentare

Guten Abend, alles neu macht der, naja, schon lange nicht mehr, Mai Zum Ende des Jahres, besser zum Beginn ...

Entwicklung
Powershell-Skript und Organisationseinheiten auskludieren
gelöst Frage von informatikkfmEntwicklung13 Kommentare

Hallo, ich habe ein Powershell-Skript, ähnlich wie das folgende. Ich möchte dabei, dass alle Benutzer unterhalb der OUs in ...