Mettre à niveau la version majeure de la base de données sur place

Cette page décrit comment mettre à niveau la version majeure de la base de données en mettant à niveau votre instance Cloud SQL plutôt qu'en migrant les données.

Introduction

Les fournisseurs de logiciels de base de données publient régulièrement de nouvelles versions majeures contenant de nouvelles fonctionnalités, des améliorations de performances et des améliorations de sécurité. Cloud SQL intègre de nouvelles versions après leur publication. Une fois que Cloud SQL est compatible avec une nouvelle version majeure, vous pouvez mettre à jour vos instances pour maintenir votre base de données à jour.

Vous pouvez mettre à niveau la version de base de données d'une instance sur place ou en migrant les données. Les mises à niveau sur place constituent un moyen plus simple de mettre à niveau la version majeure de votre instance. Vous n'avez pas besoin de migrer les données ni de modifier les chaînes de connexion de l'application. Avec les mises à niveau sur place, vous pouvez conserver le nom, l'adresse IP et d'autres paramètres de votre instance actuelle après la mise à niveau. Les mises à niveau sur place ne nécessitent pas de déplacer de fichiers de données et peuvent être effectuées plus rapidement. Dans certains cas, le temps d'arrêt est plus court que celui qu'implique la migration de vos données.

L'opération de mise à niveau sur place de Cloud SQL pour SQL Server se base sur l'utilitaire SQL Server de mise à niveau sur place.

Planifier une mise à niveau de version majeure

  1. Choisissez une version majeure cible.

    Consultez la liste des versions compatibles avec Cloud SQL.

  2. Examinez les fonctionnalités proposées dans chaque version majeure de la base de données et corrigez les incompatibilités.

    Consultez les fonctionnalités interrompues et les modifications importantes de SQL Server.

    Les nouvelles versions majeures présentent des modifications incompatibles qui peuvent vous obliger à modifier le code de l'application, le schéma ou les paramètres de la base de données. Avant de pouvoir mettre à niveau votre instance de base de données, consultez les notes de version de votre version majeure cible afin de déterminer les incompatibilités que vous devez corriger.

  3. Tester la mise à niveau avec une simulation

    Effectuer une simulation du processus de mise à niveau de bout en bout dans un environnement de test avant de mettre à jour la base de données de production. Vous pouvez cloner votre instance pour créer une copie identique des données sur lesquelles tester le processus de mise à niveau.

    En plus de vérifier que la mise à niveau a abouti, exécutez des tests pour vous assurer que l'application se comporte comme prévu sur la base de données mise à niveau.

  4. Choisissez une heure de mise à niveau.

    La mise à niveau rend l'instance indisponible pendant un certain temps. Prévoyez la mise à niveau pendant une période où l'activité de la base de données est faible.

Mettre à niveau la version majeure de la base de données sur place

Lorsque vous lancez une opération de mise à niveau, Cloud SQL vérifie d'abord la configuration de votre instance pour s'assurer qu'elle est compatible avec une mise à niveau. Après avoir vérifié votre configuration, Cloud SQL rend votre instance indisponible, effectue une sauvegarde préalable à la mise à niveau, effectue la mise à niveau, relance votre instance, puis effectue une sauvegarde post-mise à niveau.

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Pour ouvrir la page Présentation d'une instance, cliquez sur son nom.
  3. Cliquez sur Modifier.
  4. Dans la section Informations sur l'instance, cliquez sur le bouton Mettre à niveau, puis confirmez que vous souhaitez accéder à la page de mise à niveau.
  5. Sur la page Choisir une version de base de données, cliquez sur le champ Version de la base de données pour la mise à niveau, puis sélectionnez l'une des versions majeures disponibles.
  6. Cliquez sur Continuer.
  7. Dans la zone ID d'instance, saisissez le nom de l'instance, puis cliquez sur le bouton Démarrer la mise à niveau.
L'exécution de la requête prend plusieurs minutes.

