Utiliser les sauvegardes Microsoft SQL Server pour effectuer une récupération à un moment précis sur Compute Engine

Last reviewed 2023-06-27 UTC

Dans ce tutoriel, vous allez effectuer des sauvegardes sur une instance SQL Server de Compute Engine. Vous allez apprendre à gérer ces sauvegardes et à les stocker dans Cloud Storage. Ce tutoriel explique également comment restaurer une base de données à un moment précis.

Ce tutoriel s'adresse aux administrateurs système, développeurs, ingénieurs, administrateurs de bases de données ou ingénieurs DevOps souhaitant sauvegarder des données SQL Server.

Pour ce tutoriel, nous partons du principe que vous connaissez bien les éléments suivants :

  • Microsoft Windows
  • Microsoft SQL Server
  • Sauvegardes complètes ou différentielles, et sauvegardes du journal des transactions SQL Server
  • Compute Engine
  • Cloud Storage

Objectifs

  • Lancer une instance SQL Server et créer une base de données.
  • Effectuer des sauvegardes complètes, des sauvegardes différentielles et des sauvegardes du journal des transactions.
  • Importer les sauvegardes dans Cloud Storage.
  • Restaurer la base de données à partir d'une sauvegarde Cloud Storage.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activez l'API Compute Engine

    Activer l'API

  5. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  7. Activez l'API Compute Engine

    Activer l'API

  8. Installez le client RDP (Remote Desktop Protocol) de votre choix Pour plus d'informations, voir les clients Bureau à distance de Microsoft. Si un client RDP est déjà installé, vous pouvez ignorer cette tâche.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Préparer l'instance SQL Server

Dans cette section, vous allez lancer l'instance SQL Server, préparer la base de données et configurer une clé de chiffrement.

Lancer l'instance SQL Server

Votre première tâche consiste à lancer une instance SQL Server et à créer le dossier de sauvegarde.

  1. Ouvrez Cloud Shell.

    Accéder à Cloud Shell

  2. Lancez une instance SQL Server :

    gcloud compute instances create sqlserver \
        --zone=us-central1-c \
        --machine-type=n1-standard-1 \
        --image-family=sql-std-2019-win-2019 \
        --image-project=windows-sql-cloud \
        --boot-disk-size=50GB \
        --boot-disk-type=pd-standard \
        --tags=sqlserver \
        --scopes=https://www.googleapis.com/auth/cloud-platform
    
  3. Accédez à la page Instances de VM dans la console Google Cloud et recherchez l'instance Windows à laquelle vous souhaitez vous connecter :

    ACCÉDER À LA PAGE INSTANCES DE VM

  4. Définissez le mot de passe initial de l'instance. Stockez ce mot de passe dans un endroit sûr.

  5. Dans la section Compute Engine de la console Google Cloud, cliquez sur le menu déroulant RDP et sélectionnez l'option Télécharger le fichier RDP. pour télécharger le fichier RDP correspondant à votre instance. Utilisez ce fichier pour vous connecter à l'instance à l'aide d'un client RDP. Pour plus d'informations, voir les clients Bureau à distance de Microsoft.

Installer SQL Server Management Studio

Installez Microsoft SQL Server Management Studio (SSMS) en procédant comme suit :

  1. Dans votre session RDP, réduisez toutes les fenêtres et démarrez l'application Windows PowerShell ISE.

  2. Lorsque l'invite PowerShell s'affiche, téléchargez et exécutez le programme d'installation de SSMS :

    Start-BitsTransfer `
        -Source "https://aka.ms/ssmsfullsetup" `
        -Destination "$env:Temp\ssms-setup.exe"
    & $env:Temp\ssms-setup.exe
    
  3. Acceptez l'invite pour autoriser les modifications.

  4. Dans le programme d'installation SSMS, cliquez sur Installer.

  5. Une fois l'installation terminée, cliquez sur Redémarrer pour redémarrer l'ordinateur distant. Cette action ferme la session RDP.

  6. Pour vous reconnecter, cliquez sur Se connecter dans la fenêtre RDP. Si le redémarrage de l'ordinateur distant n'est pas terminé, patientez quelques instants puis réessayez de vous connecter.

  7. Saisissez votre nom d'utilisateur et le mot de passe que vous avez enregistrés précédemment (laissez le champ Domaine vide), puis cliquez sur OK pour vous reconnecter.

