Passer au contenu

Comment résoudre les erreurs lorsque j'utilise la sauvegarde et la restauration natives pour mon instance de base de données Amazon RDS pour SQL Server ?

Lecture de 13 minute(s)
0

Je souhaite résoudre les erreurs qui se produisent lorsque je sauvegarde et restaure mon instance de base de données Amazon Relational Database Service (Amazon RDS) pour Microsoft SQL Server.

Brève description

Pour résoudre les erreurs qui se produisent lorsque vous utilisez la sauvegarde et la restauration natives pour l'instance de base de données Amazon RDS pour SQL Server, procédez comme suit :

  • Augmentez l'espace sur l'instance de base de données.
  • Accordez des autorisations d'accès au rôle AWS Identity and Access Management (IAM) pour l'option SQLSERVER_BACKUP_RESTORE.
  • Accordez les autorisations AWS Key Management Service (AWS KMS) au rôle IAM pour le groupe d'options.
  • Accordez des autorisations à la politique IAM ou à la stratégie de compartiment pour les sauvegardes inter-comptes.
  • Importez le certificat TDE (Transparent Data Encryption, Chiffrement des données transparent).
  • Spécifiez les lettres de lecteur Windows correctes.
  • Définissez MAXTRANSFERSIZE du fichier de sauvegarde sur une valeur supérieure à celle que vous avez utilisée lors de la restauration.
  • Réduisez la taille du fichier de sauvegarde pour le transférer vers Amazon Simple Storage Service (Amazon S3).

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez alors Résolution des erreurs liées à AWS CLI. Vérifiez également que vous utilisez la version la plus récente d'AWS CLI.

Augmentation de l'espace sur l'instance de base de données

Il se peut que votre instance de base de données ne dispose pas d'un espace suffisant lorsque vous restaurez la sauvegarde à partir d'une instance Amazon Elastic Compute Cloud (Amazon EC2) ou sur site. Amazon RDS arrête alors la tâche.

Exemple de sortie de journal :

[2022-04-07 05:21:22.317] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2022-04-07 05:21:22.437] Task has been aborted  
[2022-04-07 05:21:22.440] There is not enough space on the disk to perform restore database operation.

Pour résoudre ce problème, vous pouvez augmenter le stockage disponible sur l'instance de base de données. Vous pouvez également réduire la taille du journal des transactions sur l'instance de base de données.

Augmentation du stockage disponible

Procédez comme suit :

  1. Exécutez la requête suivante sur l'instance EC2 ou sur site pour vérifier la taille du fichier de données de base de données et fichier du journal des transactions :
    SELECT DB_NAME(database_id) AS DatabaseName,  
           Name AS Logical_Name,  
           Physical_Name,  
           (size*8)/1024/1024 AS SizeGB  
      FROM sys.master_files  
     WHERE DB_NAME(database_id) = 'DB_NAME'  
        GO  
           Database Size = (DB_Name size + DB_Name_Log size)
    Remarque : Remplacez DB_NAME par le nom de la base de données.
  2. Comparez la taille de la base de données d'instance EC2 ou sur site avec le stockage disponible sur l'instance de base de données.
  3. Augmentez le stockage disponible sur l'instance de base de données, puis restaurez la base de données.

Réduction de la taille du fichier du journal des transactions

Procédez comme suit :

  1. Pour réduire la taille actuelle du fichier du journal des transactions sur l'instance EC2 ou sur site, exécutez la commande suivante :
    DBCC SHRINKFILE (FileName, FileSizeMB)
    **Remarque :**Remplacez FileName par le nom des données ou du fichier du journal de transactions et FileSizeMB par la taille du fichier cible en mégaoctets.
  2. Sauvegardez la base de données.

Octroi d'autorisations d'accès au rôle IAM pour l'option SQLSERVER_BACKUP_RESTORE