Vérifiez que la version majeure de la base de données mise à niveau apparaît sous le nom de l'instance sur la page Présentation de l'instance.

gcloud

  1. Lancez la mise à niveau.

    Exécutez la commande gcloud sql instances patch avec l'option --database-version.

    Avant d'exécuter la commande, remplacez les éléments suivants :

    • INSTANCE_NAME : nom de l'instance
    • DATABASE_VERSION : énumération de la version majeure de la base de données, qui doit être supérieure à la version actuelle. Consultez les énumérations de version de base de données disponibles.
    gcloud sql instances patch INSTANCE_NAME \
    --database-version=DATABASE_VERSION
    

    Les mises à niveau de versions majeures prennent plusieurs minutes. Il est possible qu'un message indique que l'opération prend plus de temps que prévu. Vous pouvez ignorer ce message ou exécuter la commande gcloud sql operations wait pour l'ignorer.

  2. Obtenez le nom de l'opération de mise à niveau.

    Exécutez la commande gcloud sql operations list avec l'option --instance.

    Avant d'exécuter la commande, remplacez la variable INSTANCE_NAME par le nom de l'instance.

    gcloud sql operations list --instance=INSTANCE_NAME
    
  3. Surveillez l'état de la mise à niveau.

    Exécutez la commande gcloud sql operations describe.

    Avant d'exécuter la commande, remplacez la variable OPERATION par le nom de l'opération de mise à niveau récupérée à l'étape précédente.

    gcloud sql operations describe OPERATION
    

REST v1

  1. Démarrez la mise à niveau sur place.

    Exécutez une requête PATCH avec la méthode instances:patch.

    Avant d'utiliser les données de requête ci-dessous, remplacez les variables suivantes :

    • project_id : ID du projet
    • instance_name : nom de l'instance

    Méthode HTTP et URL :

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance_name
    

    Corps JSON de la requête :

    {
      "databaseVersion": enum DATABASE_VERSION
    }
    

    Remplacez DATABASE_VERSION par l'énumération de la version majeure de la base de données, qui doit être supérieure à la version actuelle. Consultez les énumérations de version de base de données disponibles.

    Envoyez votre requête à l'aide de curl ou de PowerShell. Consultez la page Modifier des instances.

  2. Obtenez le nom de l'opération de mise à niveau.

    Exécutez une requête GET avec la méthode operations.list après avoir remplacé project_id par l'ID du projet.

    Méthode HTTP et URL :

    GET https://sqladmin.googleapis.com/v1/projects/project-id/operations
    
  3. Surveillez l'état de la mise à niveau.

    Exécutez une requête GET avec la méthode operations.get après avoir remplacé les variables suivantes :

    • project_id : ID du projet
    • operation_name : nom de l'opération de mise à niveau récupérée à l'étape précédente.

    Méthode HTTP et URL :

    GET https://sqladmin.googleapis.com/v1/projects/project-id/operation/operation_name
    

Terraform

Pour mettre à jour la version de la base de données, utilisez une ressource Terraform et le fournisseur Terraform pour Google Cloud, version 4.34.0 ou ultérieure.

