Benötigte SQL Server Updates finden und downloaden

Avatar

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;

Ausgabe der Abfrage

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.


→ Hier findest Du den Artikel zum direkten PDF-Download: madafa.de/download/beitraege/


Schreibe einen Kommentar