Si vous ne disposez pas d'autorisations suffisantes pour le rôle IAM qui est associé à l'option SQLSERVER_BACKUP_RESTORE, Amazon RDS arrête alors la tâche.

Exemple de sortie de journal :

[2020-12-15 08:56:22.143] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2020-12-15 08:56:22.213] Task has been aborted  
[2020-12-15 08:56:22.217] Access Denied

-ou-

[2022-07-16 16:08:22.067] Task execution has started.   
[2022-07-16 16:08:22.143] Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup.  
[2022-07-16 16:08:22.147] Task has been aborted  
[2022-07-16 16:08:22.150] Access Denied

Pour résoudre ce problème, procédez comme suit :

  1. Exécutez la commande suivante pour vérifier que le compartiment S3 et le préfixe du dossier sont corrects dans la requête de restauration :

    exec msdb.dbo.rds_restore_database  
          @restore_db_name='database_name',  
          @s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name_and_extension';
  2. Ajoutez la déclaration suivante à la politique d'autorisations IAM :

    {  
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Effect": "Allow",  
          "Action": [  
            "s3:ListBucket",  
            "s3:GetBucketLocation"  
          ],  
          "Resource": "arn:aws:s3:::bucket_name"  
        },  
        {  
          "Effect": "Allow",  
          "Action": [  
            "s3:GetObjectAttributes",  
            "s3:GetObject",  
            "s3:PutObject",  
            "s3:ListMultipartUploadParts",  
            "s3:AbortMultipartUpload"  
          ],  
          "Resource": "arn:aws:s3:::bucket_name/*"  
        }  
      ]  
    }

    **Remarque :**Dans la politique précédente, remplacez arn:aws:s3:::bucket_name par l'Amazon Resource Name (ARN) du compartiment S3.

  3. Ajoutez la politique au rôle qui est associé à l'option SQLSERVER_BACKUP_RESTORE.

  4. Vérifiez que l'option SQLSERVER_BACKUP_RESTORE figure dans le groupe d'options qui est associé à l'instance de base de données.

Pour de plus amples informations, consultez Comment effectuer une sauvegarde native de la base de données SQL Server sur Amazon RDS et la restaurer depuis Amazon S3 ?

Octroi d'autorisations AWS KMS au rôle IAM pour le groupe d'options

La sauvegarde et la restauration natives de RDS pour SQL Server peuvent chiffrer et déchiffrer le fichier de sauvegarde côté client. Si la politique du rôle IAM qui est associé au groupe d'options ne dispose pas d'autorisations pour la clé KMS, la sauvegarde ou la restauration échoue.

Exemple de sortie de journal :

 [2025-12-12 01:34:22.217] Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup.   
 [2025-12-12 01:34:22.223] Task has been aborted   
 [2025-12-12 01:34:22.230] User: arn:aws:sts::0123456789:assumed-role/<your_role_name>/RDS-SqlServerBackupRestore is not authorized to perform: kms:DescribeKey on resource: arn:aws:kms:ap-northeast-1:0123456789:key/<your_kms_key_id> because no identity-based policy allows the kms:DescribeKey action

Pour résoudre ce problème, ajoutez l'instruction suivante à la politique IAM qui est associée au groupe d'options.

{  
  "Version":"2012-10-17",                  
  "Statement": [  
    {  
      "Sid": "AllowAccessToKey",  
      "Effect": "Allow",  
      "Action": [  
        "kms:DescribeKey",  
        "kms:GenerateDataKey",  
        "kms:Encrypt",  
        "kms:Decrypt"  
      ],  
      "Resource": "arn:aws:kms:us-east-1:0123456789:key/key-id"  
    },  
    {  
      "Sid": "AllowAccessToS3",  
      "Effect": "Allow",  
      "Action": [  
        "s3:ListBucket",  
        "s3:GetBucketLocation"  
      ],  
      "Resource": "arn:aws:s3:::PUT-BUCKET-NAME"  
    },  
    {  
      "Sid": "GetS3Info",  
      "Effect": "Allow",  
      "Action": [  
        "s3:GetObjectAttributes",  
        "s3:GetObject",  
        "s3:PutObject",  
        "s3:ListMultipartUploadParts",  
        "s3:AbortMultipartUpload"  
      ],  
      "Resource": "arn:aws:s3:::PUT-BUCKET-NAME/*"  
    }  
  ]  
}

