Quels sont les problèmes courants pouvant survenir lors de l'utilisation de la sauvegarde et de la restauration natives dans RDS for SQL Server ?

Lecture de 11 minute(s)
0

J'effectue une sauvegarde ou une restauration native pour mon instance Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server. Quelles sont les erreurs courantes susceptibles de survenir au cours de ce processus ?

Solution

Lorsque vous utilisez l'option de sauvegarde et de restauration natives de RDS for SQL Server, vous pouvez rencontrer des erreurs de validation. Ces erreurs s'affichent immédiatement et aucune tâche n'est créée. Ci-dessous, vous trouverez plusieurs erreurs courantes ainsi que les méthodes recommandées pour y remédier :

Error: Aborted the task because of a task failure or a concurrent RESTORE_DB request (Erreur : la tâche a été abandonnée en raison d'un échec de tâche ou d'une requête RESTORE_DB simultanée)

Cette erreur se produit si vous rencontrez des problèmes liés à l'espace sur l'instance de base de données lors de la restauration de la sauvegarde depuis Amazon Elastic Compute Cloud (Amazon EC2) ou sur site :

[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.

Afin de corriger cette erreur, procédez comme suit :

Option 1 :

1.    Exécutez la commande suivante sur l'instance source (EC2 ou sur site). Cette commande vérifie la taille de la base de données, y compris le fichier de données et le fichier Tlog. Dans l'exemple suivant, remplacez [DB_NAME] par le nom de votre base de données.

SELECT DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name, (size*8)/1024/1024 SizeGB
FROM sys.master_files
WHERE DB_NAME(database_id) = '[DB_NAME]'
GO
Database Size = (DB_Name size + DB_Name_Log size)

2.    Comparez la taille de la base de données des instances sources avec le stockage disponible sur l'instance de base de données. Augmentez le stockage disponible en conséquence, puis restaurez la base de données.

Option 2 :

Réduisez la taille du fichier journal de base de données actuel sur le SQL Server source afin de libérer de l'espace inutilisé, puis effectuez la sauvegarde de la base de données.

Utilisez la commande suivante afin de réduire la taille du fichier journal.

DBCC SHRINKFILE (LogFileName, Desired Size in MB)

Error: Aborted the task because of a task failure or a concurrent RESTORE_DB request (Erreur : la tâche a été abandonnée en raison d'un échec de tâche ou d'une requête RESTORE_DB simultanée)

L'erreur suivante se produit lorsque vous rencontrez des problèmes d'autorisation liés au rôle ou à la politique AWS Identity and Access Management (IAM) associé à l'option SQLSERVER_BACKUP_RESTORE :

[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

Afin de corriger cette erreur, procédez comme suit :

1.    Vérifiez la requête de restauration afin de vous assurer que le compartiment S3 et le préfixe de dossier sont corrects :

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.    Vérifiez que la politique IAM inclut les attributs suivants :

{
  "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 : remplacez arn:aws:s3:::bucket_name par l'ARN de votre compartiment S3.

3.    Vérifiez que la politique est correctement associée au rôle indiqué dans l'option SQLSERVER_BACKUP_RESTORE.

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

ARN de compartiment S3
Préfixe de dossier S3 (facultatif)

Pour plus d'informations, veuillez consulter la section Quelle est la marche à suivre pour effectuer des sauvegardes natives d'une instance de base de données Amazon RDS exécutant SQL Server ?

Error: Aborted the task because of a task failure or a concurrent RESTORE_DB request (Erreur : la tâche a été abandonnée en raison d'un échec de tâche ou d'une requête RESTORE_DB simultanée)

Cette erreur est généralement associée à la restauration de bases de données intercomptes.

Exemple :

  • Le compte A possède un compartiment S3 dans lequel la sauvegarde est stockée.
  • Le compte B possède une instance de base de données RDS où la restauration doit être effectuée.

L'erreur se produit lorsque vous rencontrez des problèmes liés aux autorisations dans un rôle ou une politique IAM associé à l'option. Un problème d'autorisations lié à la politique de compartiment associée au compartiment S3 du compte A constitue une autre cause possible de ce problème.

[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.

Afin de corriger cette erreur, procédez comme suit :

1.    Vérifiez que la politique IAM du compte B (compte sur lequel se trouve l'instance de base de données sur laquelle vous voulez effectuer la restauration) inclut les attributs suivants :

{
  "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.    Vérifiez que la politique de compartiment associée au compartiment S3 du compte A inclut les attributs suivants :

{
  "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"   /*---- Change Details here
        ]
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
             ],
      "Resource": [
        "arn:aws:s3:::PUT-BUCKET-NAME"   /*---- Change Details here
      ]
    },
    {
      "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"   /*---- Change Details here
        ]
      },
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload"
      ],
      "Resource": [
        "arn:aws:s3::: PUT-BUCKET-NAME/*"  /*---- Change Details here
      ]
    }
  ]
}

Pour plus d'informations, veuillez consulter les sections suivantes :

Error: Cannot find server certificate with thumbprint 'XXXXXX' (Erreur : impossible de trouver le certificat de serveur avec l'empreinte numérique « XXXXXX »)

Cette erreur se produit lorsque vous essayez de restaurer une base de données à l'aide du chiffrement des données transparent Transparent Data Encryption (TDE) depuis EC2 ou sur site vers RDS for SQL Server :

[2022-06-1511:55:22.280] Cannot find server certificate with thumbprint 'XXXXXXX'.
[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.

Cette erreur indique une tentative de restauration d'une sauvegarde d'une base de données chiffrée à l'aide du TDE vers une instance SQL autre que son serveur d'origine. Le certificat TDE du serveur d'origine doit être importé sur le serveur de destination. Pour plus d'informations sur l'importation de certificats de serveur et sur les limites correspondantes, veuillez consulter la section Prise en charge de Transparent Data Encryption dans SQL Server.

Afin de résoudre cette erreur indépendamment de l'importation de certificats, procédez comme suit :

Deux solutions sont disponibles afin d'éviter cette erreur.

Option 1 : la sauvegarde de la base de données provient d'une instance sur site ou d'une instance EC2, mais le RDS SQL Server cible se trouve dans une Multi-AZ

1.    Créez une sauvegarde de la base de données source avec le TDE activé.

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

3.    Désactivez le TDE sur la base de données nouvellement créée. Utilisez les commandes suivantes afin de désactiver le TDE :

Exécutez la commande suivante afin de désactiver le chiffrement sur la base de données. Dans la commande suivante, remplacez Databasename par le nom correct de votre base de données.

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

Exécutez la commande suivante afin de supprimer la DEK (clé de chiffrement de base de données) utilisée pour le chiffrement. Dans la commande suivante, remplacez Databasename par le nom correct de votre base de données.

USE [Databasename];
GO
DROP DATABASE ENCRYPTION KEY;
GO

4.    Créez une sauvegarde SQL Server native et restaurez cette nouvelle sauvegarde sur l'instance RDS souhaitée. Pour plus d'informations, veuillez consulter la section Quelle est la marche à suivre pour effectuer des sauvegardes natives d'une instance de base de données Amazon RDS exécutant SQL Server ?

5.    Réactivez le TDE dans la nouvelle base de données RDS.

Option 2 : la base de données provient d'une base de données RDS for SQL Server chiffrée à l'aide du TDE

1.    Utilisez un instantané de l'instance source afin de restaurer la base de données dans une nouvelle instance.

2.    Désactivez le TDE sur la base de données créée à partir de l'instantané.

3.    Créez une sauvegarde SQL native et restaurez cette nouvelle sauvegarde sur l'instance RDS souhaitée.

4.    Réactivez le TDE dans la nouvelle base de données RDS.

Erreurs courantes observées lors de la sauvegarde native sur RDS for SQL Server

Error: Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup (Erreur : la tâche a été abandonnée en raison d'un échec de tâche ou d'un chevauchement avec votre fenêtre de sauvegarde privilégiée de la sauvegarde automatique RDS)

L'erreur suivante se produit lorsque vous rencontrez des problèmes d'autorisation liés au rôle ou à la politique IAM associé à l'option SQLSERVER_BACKUP_RESTORE.

[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

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

1.    Vérifiez la requête de restauration afin de vous assurer que le compartiment S3 et le préfixe de dossier sont corrects :

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.    Vérifiez que la politique IAM inclut les attributs suivants :

{
  "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 : remplacez arn:aws:s3:::bucket_name par l'ARN de votre compartiment S3.

3.    Vérifiez que la politique est correctement associée au rôle indiqué dans l'option SQLSERVER_BACKUP_RESTORE.

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

ARN de compartiment S3
Préfixe de dossier S3 (facultatif)

Pour plus d'informations, veuillez consulter la section Quelle est la marche à suivre pour effectuer des sauvegardes natives d'une instance de base de données Amazon RDS exécutant SQL Server ?

Error: Write on "XXX" failed, Unable to write chunks to S3, S3 write stream upload failed (Erreur : échec de l'écriture sur « XXX », impossible d'écrire des fragments dans S3, échec du téléchargement du flux d'écriture S3)

Il s'agit d'un problème commun avec RDS for SQL Server. L'échec de la procédure de sauvegarde avec l'erreur suivante est parfois causé par une estimation incorrecte de la taille de la base de données.

[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 "XXXX" 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

La solution à cette erreur consiste à activer la compression de sauvegarde de base de données. Ainsi, la sauvegarde est compressée, ce qui permet à S3 de recevoir le fichier plus facilement.

Exécutez la commande suivante afin d'activer la compression de sauvegarde :

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