Préparer les dossiers de sauvegarde et de restauration

  1. Dans la session RDP, réduisez toutes les fenêtres, puis ouvrez l'interface système du SDK Google Cloud (différente de Cloud Shell) sur le bureau Windows.

  2. Créez un dossier de sauvegarde :

    mkdir c:\backup
    
  3. Créez un dossier de restauration :

    mkdir c:\restore
    

Préparer la base de données

  1. Dans Cloud Shell, créez une base de données de test sur l'instance :

    osql -E -Q "create database testdb"
    
  2. Créez une table de test :

    osql -E -Q "create table testdb.dbo.testtable(status varchar(255))"
    

Configurer la clé de chiffrement

  1. Dans Cloud Shell, créez la clé primaire de la base de données :

    osql -E -Q "USE master;CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MyPassword!';"
    
  2. Créez un certificat de sauvegarde :

    osql -E -Q "USE master; CREATE CERTIFICATE testdbcert WITH SUBJECT = 'testdb certificate';"
    

Effectuer des sauvegardes

SQL Server 2019 et versions antérieures

Dans cette section, vous allez créer des sauvegardes complètes, des sauvegardes différentielles et des sauvegardes du journal des transactions tout en modifiant la base de données entre chacune de ces sauvegardes.

  1. Ajoutez une ligne à la table de test :

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('Initial')"
    
  2. Dans Cloud Shell, effectuez une sauvegarde complète :

    osql  -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak' WITH INIT,
        COMPRESSION,
        ENCRYPTION
        (
            ALGORITHM = AES_256,
            SERVER CERTIFICATE = testdbcert
        )  "
    
  3. Ajoutez une ligne à la table de test :

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('After Full Backup')"
    
  4. Effectuez une sauvegarde différentielle :

    osql  -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb-diff.bak' WITH DIFFERENTIAL,
    COMPRESSION,
    ENCRYPTION
        (
        ALGORITHM = AES_256,
        SERVER CERTIFICATE = testdbcert
        ) "
    
  5. Ajoutez une ligne à la table de test :

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('After Diff Backup')"
    
  6. Effectuez une sauvegarde du journal des transactions :

    osql  -E -Q "BACKUP LOG testdb TO DISK='c:\backup\testdb-log.bak' WITH COMPRESSION,
    ENCRYPTION
        (
        ALGORITHM = AES_256,
        SERVER CERTIFICATE = testdbcert
        ) "
    
  7. Ajoutez une ligne à la table de test :

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('Bad Row')"
    
  8. Vérifiez les lignes dans la table :

    osql -E -Q "select * from testdb.dbo.testtable"
    

    Le résultat se présente comme suit :

    Initial
    
    After Full Backup
    
    After Diff Backup
    
    Bad Row
    

SQL Server 2022

Dans cette section, vous allez créer des sauvegardes complètes, des sauvegardes différentielles et des sauvegardes du journal des transactions tout en modifiant la base de données entre chacune de ces sauvegardes. Vous utilisez les commandes intégrées de sauvegarde et restauration avec Cloud Storage.

SQL Server 2022 (16.x) permet l'intégration étendue de stockage d'objets en introduisant un nouveau connecteur qui utilise une API REST pour se connecter à n'importe quel fournisseur de stockage d'objets compatible S3. Vous pouvez utiliser les commandes BACKUP TO URL et RESTORE FROM URL dans SQL Server 2022 avec n'importe quelle destination de stockage compatible S3 comme URL.