Octroi d'autorisations à la politique IAM ou à la stratégie de compartiment pour les sauvegardes inter-comptes

Lorsque vous restaurez une sauvegarde de base de données depuis un compte AWS vers un autre compte, Amazon RDS peut arrêter la tâche en raison d'autorisations insuffisantes. Par exemple, vous stockez la sauvegarde dans un compartiment S3 du compte A et vous la restaurez sur une instance de base de données Amazon RDS du compte B.

La politique du rôle IAM qui est associé au groupe d'options ou la stratégie de compartiment qui est associée au compartiment S3 ne dispose pas d'autorisations.

Exemple de sortie de journal :

[2022-02-03 15:57:22.180] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2022-02-03 15:57:22.260] Task has been aborted  
[2022-02-03 15:57:22.263] Error making request with Error Code Forbidden and Http Status Code Forbidden. No further error information was returned by the service.

Pour résoudre ce problème, procédez comme suit :

  1. Ajoutez l'instruction suivante à la politique IAM qui est associée au groupe d'options du compte B :

    {  
      "Version": "2012-10-17",  
      "Statement":  
        [  
          {  
            "Effect": "Allow",  
            "Action":  
              [  
                "s3:ListBucket",  
                "s3:GetBucketLocation"  
              ],  
            "Resource": "arn:aws:s3:::name_of_bucket_present_in_Account_A"  
          },  
          {  
            "Effect": "Allow",  
            "Action":  
              [  
                "s3:GetObject",  
                "s3:PutObject",  
                "s3:ListMultipartUploadParts",  
                "s3:AbortMultipartUpload"  
              ],  
            "Resource": "arn:aws:s3:::name_of_bucket_present_in_Account_A/*"  
          },  
          {  
            "Action": [  
              "kms:DescribeKey",  
              "kms:GenerateDataKey",  
              "kms:Decrypt",  
              "kms:Encrypt"  
              "kms:ReEncryptTo",  
              "kms:ReEncryptFrom"  
            ],  
            "Effect": "Allow",  
            "Resource": [  
              "arn:aws: PUT THE NAME OF THE KEY HERE",  
              "arn:aws:s3:::name_of_bucket_present_in_Account_A/*"  
            ]  
          }  
        ]  
    }
  2. Ajoutez l'instruction suivante à la stratégie de compartiment qui est associée au compartiment S3 du compte A :

    {  
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Sid": "Permission to cross account",  
          "Effect": "Allow",  
          "Principal": {  
            "AWS": [  
              "arn:aws:iam::AWS-ACCOUNT-ID-OF-RDS:role/service-role/PUT-ROLE-NAME"  
            ]  
          },  
          "Action": [  
            "s3:ListBucket",  
            "s3:GetBucketLocation"  
                 ],  
          "Resource": [  
            "arn:aws:s3:::PUT-BUCKET-NAME"  
          ]  
        },  
        {  
          "Sid": "Permission to cross account on object level",  
          "Effect": "Allow",  
          "Principal": {  
            "AWS": [  
              "arn:aws:iam::AWS-ACCOUNT-ID-OF-RDS:role/service-role/PUT-ROLE-NAME"  
            ]  
          },  
          "Action": [  
            "s3:GetObject",  
            "s3:PutObject",  
            "s3:ListMultipartUploadParts",  
            "s3:AbortMultipartUpload"  
          ],  
          "Resource": [  
            "arn:aws:s3:::PUT-BUCKET-NAME/*"  
          ]  
        }  
      ]  
    }

