Cancellare la cronologia degli aggiornamenti in WSUS 3.0 SP1

Ciao a tutti, come primo post vado ad illustrarvi una piccola procedura non documentata, per eliminare lo storico delle connessioni di WSUS.

Come ben sapete WSUS si sincronizza con il server di Upstream (o windows update) ad intervalli più o meno regolari per verificare la presenza di nuovi aggiornamenti. Uno storico di questi aggiornamenti è memorizzato all'interno del database e mostrato all'amministratore del sistema nell'apposita maschera. Può capitare che in un server attivo da molto tempo, oppure con un periodo di riposo tra le sincronizzazioni troppo breve, che questo storico cresca troppo velocemente e contenga così tanti elementi che il caricamento della lista rallenti l'esecuzione della console. Conseguentemente una lista così lunga risulta illegibile e pressochè inutile. All'interno della console non esiste un tasto o un parametro che permetta di cancellare o ridurre questo storico (synchronization history); per questo motivo l'unica strada è rapresentata dall'accesso diretto al database di WSUS.

WSUS può essere utilizzato sia con "Windows Internal Database", opzione di default, che con un "Microsoft Sql Server" preesistente. La procedura si compone sostanzialmente di una query in formato standard SQL quindi funzionerà correttamente su entrambe le configurazioni.
Per eseguire le query, chi utilizza un Sql Server potrà usufruire di "Microsfot SQL Server Management Studio"; mentre chi usufruisce di Windows Internal Database potrà utilizzare "Microsoft SQL Server Management Studio Express" oppure il tool da linea di comando "sqlcmd"

La sintassi del comando "sqlcmd" è molto semplice, per eseguire una query sul database di WSUS basta utilizzare i seguenti parametri:

sqlcmd -S STRINGA_DI_CONNESSIONE -E -b -Q "QUERY_DA_ESEGUIRE"

Vediamo come procedere:

  1. Stoppiamo il servizio di WSUS

    net stop WSusService

  2. Colleghiamoci all'istanza del database con NOME_SERVER\SQL_NOME_ISTANZA
    Dato che "Windows Internal Database" non permette collegamenti remoti, chi utilizza questo database deve usare la seguente stringa di connessione:

    \\.\pipe\SQL_NOME_ISTANZA\sql\query

  3. Facciamo una copia di backup del database
    Chi usa "sqlcmd" può utilizzare la seguente query:

    "BACKUP DATABASE [NOME_DB_WSUS] TO DISK = N’PATH_DOVE_SALVARE.BAK’ WITH NOFORMAT, INIT, NAME = N’WSUS Database Backup’, SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM"

  4. Eseguiamo la sequente query:

    "DELETE FROM [NOME_DB_WSUS].[dbo].[tbEventInstance]WHERE [EventID]=381 or [EventID]=382 or [EventID]=384 or [EventID]=386 or [EventID]=387"

  5. Riavviamo il servizio di WSUS

    net start WSusService

Naturalmente bisogna sostituire con i valori corretti le variabili all'interno dei comandi, vi ricordo i settagi di default:
SQL_NOME_ISTANZA = mssql$microsoft##ssee
NOME_DB_WSUS = SUSDB

Questa procedura elimina tutti i record relativi alla sincronizzazione tra il server WSUS e la sua fonte. Essendo semplice SQL è possibile aggiungere più criteri alla query per discriminare i record da eliminare.

Vi ricordo che l'accesso diretto al database di WSUS non è una procedura supportata ufficialmente, ed in caso di errori si può compromettere l'intera stabilità del sistema di distribuzione degli aggiornamenti.

Per finire vorrei segnalare un importantissima risorsa, alla quale potete trovare le risposte alle domande più comuni, ed i futuri aggiornamenti: WSUS Product Team Blog.

Gianluca Bertelli
Support Engineer
Microsoft Enterprise Platforms Support