SQL Server se connecte à des ressources extérieures à l'aide d'identifiants. Un identifiant est un enregistrement contenant des informations d'authentification. Pour authentifier et autoriser l'accès à l'interface Cloud Storage S3, vous devez créer et utiliser une clé d'accès et une clé secrète. Vous stockez ensuite ces clés dans votre identifiant SQL Server.

  1. Créez une clé d'accès et une clé secrète pour votre compte utilisateur sur votre bucket Cloud Storage :

    1. Accédez à Cloud Storage.
    2. Accéder à Paramètres.
    3. Accédez à INTEROPÉRABILITÉ.
    4. Consultez Clés d'accès pour votre compte utilisateur.
    5. Faites défiler la page, puis cliquez sur Créer une clé pour créer une clé d'accès et une clé secrète.
  2. Créez un identifiant dans votre instance SQL Server 2022 :

    Exécutez l'exemple de code suivant pour créer un identifiant. Choisissez un nom pour vos identifiants. Remplacez les champs ACCESS_KEY et SECRET par les valeurs générées à l'étape précédente.

    osql -E -Q "
        CREATE CREDENTIAL [CREDENTIAL_NAME]
        WITH
            IDENTITY = 'S3 Access Key',
            SECRET = 'ACCESS_KEY:SECRET'
        "
    
  3. Ajoutez une ligne à la table de test :

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('Initial')"
    
  4. Effectuez l'opération BACKUP sur le bucket Cloud Storage :

    Exécutez la commande de base de données de sauvegarde en définissant l'URI de votre bucket Cloud Storage comme valeur du paramètre URL et comme nom de l'identifiant que vous avez défini précédemment comme valeur de l'option WITH CREDENTIAL. Cette commande permet à SQL Server de créer le fichier de sauvegarde et de l'importer en même temps dans le bucket Cloud Storage, sans avoir besoin d'espace disque local supplémentaire.

    osql -E -Q "
        BACKUP DATABASE testdb
        TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/testdb.bak'
        WITH
            CREDENTIAL = 'CREDENTIAL_NAME',
            FORMAT,
            STATS = 10,
            MAXTRANSFERSIZE = 10485760,
            BLOCKSIZE = 65536,
            COMPRESSION;
        "
    

La liste suivante explique les paramètres de l'instruction WITH :

  • FORMAT : remplace les sauvegardes existantes et crée un ensemble multimédia.
  • STATS : indique à SQL Server de fournir des informations sur la progression de la sauvegarde.
  • COMPRESSION : indique à SQL Server de compresser le fichier de sauvegarde, ce qui réduit et accélère l'importation dans Cloud Storage.
  • Les options MAXTRANSFERSIZE = 10485760, BLOCKSIZE = 65536 permettent d'éviter les erreurs d'appareils d'E/S avec des fichiers de sauvegarde plus volumineux.
  1. Ajoutez une ligne à la table de test :

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('After Full Backup')"
    
  2. Effectuez une sauvegarde différentielle :

    osql -E -Q "
        BACKUP DATABASE testdb
        TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/testdb-diff.bak'
        WITH
            DIFFERENTIAL,
            CREDENTIAL = 'CREDENTIAL_NAME',
            STATS = 10,
            MAXTRANSFERSIZE = 10485760,
            BLOCKSIZE = 65536,
            COMPRESSION;
        "
    
  3. Ajoutez une ligne à la table de test :

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('After Diff Backup')"
    
  4. Effectuez une sauvegarde du journal des transactions :

    osql -E -Q "
        BACKUP LOG testdb
        TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/testdb-log.bak'
        WITH
            CREDENTIAL = 'CREDENTIAL_NAME',
            STATS = 10,
            MAXTRANSFERSIZE = 10485760,
            BLOCKSIZE = 65536,
            COMPRESSION;
        "
    
  5. Ajoutez une ligne à la table de test :

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('Bad Row')"
    
  6. Vérifiez les lignes dans la table :

    osql -E -Q "select * from testdb.dbo.testtable"
    

    Le résultat est semblable à ce qui suit :

    Initial
    
    After Full Backup
    
    After Diff Backup
    
    Bad Row
    

Gérer vos sauvegardes

Dans cette section, vous allez stocker vos sauvegardes à distance dans Cloud Storage, configurer votre bucket Cloud Storage pour limiter automatiquement les anciennes sauvegardes et en planifier de nouvelles. Si vous exécutez plusieurs serveurs de base de données, envisagez de créer plusieurs répertoires dans votre bucket Cloud Storage pour représenter chacun d'eux.

Importer vos sauvegardes dans Cloud Storage

SQL Server 2019 et versions antérieures

