Blog
Friday, 24. July 2020

Benötigte SQL Server Updates finden und downloaden

Anna
Teamleitung Website & Content

Eine der häufigsten Fragen bezüglich des Patch-Managements eines SQL Servers die uns erreicht, ist die Frage nach dem Identifizieren und dem Download der benötigten Updates.

Eine sehr interessante und berechtigte Frage, wie wir finden – weshalb unser heutiger Artikel ein einfaches Verfahren unter Benutzung der Test-DbaBuild Tools von dbatools für PowerShell vorstellt.

Die wichtigsten Komponenten spielen dabei die drei Parameter KBLevel, BuildLevel und BuildTarget, die an die Ausgabe einer Test-DbaBuild Abfrage angefügt werden können. Der Parameter KBLevel beschreibt dabei (wie der Name schon vermuten lässt) das KB Level, zugehörig zu dem momentanen Service-Pack oder dem Kumulativen-Update, das momentan ausgeführt wird. Nicht sonderlich hilfreich um das benötigte Update zu identifizieren – wir erfahren lediglich, auf welchem Stand wir uns momentan befinden. Aushilfe kann allerdings der BuildTarget-Parameter leisten:

Ausführung einer Test-DbaBuild Abfrage

Test-DbaBuild -SqlInstance $Localinstances -Update -MaxBehind 0CU | Select-Object SqlInstance, NameLevel, KBLevel, SPLevel, SPTarget, CULevel, CUTarget, BuildLevel, BuildTarget, Compliant | Format-Table -AutoSize;
SQLInstance NameLevel KBLevel SPLevel SPTarget CULevel CUTarget BuildLevel BuildTarget Compliant
madafa\QEO_SI_2017 2017 4527377 RTM RTM CU18 CU21 14.0.3257 14.0.3335 false
madafa\QEO_SI_2019 2019 4527376 RTM RTM CU1 CU5 15.0.4003 15.0.4043 false

Die Build und KB-Nummern, die wir aus der Abfrage gewonnen haben, können nun auf sqlserverupdates.com mit denen der CUs abgeglichen werden.

Und dann?
Jetzt können wir Get-DbaBuildReference benutzen, um in Erfahrung zu bringen, welches KB benötigt wird. Get-DbaBuildReference führt eine Suche auf Basis der Build-Informationen durch, die dbatools bereitstellt, und kann so passende build numbers, KB numbers, Namen, usw. ausgeben, die auf den Eingaben der KB-Nummer und dem CU oder SP Namen basieren.
Hier eine beispielhafte Abfrage für die build number 14.0.335, also das Target der SQL Server 2017 Instanz:

Get-DbaBuildReference -Build 14.0.3335 | Format-Table -AutoSize;
Build BuildLevel CULevel KBLevel MatchType NameLevel SPLevel SupportedUntil Warnings
14.0.3335 14.0.3335 CU21 4557397 Exact 2017 RTM 2027-10-12 00:00:00

Und da ist sie, wir haben die KB Nummer zugehörig zu CU21 gefunden!

Im Browser downloaden? No way, Jose!
Ein weiteres, sehr nützliches DBA Tool ist KBUpdate. Es kann uns dabei helfen, Informationen über KB Updates zu beschaffen und diese direkt zu downloaden. Glücklicherweise steht uns das Tool direkt in dbatools zur Verfügung.

Get-DbaKbUpdates gibt eine Menge an nützlicher Informationen bezüglich einer angegebenen KB Nummer zurück:

Get-DbaKbUpdate 4557397

Ausgabe:

