Mettre à jour SQL Server : CU, GDR et branches de maintenance
Categories:
13 minutes à lire
Depuis SQL Server 2017, Microsoft ne publie plus de Service Pack. Il ne reste que les mises à jour cumulatives (CU) et les correctifs de sécurité (GDR).
Une instance suit l’une de deux branches : la branche GDR, qui ne reçoit que la sécurité, ou la branche CU, qui reçoit tous les correctifs, sécurité comprise. Installer une CU fait passer l’instance sur la branche CU.
Choisissez la branche CU, et installez toujours la build la plus élevée de votre branche. C’est souvent un « CU + GDR », plus récent que la dernière CU.
Vous pouvez configurer Microsoft Update pour automatiser les mises à jour SQL Server par Windows Update.
Cette page décrit le modèle de maintenance de SQL Server 2017 et suivants, sur Windows. Les numéros de build cités sont réels et datés du 12 septembre 2026.
CU et GDR
Microsoft a abandonné les Service Packs avec SQL Server 2017, en adoptant le Modern Servicing Model. Il reste deux types de mises à jour :
| Type | Contenu | Rythme |
|---|---|---|
| CU, Cumulative Update | tous les correctifs, améliorations et évolutions depuis la sortie de la version, sécurité comprise | tous les mois pendant la première année, puis tous les deux mois jusqu’à la fin du support standard (cinq ans) |
| GDR, General Distribution Release | les correctifs de sécurité et les correctifs critiques | à la publication d’un correctif de sécurité, sans calendrier fixe |
Les CU sont cumulatives : chacune contient toutes les précédentes. Vous pouvez passer directement du RTM à la dernière CU sans installer les intermédiaires.
À la fin du support standard, Microsoft cesse de publier des CU. La version ne reçoit plus que des GDR, jusqu’à la fin du support étendu :
| Version | Dernière CU publiée | Fin du support standard | Fin du support étendu |
|---|---|---|---|
| SQL Server 2017 | CU31 (septembre 2022), la dernière | 11 octobre 2022 | 12 octobre 2027 |
| SQL Server 2019 | CU32 (février 2025), la dernière | 28 février 2025 | 8 janvier 2030 |
| SQL Server 2022 | CU26 (juillet 2026) | 11 janvier 2028 | 11 janvier 2033 |
| SQL Server 2025 | CU8 (août 2026) | 6 janvier 2031 | 6 janvier 2036 |
Les deux branches de maintenance
flowchart LR
RTM["RTM"] --> GDR1["GDR"]
GDR1 --> GDR2["GDR suivant"]
RTM --> CU1["CU1"]
CU1 --> CUN["CU2 … CUn"]
CUN --> CUGDR["CUn + GDR"]
GDR1 -. "CU + GDR plus récent" .-> CUGDRÀ partir du RTM, chaque version se sépare en deux branches :
- la branche GDR, qui ne reçoit que les correctifs de sécurité et les correctifs critiques ;
- la branche CU, qui reçoit ces mêmes correctifs et tous les autres.
Dès que vous installez une CU, l’instance passe sur la branche CU et y reste. Revenir sur la branche GDR demanderait de désinstaller toutes les CU. Personne n’a de raison de le faire, puisque la branche CU contient déjà toute la sécurité.
Le passage de la branche GDR à la branche CU est possible, mais pas avec n’importe quelle CU. La CU que vous installez doit contenir les correctifs de sécurité du GDR déjà en place, donc avoir été publiée le même jour ou après lui. Prenez la build la plus récente de la branche CU. Une CU plus ancienne que le GDR installé est refusée par l’installateur, avec le message « There are no SQL Server instances or shared features that can be updated on this computer ».
| Politique | Branche | Cas d’usage |
|---|---|---|
| Tous les correctifs | CU | recommandation de Microsoft, cas général |
| Sécurité seulement | GDR | éditeur qui ne certifie son logiciel que sur une build précise, environnement où tout changement fonctionnel est interdit |
Je recommande la branche CU. Le RTM d’une version contient des bogues corrigés dans les premières CU, et une instance restée sur la branche GDR ne recevra jamais ces corrections.
Lire le numéro de build
La fonction SERVERPROPERTY donne la build, le niveau de CU et l’article KB correspondant :
-- Version, niveau de mise à jour et article KB de l'instance
SELECT SERVERPROPERTY('ProductVersion') AS version, -- 16.0.4265.3
SERVERPROPERTY('ProductLevel') AS niveau, -- RTM
SERVERPROPERTY('ProductUpdateLevel') AS cu, -- CU26
SERVERPROPERTY('ProductUpdateReference') AS kb, -- KB5093420
SERVERPROPERTY('Edition') AS edition;
ProductLevel reste à RTM sur une instance à jour : il indique le Service Pack, et il n’y en a plus. Le niveau de CU se lit dans ProductUpdateLevel, qui vaut NULL tant qu’aucune CU n’est installée.
Le troisième groupe de chiffres de la build indique la branche. Sa valeur dépend de la version :
| Version | RTM | Branche GDR | Branche CU |
|---|---|---|---|
| SQL Server 2017 (14.0) | 14.0.1000.169 | 14.0.2xxx | 14.0.3xxx |
| SQL Server 2019 (15.0) | 15.0.2000.5 | 15.0.2xxx | 15.0.4xxx |
| SQL Server 2022 (16.0) | 16.0.1000.6 | 16.0.1xxx | 16.0.4xxx |
| SQL Server 2025 (17.0) | 17.0.1000.7 | 17.0.1xxx | 17.0.4xxx |
Pour 2019, 2022 et 2025, un troisième groupe en 4xxx signifie que des CU ont été appliquées. SQL Server 2017 fait exception, avec des CU en 3xxx. Lisez donc la build par rapport au RTM de sa version.
Installer la build la plus élevée de sa branche
Quand un correctif de sécurité sort après une CU, Microsoft publie le même jour une build pour chaque branche. Voici ce qui était disponible pour SQL Server 2019 le 14 juin 2022 :
| Build | Nom | Date | Contenu |
|---|---|---|---|
15.0.4223.1 | CU16 | 18 avril 2022 | dernière CU à cette date, sans la sécurité de juin |
15.0.4236.7 | CU16 + GDR | 14 juin 2022 | CU16 et la sécurité de juin, pour la branche CU |
15.0.2095.3 | GDR | 14 juin 2022 | la sécurité de juin, pour la branche GDR |
Un administrateur qui cherchait « la dernière CU » le lendemain installait la CU16 et restait sans le correctif de juin. D’après la documentation Microsoft, une CU dont le numéro de build est supérieur à celui d’un CU + GDR contient ses correctifs de sécurité. La règle pratique est d’installer la build la plus élevée publiée pour votre branche, quel que soit son nom.
Limites du numéro de CU
SQL Server 2019 a reçu sa dernière CU, la CU32, le 27 février 2025. La branche CU continue de recevoir la sécurité, sous le même nom :
| Build | Nom | Date |
|---|---|---|
15.0.4430.1 | CU32 | 27 février 2025 |
15.0.4455.2 | CU32 + GDR | 11 novembre 2025 |
15.0.4480.2 | CU32 + GDR | 14 juillet 2026 |
15.0.4490.9 | CU32 + GDR | 8 septembre 2026 |
Deux instances qui affichent CU32 dans ProductUpdateLevel peuvent avoir un an et demi de correctifs de sécurité d’écart. Comparez le numéro de build complet.
Retrait d’une CU
La CU7 de SQL Server 2019 (15.0.4063.15, 2 septembre 2020) figure avec la mention « Removed » dans la liste des builds de SQL Server 2019. C’est rare, mais cela justifie d’attendre quelques jours à quelques semaines avant d’installer une CU en production, et de la passer d’abord sur une préproduction.
Trouver la bonne build
| Source | Nature | Usage |
|---|---|---|
| Latest updates and version history for SQL Server | Microsoft Learn | dernier GDR, dernière CU et dernier CU + GDR de chaque version supportée, avec la build, le KB et la date |
| Page SQL Server aaaa build versions, par exemple SQL Server 2022 | Microsoft Learn | l’historique complet d’une version, branche CU et branche GDR séparées |
| SQLServerBuilds.xlsx | Microsoft | toutes les builds depuis SQL Server 2005, avec la liste détaillée des correctifs de chaque build |
| sqlserverbuilds.blogspot.com | communautaire | la même information, un tableau par version, de la build la plus récente à la plus ancienne |
La méthode :
- Relevez la build de l’instance avec la requête précédente.
- Ouvrez la liste des builds de sa version, et trouvez la ligne de cette build.
- Remontez à la build la plus récente de la même branche.
- Suivez le lien KB, qui mène à la page de téléchargement.
Le site communautaire n’est pas une publication Microsoft (et il est très chargé en publicité de nos jours). Vérifiez la build et le KB sur Microsoft Learn avant de télécharger.
Les canaux de distribution
| Canal | Usage |
|---|---|
| Page KB et centre de téléchargement Microsoft | téléchargement manuel, choix du moment |
| Microsoft Update | serveur isolé ou petit parc |
| WSUS, Microsoft Update Catalog | parc géré centralement |
Les mises à jour SQL Server ne sont proposées par Windows Update qu’après adhésion à Microsoft Update, qui couvre les produits Microsoft autres que Windows. Sur Windows Server 2019 et suivants, le réglage est dans Paramètres > Windows Update > Options avancées > Recevoir les mises à jour pour d’autres produits Microsoft. Sans lui, un serveur à jour côté Windows n’a jamais reçu de correctif SQL Server.
Une mise à jour reçue par Microsoft Update s’installe sans surveillance, met à jour tous les composants SQL Server et redémarre le service. Sur un serveur de production, activez Microsoft Update pour être prévenu, et choisissez vous-même le moment de l’installation : la stratégie de groupe Configure Automatic Updates, option Auto download and notify for install, télécharge sans installer.
Instance neuve et Microsoft Update
Le canal automatique de Microsoft Update ne propose la version CU + GDR d’un correctif de sécurité qu’aux instances qui ont déjà une CU. Une instance restée au RTM reçoit la version GDR, et passe sur la branche GDR sans que personne l’ait décidé. WSUS ne la ramènera pas sur la branche CU : il faudra le faire à la main. Le détail est dans Updates to the Microsoft Update detection logic for SQL Server servicing.
Installez donc la dernière build de la branche CU juste après l’installation de SQL Server, avant d’activer Microsoft Update.
Appliquer une mise à jour sur une instance autonome
Avant
- Faites une sauvegarde complète de toutes les bases, bases système comprises, vers un autre emplacement que le serveur. Un instantané de machine virtuelle ne remplace pas une sauvegarde SQL Server.
- Lancez
DBCC CHECKDBsur toutes les bases. - Lisez la page KB de la mise à jour, en particulier la section des problèmes connus.
- Prévenez les utilisateurs et suspendez les travaux de l’Agent SQL Server.
- Vérifiez l’espace disque : le paquet pèse de l’ordre de 500 Mo à 1 Go, et l’installateur a besoin de place pour ses fichiers temporaires.
- Notez la build de départ.
Pendant
Exécutez le paquet en tant qu’administrateur. Un paquet CU contient les mises à jour de tous les composants de la version, mais ne met à jour que ceux qui sont installés. Si vous ajoutez un composant plus tard, Analysis Services par exemple, réappliquez la CU.
L’instance est indisponible pendant l’opération. Comptez une vingtaine de minutes sur une instance simple, redémarrage compris. Redémarrez le serveur si l’installateur le demande.
Après
-- La build doit correspondre à celle de la page KB
SELECT SERVERPROPERTY('ProductVersion') AS version,
SERVERPROPERTY('ProductUpdateLevel') AS cu;
-- Bases qui ne sont pas en ligne
SELECT name, state_desc
FROM sys.databases
WHERE state_desc <> 'ONLINE';
-- Compte rendu des scripts de mise à niveau dans le journal d'erreurs
EXEC sys.xp_readerrorlog 0, 1, N'upgrade';
Réactivez ensuite les travaux de l’Agent et contrôlez un traitement réel de l’application.
Le redémarrage du service a des effets à connaître :
| Effet | Conséquence |
|---|---|
tempdb est recréée | elle repart de sa taille initiale configurée. Laissée aux valeurs par défaut, elle rejoue toute sa croissance. |
| Les DMV cumulatives sont remises à zéro | sys.dm_os_wait_stats, sys.dm_io_virtual_file_stats et les autres repartent de zéro. Relevez-les avant si vous en avez besoin. |
| Le cache de plans est vidé | les premières exécutions recompilent et sont plus lentes. |
| Le Query Store est conservé | il est stocké dans chaque base utilisateur et survit au redémarrage. |
En cas de problème
Une CU se désinstalle depuis Panneau de configuration > Programmes et fonctionnalités > Afficher les mises à jour installées, sous l’entrée de la version de SQL Server. L’instance revient à la build précédente. Sur Linux, il faut revenir à la version précédente du paquet mssql-server. La sauvegarde prise avant l’intervention reste le recours si la désinstallation ne suffit pas.
Mettre à jour un groupe de disponibilité Always On
Sur un groupe de disponibilité, la mise à jour se fait réplica par réplica, avec un seul basculement manuel. Microsoft décrit la procédure dans Upgrade availability group replicas :
- Sauvegardez chaque base du groupe et lancez
DBCC CHECKDB. - Réglez la préférence de sauvegarde automatisée sur le réplica principal seul, et retirez le basculement automatique des réplicas synchrones.
- Mettez à jour les réplicas secondaires asynchrones, puis les secondaires synchrones distants, puis les secondaires synchrones locaux.
- Vérifiez que le secondaire cible est
SYNCHRONIZED, puis basculez manuellement vers lui. - Mettez à jour l’ancien réplica principal.
- Rétablissez le basculement automatique et, si vous le souhaitez, rebasculez vers le réplica principal d’origine.
Le cluster WSFC a un groupe de ressources à part, nommé Cluster Group en PowerShell et affiché sous Cluster Core Resources dans le Gestionnaire du cluster de basculement. Il contient le nom et l’adresse IP du cluster, ainsi que le témoin (partage de fichiers, cloud ou disque). Ce groupe appartient à un nœud, qui n’est pas forcément celui du réplica principal du groupe de disponibilité.
Avant de mettre à jour un réplica secondaire, vérifiez quel nœud possède ce groupe. Si c’est le nœud que vous allez mettre à jour, déplacez le groupe sur le nœud du réplica principal. Refaites la vérification après le basculement, avant de mettre à jour l’ancien réplica principal.
# Nœud propriétaire des ressources principales du cluster
Get-ClusterGroup -Name "Cluster Group"
# Déplacement sur le nœud qui héberge le réplica principal
Move-ClusterGroup -Name "Cluster Group" -Node NOEUD-PRINCIPAL
Le redémarrage ou la déconnexion d’un nœud déclenche un nouvel arbitrage du quorum auprès du témoin. Sur un cluster à deux nœuds avec témoin, le nœud du réplica principal peut perdre cet arbitrage : son service cluster s’arrête, et le groupe de disponibilité passe hors ligne alors que ce nœud n’a pas été touché. Des cas sont décrits sur Microsoft Q&A et par Josh the Coder, et je l’ai rencontré chez un client. Avec les ressources principales sur le nœud du réplica principal, le nœud mis à jour ne porte ni le nom du cluster ni le témoin au moment de son redémarrage.
Ne mettez jamais à jour le réplica principal en premier. Un réplica principal mis à jour ne peut plus envoyer son journal de transactions aux secondaires restés dans une version antérieure : la synchronisation s’arrête, et les bases sont exposées à une perte de données.
-- État de synchronisation de chaque base, par réplica
SELECT ag.name AS groupe,
ar.replica_server_name AS replica,
DB_NAME(drs.database_id) AS base,
drs.synchronization_state_desc AS etat
FROM sys.dm_hadr_database_replica_states AS drs
JOIN sys.availability_replicas AS ar ON ar.replica_id = drs.replica_id
JOIN sys.availability_groups AS ag ON ag.group_id = drs.group_id
ORDER BY groupe, replica, base;
Rythme de vérification
Pour un serveur sans exigence particulière, une vérification par trimestre suffit :
- Relevez la build installée.
- Comparez-la à la build la plus élevée publiée pour sa branche.
- Si l’écart dépasse deux CU, planifiez une fenêtre de maintenance.
Un GDR qui corrige une vulnérabilité exploitable à distance n’attend pas le trimestre. La page KB de chaque GDR renvoie vers la CVE correspondante, qui permet d’en juger.
À faire
- Choisir la branche CU, sauf contrainte d’un éditeur.
- Installer la build la plus élevée de la branche, CU + GDR compris.
- Lire le numéro de build complet, et
ProductUpdateLevelplutôt queProductLevel. - Activer Microsoft Update ou WSUS, en choisissant le moment de l’installation.
- Faire une sauvegarde et un
DBCC CHECKDBavant chaque mise à jour.
À éviter
- Chercher un Service Pack pour SQL Server 2017 ou une version plus récente.
- Comparer des numéros de CU pour savoir quelle instance est la plus à jour.
- Laisser une instance neuve au RTM avec Microsoft Update activé.
- Installer en production une CU le jour de sa publication.
- Mettre à jour le réplica principal d’un groupe de disponibilité avant ses secondaires.