Maintenant que vous disposez de quelques fichiers de sauvegarde, vous pouvez importer vos sauvegardes dans Cloud Storage.

  1. Dans Cloud Shell, créez un bucket Cloud Storage. Les noms de bucket doivent être uniques sur l'ensemble de Google Cloud. Pour être sûr d'attribuer un nom unique à votre bucket, envisagez d'utiliser le nom de votre projet en tant qu'espace de noms, comme indiqué ci-dessous :

    gsutil mb "gs://${DEVSHELL_PROJECT_ID}-sql-backups"
    
  2. Dans la fenêtre de l'interface système de la session RDP, copiez vos fichiers dans votre bucket Cloud Storage. Dans la commande suivante, remplacez BUCKET_NAME par le nom du bucket que vous venez de créer.

    gsutil cp -n c:\backup\testdb*.bak gs://BUCKET_NAME
    

    Vous pouvez utiliser la commande gsutil cp pour créer des structures de répertoires complètes et importer simultanément plusieurs fichiers.

SQL Server 2022

Les fichiers de sauvegarde se trouvent déjà sur votre bucket, car SQL Server 2022 accepte la sauvegarde directement dans Cloud Storage.

Configurer le nettoyage automatique des fichiers dans Cloud Storage

Les sauvegardes plus anciennes finissent par perdre leur utilité et doivent être supprimées. Pour vous aider à automatiser ce processus, Cloud Storage dispose d'un mécanisme qui vous permet de gérer le cycle de vie de vos fichiers de sauvegarde.

Pour configurer la gestion du cycle de vie des objets de votre bucket, procédez comme suit :

  1. Dans Cloud Shell, créez un fichier de configuration du cycle de vie au format JSON. Ce fichier indique à Cloud Storage de supprimer les fichiers après 30 jours :

    bash -c 'cat <<EOF >  lifecycle.json
    {
        "lifecycle": {
            "rule": [{
                "action": { "type": "Delete" },
                "condition": { "age": 30 }
            }]
        }
    }
    EOF'
    
  2. Définissez la configuration du cycle de vie du bucket Cloud Storage. Remplacez BUCKET_NAME par le nom de votre bucket :

    gsutil lifecycle set lifecycle.json gs://BUCKET_NAME
    

Planifier vos sauvegardes

En règle générale, il est recommandé d'effectuer une sauvegarde complète régulièrement et d'effectuer des sauvegardes différentielles entre chacune de ces sauvegardes. Sous Windows, l'une des méthodes de planification des sauvegardes consiste à utiliser des tâches planifiées.

Si vous créez un script de sauvegarde comprenant une série de sauvegardes, veillez à inclure des étapes de validation logiques à chaque stade pour en vérifier la réussite. Si la validation échoue, assurez-vous que le script renvoie une alerte Windows. En outre, le script doit supprimer le fichier de sauvegarde local après l'importation dans Cloud Storage afin d'éviter de remplir le disque local.

Effectuer une restauration à partir de la sauvegarde

Dans cette section, vous allez restaurer votre base de données SQL Server à partir des fichiers de sauvegarde que vous avez stockés dans Cloud Storage.