resource "google_sql_database_instance" "instance" {
  name             = "sqlserver-instance"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Appliquer les modifications

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

Supprimer les modifications

Pour supprimer vos modifications, procédez comme suit :

  1. Pour désactiver la protection contre la suppression, définissez l'argument deletion_protection sur false dans le fichier de configuration Terraform.
    deletion_protection =  "false"
  2. Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply
  1. Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant yes à l'invite :

    terraform destroy

Lorsque vous placez une demande de mise à niveau sur place, Cloud SQL commence par effectuer une vérification de la mise à niveau. Si Cloud SQL détermine que votre instance n'est pas prête pour une mise à niveau, votre requête de mise à niveau échoue avec un message suggérant comment résoudre le problème. Consultez également la section Résoudre les problèmes liés à la mise à niveau d'une version majeure.

Sauvegardes automatiques des mises à niveau

Lorsque vous effectuez une mise à niveau de version majeure, Cloud SQL effectue automatiquement deux sauvegardes à la demande, appelées sauvegardes de mise à niveau :

  • La première sauvegarde de mise à niveau est la sauvegarde préalable à la mise à niveau, qui est effectuée immédiatement avant le début de la mise à niveau. Vous pouvez utiliser cette sauvegarde pour restaurer l'état de votre instance de base de données dans la version précédente.
  • La deuxième sauvegarde de mise à niveau est la sauvegarde post-mise à niveau, qui est effectuée immédiatement après l'autorisation des nouvelles écritures sur l'instance de base de données mise à niveau.

Lorsque vous affichez la liste de vos sauvegardes, les sauvegardes de mise à niveau sont répertoriées avec le type On-demand. Les sauvegardes de mise à niveau sont libellées afin de pouvoir les identifier facilement. Par exemple, si vous passez de SQL Server Enterprise 2017 à SQL Server Enterprise 2019, votre sauvegarde préalable à la mise à niveau est libellée Pre-upgrade backup, SQLSERVER_2017_ENTERPRISE to SQLSERVER_2019_ENTERPRISE. et votre sauvegarde post-mise à niveau est libellée Post-upgrade backup, SQLSERVER_2019_ENTERPRISE from SQLSERVER_2017_ENTERPRISE.

Comme pour les autres sauvegardes à la demande, les sauvegardes de mise à niveau sont conservées jusqu'à ce que vous les supprimiez ou que vous supprimiez l'instance.

Mettre le niveau de compatibilité de la base de données à jour

Le niveau de compatibilité de base de données détermine le comportement de la base de données par rapport à l'application qu'elle gère. Le paramètre de niveau de compatibilité de la base de données garantit la rétrocompatibilité avec les versions antérieures de SQL Server. Il concerne également les modifications apportées à Transact-SQL et à l'optimiseur de requêtes. Lorsque la version de base de données d'une instance SQL Server est mise à niveau, les niveaux de compatibilité des bases de données existantes sont conservés, de sorte que l'application peut continuer à fonctionner sur la version la plus récente de SQL Server. La mise à niveau du niveau de compatibilité vous permet de bénéficier de nouvelles fonctionnalités, d'améliorations du traitement des requêtes et d'autres modifications.

Après avoir mis à niveau la version du moteur de base de données d'une instance, lorsque l'application diffusée par la base de données est prête, mettez le niveau de compatibilité de la base de données à jour pour chaque base de données de l'instance. Lorsque le niveau de compatibilité est défini sur le plus récent, les bases de données sont mises à jour avec les dernières fonctionnalités et des performances améliorées.

Pour mettre à niveau le niveau de compatibilité de la base de données, procédez comme suit :

  1. Identifiez le niveau de compatibilité actuel de votre base de données.

    Par exemple, pour SQL Server 2017, le niveau de compatibilité par défaut est 140. Pour vérifier le niveau de compatibilité actuel de votre base de données, exécutez la commande suivante dans Transact-SQL, après avoir remplacé DATABASE_NAME

    par le nom de la base de données sur votre instance SQL Server.

    USE DATABASE_NAME
    GO
    SELECT compatibility_level
    FROM sys.databases WHERE name = 'DATABASE_NAME'
    
  2. Déterminez le niveau de compatibilité cible.

    Identifiez la désignation de niveau de compatibilité par défaut pour votre version de base de données mise à niveau afin de déterminer le niveau de compatibilité cible de votre base de données. Par exemple, pour SQL Server 2022, le niveau de compatibilité par défaut est 160. Consultez le tableau mappant les nouvelles versions de SQL Server avec des niveaux de compatibilité.

  3. Évaluez les différences entre vos niveaux de compatibilité actuel et cible.

    Avant de mettre à jour le niveau de compatibilité, examinez les différences de comportement du système entre votre niveau de compatibilité actuel et votre niveau de compatibilité cible. Consultez la liste complète des différences entre les niveaux de compatibilité.

  4. Recueillez une référence des données de charge de travail.

    Avant de mettre à jour le niveau de compatibilité, collectez une référence de données de charge de travail à l'aide du magasin de requêtes SQL Server, afin de pouvoir identifier et traiter ultérieurement les requêtes régressives. Vous utilisez Query Store pour capturer des requêtes et des plans pour un cycle d'activité classique afin d'établir une référence de performance. Pour un workflow guidé, utilisez la fonctionnalité Assistant de réglage des requêtes dans SQL Server Management Studio.

  5. Mettez à jour le niveau de compatibilité.

    Pour modifier le niveau de compatibilité de la base de données, exécutez la commande suivante dans Transact-SQL, après avoir remplacé DATABASE_NAME

    par le nom de la base de données sur votre instance SQL Server et TARGET_COMPATIBILITY_LEVEL avec le niveau de compatibilité cible.

    ALTER DATABASE DATABASE_NAME
    SET COMPATIBILITY_LEVEL = TARGET_COMPATIBILITY_LEVEL;
    GO
    
  6. Recueillir les données de charge de travail mises à niveau

    Recueillez des données de charge de travail mises à niveau à l'aide de Query Store pour la comparaison et la détection de régression.

  7. Traiter les requêtes régressives.

    Dans la plupart des cas, les modifications de l'optimiseur de requêtes dans les niveaux de compatibilité mis à niveau améliorent les performances. Cependant, certaines requêtes peuvent parfois subir une régression des performances. La fonctionnalité de requêtes régressives du magasin de requêtes vous aide à identifier les requêtes régressives et vous permet de forcer le dernier plan connu. SQL Server propose également la correction automatique du plan, qui permet de passer automatiquement au dernier plan connu en cas de régression de requête.

Terminer la mise à niveau de la version majeure

Après avoir mis à niveau votre instance principale, effectuez des tests de validation pour vous assurer que le système mis à niveau fonctionne comme prévu.

Résoudre un problème de mise à niveau de version majeure

Cloud SQL renvoie un message d'erreur si vous tentez d'effectuer une commande de mise à niveau non valide, par exemple si votre instance contient des options de base de données non valides pour la nouvelle version.

Si votre requête de mise à niveau échoue, vérifiez sa syntaxe. Si la structure de la requête est valide, tentez de considérer les suggestions suivantes.

Afficher les journaux de mise à niveau

Si un problème survient lors d'une requête de mise à niveau valide, Cloud SQL publie les journaux d'erreurs dans projects/PROJECT_ID/logs/cloudsql.googleapis.com%2Fsqlserver.err. Chaque entrée de journal contient un libellé avec l'identifiant d'instance pour vous aider à identifier l'instance avec l'erreur de mise à niveau. Recherchez ces erreurs de mise à niveau et corrigez-les.

Pour afficher les journaux d'erreurs, procédez comme suit :

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Pour ouvrir la page Présentation d'une instance, cliquez sur son nom.
  3. Dans le volet Opérations et journaux de la page Présentation de l'instance, cliquez sur le lien Afficher les journaux d'erreurs SQL Server.

    La page Explorateur de journaux s'affiche.

  4. Affichez les journaux comme suit :

    • Pour regrouper tous les journaux d'erreurs d'un projet, sélectionnez le nom du journal dans le filtre de journal Nom du journal.

    Pour en savoir plus sur les filtres de requête, consultez la page Requêtes avancées.

    • Pour filtrer les journaux d'erreurs de mise à niveau pour une seule instance, saisissez la requête suivante dans la zone Rechercher dans tous les champs, après avoir remplacé DATABASE_ID

    par l'ID du projet suivi du nom de l'instance au format suivant : project_id:instance_name.

    resource.type="cloudsql_database"
    resource.labels.database_id="DATABASE_ID"
    logName : "projects/PROJECT_ID/logs/cloudsql.googleapis.com%2Fsqlserver.err"
    

    Par exemple, pour filtrer les journaux d'erreurs de mise à niveau selon une instance nommée shopping-db qui s'exécute dans le projet buylots, utilisez le filtre de requête suivant :

     resource.type="cloudsql_database"
     resource.labels.database_id="buylots:shopping-db"
     logName : "projects/buylots/logs/cloudsql.googleapis.com%2Fsqlserver.err"
    

Restaurer la version majeure précédente

Si votre système de base de données mis à niveau ne fonctionne pas comme prévu, vous devrez peut-être restaurer la version précédente de l'instance. Pour ce faire, vous devez restaurer votre sauvegarde préalable à la mise à niveau sur une instance de récupération Cloud SQL, qui est une nouvelle instance exécutant la version préliminaire.

Pour restaurer la version précédente, procédez comme suit :

  1. Identifiez votre sauvegarde préalable à la mise à niveau.

    Consultez la section Sauvegardes automatiques.

  2. Créez une instance de récupération.

    Créez une instance Cloud SQL à l'aide de la version majeure en cours d'exécution par Cloud SQL lors de la sauvegarde préalable. Définissez les options et les paramètres d'instance utilisés par l'instance d'origine.

  3. Restaurez votre sauvegarde préalable à la mise à niveau.

    Restaurez votre sauvegarde préalable à la mise à niveau sur l'instance de récupération. Cette opération peut prendre plusieurs minutes.

  4. Ajoutez vos instances dupliquées avec accès en lecture.

    Si vous utilisiez des instances dupliquées avec accès en lecture, ajoutez-les individuellement.

  5. Connectez votre application.

    Après avoir récupéré votre système de base de données, mettez à jour votre application avec les détails de l'instance de récupération et de ses instances dupliquées avec accès en lecture. Vous pouvez reprendre la diffusion du trafic sur la version antérieure à la mise à niveau de votre base de données.

Limites

Cette section répertorie les limites de la mise à niveau de version majeure sur place.

Questions fréquentes

Les questions suivantes peuvent vous être posées lors de la mise à niveau de la version majeure de la base de données.

Mon instance est-elle indisponible lors d'une mise à niveau ?
Oui. Votre instance reste indisponible pendant un certain temps pendant que Cloud SQL effectue la mise à niveau.
Combien de temps dure une mise à niveau ?

La mise à niveau d'une seule instance prend généralement moins de 10 minutes. Si la configuration de votre instance utilise un petit nombre de processeurs virtuels ou peu de mémoire, votre mise à niveau peut prendre plus de temps.

Si votre instance héberge trop de bases de données ou de tables, ou si vos bases de données sont très volumineuses, la mise à niveau peut prendre des heures, voire expirer, car la durée de mise à niveau correspond au nombre d'objets dans vos bases de données. Si vous devez mettre à niveau plusieurs instances, le temps total de mise à niveau augmente proportionnellement.

Puis-je surveiller chaque étape de mon processus de mise à niveau ?
Bien que Cloud SQL vous permet de vérifier si une opération de mise à niveau est toujours en cours, vous ne pouvez pas suivre les étapes de chaque mise à niveau.
Puis-je annuler ma mise à niveau après son lancement ?
Non, vous ne pouvez pas annuler une mise à niveau une fois celle-ci démarrée. En cas d'échec de la mise à niveau, Cloud SQL récupère automatiquement votre instance sur la version précédente.
Qu'advient-il de mes paramètres lors d'une mise à niveau ?

Lorsque vous effectuez une mise à niveau de version majeure sur place, Cloud SQL conserve vos paramètres de base de données, y compris le nom de l'instance, l'adresse IP, les valeurs des options configurées explicitement et les données utilisateur. Toutefois, la valeur par défaut des variables système peut changer.

Pour en savoir plus, consultez la section Configurer des options de base de données. Si une option ou une valeur spécifique n'est plus acceptée dans votre version cible, Cloud SQL le supprime automatiquement lors de la mise à niveau.

Étapes suivantes