Pour plus d'informations, consultez Importation et exportation de bases de données SQL Server à l'aide de la sauvegarde et de la restauration natives et Propriétaire du compartiment octroyant une autorisation inter-comptes à des objets dont il n'est pas le propriétaire.

Importation du certificat TDE

Lorsque vous restaurez une sauvegarde d'une base de données, mais que vous n'avez pas importé le certificat TDE sur le serveur de destination, la tâche s'arrête. Par exemple, vous essayez de restaurer une base de données avec TDE à partir d'une instance EC2 ou sur site vers une instance de base de données RDS pour SQL Server.

Exemple de sortie de journal :

[2022-06-15 11:55:22.280] Cannot find server certificate with thumbprint '########'.  
[2022-06-15 11:55:22.280] RESTORE FILELIST is terminating abnormally.  
[2022-06-15 11:55:22.300] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2022-06-15 11:55:22.333] Task has been aborted  
[2022-06-15 11:55:22.337] Empty restore file list result retrieved.

Pour résoudre ce problème, importez le certificat TDE sur le serveur de destination.

Pour éviter ce problème, utilisez l'une des solutions suivantes.

Vous sauvegardez la base de données à partir d'une instance sur site ou EC2, mais le RDS pour SQL Server cible se trouve dans plusieurs zones de disponibilité

Procédez comme suit :

  1. Créez une sauvegarde de la base de données EC2 ou sur site avec TDE activé.

  2. Restaurez la sauvegarde en tant que nouvelle base de données sur votre serveur sur site.

  3. Exécutez la commande suivante pour désactiver le chiffrement sur la nouvelle base de données :

    USE master;  
    GO  
    ALTER DATABASE Databasename SET ENCRYPTION OFF;  
    GO

    Remarque : Remplacez Databasename par le nom de votre base de données.

  4. Exécutez la commande suivante pour supprimer la DEK (Database Encryption Key, Clé de chiffrement de base de données) sur la nouvelle base de données :

    USE Databasename;  
    GO  
    DROP DATABASE ENCRYPTION KEY;  
    GO

    Remarque : Remplacez Databasename par le nom de votre base de données.

  5. Effectuez une sauvegarde native de SQL Server, puis restaurez la sauvegarde sur l'instance de base de données.

  6. Activez TDE pour la nouvelle instance de base de données.

Vous sauvegardez l'instance de base de données à partir d'une instance de base de données RDS pour SQL Server qui est chiffrée avec TDE

Procédez comme suit :

  1. Utilisez un instantané de base de données à partir de l'instance RDS pour SQL Server pour effectuer une restauration vers une nouvelle instance de base de données.
    **Remarque :**Si vous modifiez l'édition de l'instance de base de données, consultez alors Considérations relatives à Microsoft SQL Server.
  2. Désactivez TDE pour la nouvelle instance de base de données.
  3. Effectuez une sauvegarde SQL native, puis restaurez la sauvegarde sur l'instance de base de données.
  4. Activez TDE pour la nouvelle instance de base de données.

Spécification des lettres de lecteur Windows correctes

RDS pour SQL Server peut restaurer une base de données sur des volumes de stockage supplémentaires. Lorsque vous spécifiez une lettre de lecteur Windows incorrecte pour un volume de stockage, l'opération de restauration échoue.

Exemple de requête et de message d'erreur :

-- Native restore query  
EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak',  
    @data_file_volume='Y:', -- incorrect drive letter.  
    @log_file_volume='Z:';  -- incorrect drive letter.  
-- Error message  
Message 50000、Level 16、State 1、Procedure msdb.dbo.rds_restore_database、Line 122  
Volume for data files is unavailable. Choose from available volumes.