SQL Server 2019 et versions antérieures

  1. Dans Cloud Shell de votre session RDP, téléchargez vos fichiers de sauvegarde depuis Cloud Storage. Remplacez BUCKET_NAME par le nom de votre bucket de stockage de sauvegarde SQL Server :

    gsutil cp gs://BUCKET_NAME/testdb*.bak c:\restore
    
  2. Ouvrez la console SQL Server Management.

  3. Cliquez sur le bouton Démarrer, puis sur Outils Microsoft SQL Server 18 > Microsoft SQL Server Management Studio 18.

  4. Ne modifiez pas les champs Connexion, puis cliquez sur Se connecter.

  1. Dans le volet de gauche, développez la section Bases de données.
  2. Cliquez avec le bouton droit sur testdb, puis dans le menu contextuel, cliquez sur Tâches > Restaurer > Base de données.
  3. Importez les fichiers de sauvegarde dans la console :
    1. Dans le champ Source, sélectionnez Appareil.
    2. Cliquez sur le bouton (Publier).
    3. Dans la boîte de dialogue qui s'ouvre, cliquez sur Ajouter, sélectionnez tous les fichiers sous C:\restore, puis cliquez sur OK.
    4. Cliquez sur OK.
  4. Pour afficher les options de restauration à un moment précis :

    1. Cliquez sur Chronologie.
    2. Sous Restauration vers, cliquez sur Date et heure précises.
    3. Pour Intervalle de temps, sélectionnez heure.
    4. Choisissez une heure dans la plage Sauvegarde du journal des transactions.
    5. Cliquez sur Annuler pour quitter l'écran de chronologie.

  5. Dans ce tutoriel, vous restaurez la base de données à son état avant la sauvegarde du journal des transactions. Pour ce faire, effacez la ligne du journal des transactions dans la liste des sauvegardes :

    Effacer la ligne du journal des transactions dans la liste des sauvegardes

  6. Démarrez le processus de restauration :

    1. Cliquez sur OK.
    2. Attendez que la base de données ait terminé le processus de restauration. Lorsque le message Database 'testdb' restored successfully s'affiche, cliquez sur OK.
  7. Répertoriez les lignes dans la table de test :

    osql -E -Q "select * from testdb.dbo.testtable;"
    

    Le résultat indique deux lignes :

    "Initial
    "After Full Backup"
    

    Toutes les lignes que vous avez insérées dans la table avant d'avoir effectué la sauvegarde du journal des transactions s'affichent.

SQL Server 2022

Vous pouvez effectuer l'opération RESTORE. Définissez le chemin d'accès au fichier Cloud Storage en tant que valeur du paramètre URL. Par exemple, ce script T-SQL restaure la sauvegarde complète directement à partir de Cloud Storage :

```
osql -E -Q "
RESTORE DATABASE testdb
FROM
    URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/testdb.bak'
WITH
    CREDENTIAL = 'CREDENTIAL_NAME';
    "
```
  1. Ouvrez la console SQL Server Management.
  2. Cliquez sur le bouton Démarrer, puis sur Outils Microsoft SQL Server 19 > Microsoft SQL Server Management Studio 19.
  1. Ne modifiez pas les champs Connexion, puis cliquez sur Se connecter.
  1. Dans le volet de gauche, développez la section Bases de données.
  2. Cliquez avec le bouton droit sur testdb, puis dans le menu contextuel, cliquez sur Tâches > Restaurer > Base de données.
  3. Importez les fichiers de sauvegarde dans la console :

    1. Dans le champ Source, sélectionnez Appareil.
    2. Cliquez sur le bouton (Publier).
    3. Dans la boîte de dialogue qui s'ouvre, cliquez sur Type de support de sauvegarde, puis sélectionnez URL S3.
    4. Dans la boîte de dialogue qui s'ouvre, cliquez sur Ajouter. Ajoutez les trois emplacements de vos fichiers de sauvegarde dans le bucket Cloud Storage, ainsi que la clé secrète et la clé d'accès que vous avez fournies lors de la création des identifiants.

    5. Cliquez sur OK.

  4. Pour afficher les options de restauration à un moment précis :

    1. Cliquez sur Chronologie.
    2. Sous Restauration vers, cliquez sur Date et heure précises.
    3. Pour Intervalle de temps, sélectionnez heure.
    4. Choisissez une heure dans la plage Sauvegarde du journal des transactions.
    5. Cliquez sur Annuler pour quitter l'écran de chronologie.

  5. Dans ce tutoriel, vous restaurez la base de données à son état avant la sauvegarde du journal des transactions. Pour ce faire, effacez la ligne du journal des transactions dans la liste des sauvegardes :

    Effacer la ligne du journal des transactions dans la liste des sauvegardes

  6. Démarrez le processus de restauration :

    1. Cliquez sur OK.
    2. Attendez que la base de données ait terminé le processus de restauration. Lorsque le message Database 'testdb' restored successfully s'affiche, cliquez sur OK.
  7. Répertoriez les lignes dans la table de test :

    osql -E -Q "select * from testdb.dbo.testtable;"
    

    Le résultat indique deux lignes :

    "Initial
    "After Full Backup"
    

    Toutes les lignes que vous avez insérées dans la table avant d'avoir effectué la sauvegarde du journal des transactions s'affichent.

Nettoyer

Supprimer le projet

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étape suivante