Title : SQL Server 2017 RTM Cumulative Update (CU) 21 KB4557397
Description : CU21 for SQL Server 2017 RTM upgraded all SQL Server 2017 RTM instances and components installed
through the SQL Server setup. CU21 can upgrade all editions and servicing levels of SQL Server
2017 RTM to the CU21 level. For customers in need of additional installation options, please visit
the Microsoft Download Center to download the latest Cumulative Update
(https://support.microsoft.com/en-us/kb/957826). To learn more about SQL Server 2017 RTM CU21,
please visit the Microsoft Support (http://support.microsoft.com) Knowledge Base article KB4557397.
Architecture :
NameLevel : 2017
SPLevel : RTM
KBLevel : 4557397
CULevel : CU21
BuildLevel : 14.0.3335
SupportedUntil : 2027-10-12 00:00:00
Language :
Classification : Updates
SupportedProducts : Microsoft SQL Server 2017
MSRCNumber : n/a
MSRCSeverity : n/a
Hotfix : false
Size : 533.3 MB
UpdateId : 6bc92812-80ea-4c05-833c-433d60457e64
RebootBehavior : Can request restart
RequestsUserInput : No
ExclusiveInstall :
NetworkRequired : No
UninstallNotes : SQL Server 2017 RTM CU21 may be removed by selecting KB4557397 from "View Installed Updates" in
the Programs and Features section of the Control Panel, under SQL Server 2017.
UninstallSteps : n/a
SupersededBy : n/a
Supersedes : {SQL Server 2017 RTM Cumulative Update (CU) 1 KB4038634, SQL Server 2017 RTM Cumulative Update
(CU) 2 KB4052574, SQL Server 2017 RTM Cumulative Update (CU) 3 KB4052987, SQL Server 2017 RTM
Cumulative Update (CU) 4 KB4056498…}
LastModified : 7/1/2020
Link : {http://download.windowsupdate.com/d/msdownload/update/others/2020/07/32055076_0e9fcf41f92570c69b61
5407ef8cae1083e1600c.cab, http://download.windowsupdate.com/d/msdownload/update/software/updt/2020/
07/sqlserver2017-kb4557397-x64_e91bfa33a34accf82a0c374c9e8b7d0ce3b7ce05.exe}

Alles schön und gut, aber wir wollen den Installer downloaden. Dafür können wir Save-DbaKbUpdate verwenden:

Save-DbaKbUpdate -Name 4557397 -Path C:\Users\Madafa\Downloads\KbUpdates\

Das Puzzle zusammensetzen
Um unsere Effizienz zu steigern und unsere Arbeit zu vereinfachen, können wir die durchgeführten Schritte in einem simplen Skript vereinen. Setzt man alles zusammen, erhält man folgendes:

$DownloadPath = "C:\Users\Madafa\Downloads\KbUpdates";
$LocalInstances = @('madafa\qeo_si_2017', 'madafa\qeo_si_2019');

$BuildTargets = Test-DbaBuild -SqlInstance $LocalInstances -MaxBehind 0CU -Update | Where-Object { !$PSItem.Compliant } | Select-Object -ExpandProperty BuildTarget -Unique;

Get-DbaBuildReference -Build $BuildTargets | ForEach-Object { Save-DbaKBUpdate -Path $DownloadPath -Name $PSItem.KBLevel };

Und das ist alles! In Sekunden werden nun die benötigten Updates automatisch identifiziert und sogar gedownloadet. Jetzt bleibt nur noch eine Frage offen: wohin jetzt mit der ganzen gewonnen Zeit?

Aber
Das Script wurde nur mit SQL Server 2017 und 2019 getestet, da diese keine Service Packs erwarten. Sollten ältere SPs von SQL Server 2012/2014/2016 benötigt werden, müssen vermutlich ein paar kleine Änderungen vorgenommen werden.

Interesse geweckt?

Unsere Expert:innen stehen Ihnen bei allen Fragen rund um Ihre IT Infrastruktur zur Seite.

Kontaktieren Sie uns gerne über das Kontaktformular und vereinbaren ein unverbindliches Beratungsgespräch mit unseren Berater:innen zur Bedarfsevaluierung. Gemeinsam optimieren wir Ihre Umgebung und steigern Ihre Performance!
Wir freuen uns auf Ihre Kontaktaufnahme!

Taunusstraße 72
55118 Mainz
info@madafa.de
+49 6131 3331612
Bürozeiten
Montag bis Donnerstag:
9:00 - 17:00 Uhr MEZ

Freitags:
9:30 - 14:00 Uhr MEZ