Pour résoudre ce problème, vérifiez les lettres de lecteur Windows. Procédez comme suit :

  1. Répertoriez les volumes de stockage supplémentaires attachés sur votre instance de base de données à l'aide de la commande describe-db-instances :

    aws rds describe-db-instances \  
      --db-instance-identifier your-db-instance-id \  
      --query 'DBInstances[].AdditionalStorageVolumes[].VolumeName' \  
      --output text

    Remarque : Remplacez **your-db-instance-id ** par l'identifiant de l'instance de base de données.
    Remarque : Si vous ne parvenez pas à obtenir le nom du volume, vous devez mettre à jour AWS CLI vers la dernière version.

    Pour plus d'informations sur les volumes de stockage, consultez Considérations relatives à l'utilisation de volumes de stockage supplémentaires avec RDS pour SQL Server.

  2. Corrigez votre requête pour spécifier les lettres de lecteur Windows correctes pour @data_file_volume et @log_file_volume.

Définition de MAXTRANSFERSIZE du fichier de sauvegarde sur une valeur supérieure à celle que vous avez utilisée lors de la restauration

Une erreur MAXTRANSFERSIZE se produit lorsque la sauvegarde contient des groupes de fichiers FILESTREAM ou OLTP en mémoire et que vous avez utilisé une erreur MAXTRANSFERSIZE incorrecte lors de la restauration.

Remarque : RDS pour SQL Server ne prend pas en charge la fonctionnalité FILESTREAM.

Si vous spécifiez explicitement MAXTRANSFERSIZE, vous risquez de rencontrer une erreur : « RESTORE requires MAXTRANSFERSIZE=<required_size> but <your_specified_size> was specified. »

Exemple de requête et de sortie de journal :

-- query  
EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak',  
    @max_transfer_size=65536 -- specified MAXTRANSFERSIZE explicitly  

-- error message  
 [2025-12-11 07:26:22.320] Task execution has started.   
 [2025-12-11 07:26:22.520] RESTORE requires MAXTRANSFERSIZE=4194304 but 65536 was specified.  RESTORE DATABASE is terminating abnormally.

Pour résoudre ce problème, ne spécifiez pas MAXTRANSFERSIZE :

EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak'  

Vous pouvez également spécifier une valeur égale ou supérieure à la taille indiquée dans le message d'erreur :

EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak',  
    @max_transfer_size=4194304

Réduction de la taille du fichier de sauvegarde pour le transférer vers Amazon S3

Ce problème se produit lorsque vous déplacez un objet dont la taille est supérieure à la taille d'objet maximale pour une opération Amazon S3 en plusieurs parties. Amazon S3 divise l'objet le plus volumineux en plusieurs parties qui dépassent le nombre maximal de parties pour chaque chargement.

Exemple de sortie de journal :

[2022-04-21 16:45:04.597] reviews_consumer/reviews_consumer_PostUpdate_042122.bak: Completed processing 100% of S3 chunks.  
[2022-04-21 16:47:05.427] Write on "####" failed: 995(The I/O operation has been aborted because of either a thread exit or an application request.) A nonrecoverable I/O error occurred on file "XXXX:" 995(The I/O operation has been aborted because of either a thread exit or an application request.). BACKUP DATABASE is terminating abnormally.  
[2022-04-21 16:47:22.033] Unable to write chunks to S3 as S3 processing has been aborted.  
[2022-04-21 16:47:22.040] reviews_consumer/reviews_consumer_PostUpdate_042122.bak: Aborting S3 upload, waiting for S3 workers to clean up and exit  
[2022-04-21 16:47:22.053] Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup.  
[2022-04-21 16:47:22.060] reviews_consumer/reviews_consumer_PostUpdate_042122.bak: Aborting S3 upload, waiting for S3 workers to clean up and exit  
[2022-04-21 16:47:22.067] S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive

Pour résoudre ce problème, activez la compression de sauvegarde de base de données afin de réduire la taille de la sauvegarde pour qu'Amazon S3 puisse recevoir le fichier.

Pour activer la compression de sauvegarde, exécutez la commande suivante :

exec rdsadmin..rds_set_configuration 'S3 backup compression', 'true';