Direkt zum Inhalt

Wie behebe ich Fehler bei der Verwendung des nativen Backups und der nativen Wiederherstellung für meine DB-Instance in Amazon RDS für SQL Server?

Lesedauer: 12 Minute
0

Ich möchte Fehler beheben, die auftreten, wenn ich meine DB-Instance in Amazon Relational Database Service (Amazon RDS) für Microsoft SQL Server sichere und wiederherstelle.

Kurzbeschreibung

Um Fehler zu beheben, die bei der Verwendung von nativem Backup und nativer Wiederherstellung für deine DB-Instance in Amazon RDS für SQL Server auftreten, versuche Folgendes:

  • Erhöhe den Speicherplatz auf der DB-Instance.
  • Erteile der AWS Identity and Access Management (IAM)-Rolle Zugriffsberechtigungen für die Option SQLSERVER_BACKUP_RESTORE.
  • Erteile der IAM-Rolle für die Optionsgruppe Berechtigungen für den AWS Key Management Service (AWS KMS).
  • Erteile der IAM-Richtlinie oder Bucket-Richtlinie Berechtigungen für kontoübergreifende Backups.
  • Importiere das Transparent Data Encryption (TDE)-Zertifikat.
  • Gib die korrekten Windows-Laufwerksbuchstaben an.
  • Setze den Paramter MAXTRANSFERSIZE der Backup-Datei auf einen Wert, der größer ist als der Wert, den du bei der Wiederherstellung verwendet hast.
  • Reduziere die Größe der Backup-Datei, um die Datei in den Amazon Simple Storage Service (Amazon S3) zu übertragen.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Fehlerbehebung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Den Speicherplatz auf der DB-Instance erhöhen

Deine DB-Instance verfügt möglicherweise über unzureichenden Speicherplatz, wenn du das Backup von einer Amazon Elastic Compute Cloud (Amazon EC2)- oder On-Premises-Instance wiederherstellst. Amazon RDS bricht die Aufgabe dann ab.

Beispiel für eine Protokollausgabe:

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

Um dieses Problem zu beheben, kannst du den verfügbaren Speicher auf der DB-Instance erhöhen. Oder reduziere die Größe der Transaktionsprotokolldatei auf der DB-Instance.

Verfügbaren Speicher erhöhen

Führe die folgenden Schritte aus:

  1. Führe die folgende Abfrage auf der EC2- oder On-Premises-Instance aus, um die Größe der Datenbank-Datendatei und der Transaktionsprotokolldatei zu überprüfen:
    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)
    Hinweis: Ersetze DB_NAME durch den Namen deiner Datenbank.
  2. Vergleiche die Datenbankgröße der EC2- oder On-Premises-Instance mit dem verfügbaren Speicher auf der DB-Instance.
  3. Erhöhe den verfügbaren Speicher auf der DB-Instance und stelle die Datenbank dann wieder her.

Größe der Transaktionsprotokolldatei reduzieren

Führe die folgenden Schritte aus:

  1. Führe den folgenden Befehl aus, um die aktuelle Größe der Transaktionsprotokolldatei auf der EC2- oder On-Premises-Instance zu reduzieren:
    DBCC SHRINKFILE (FileName, FileSizeMB)
    Hinweis: Ersetze FileName durch den Namen deiner Daten- oder Transaktionsprotokolldatei und FileSizeMB durch die Zieldateigröße in Megabyte.
  2. Erstelle ein Backup der Datenbank.

Erteile der IAM-Rolle Zugriffsberechtigungen für die Option SQLSERVER_BACKUP_RESTORE

Wenn du nicht über ausreichende Berechtigungen für die IAM-Rolle verfügst, die mit der Option SQLSERVER_BACKUP_RESTORE verknüpft ist, bricht Amazon RDS die Aufgabe ab.

Beispiel für eine Protokollausgabe:

[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

-oder-

[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

Gehe wie folgt vor, um dieses Problem zu beheben:

  1. Führe den folgenden Befehl aus, um zu überprüfen, ob der S3-Bucket und das Ordnerpräfix in der Wiederherstellungsabfrage korrekt sind:

    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. Füge der IAM-Berechtigungsrichtlinie die folgende Anweisung hinzu:

    {  
      "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/*"  
        }  
      ]  
    }

    Hinweis: Ersetze in der vorherigen Richtlinie arn:aws:s3:::bucket_name durch den Amazon-Ressourcennamen (ARN) deines S3-Buckets.

  3. Füge die Richtlinie der Rolle hinzu, die mit der Option SQLSERVER_BACKUP_RESTORE verknüpft ist.

  4. Vergewissere dich, dass die Option SQLSERVER_BACKUP_RESTORE in der Optionsgruppe enthalten ist, die der DB-Instance zugeordnet ist. 

Weitere Informationen findest du unter Wie führe ich ein natives Backup meiner SQL-Server-Datenbank auf Amazon RDS durch und stelle sie von Amazon S3 wieder her?

Erteile der IAM-Rolle für die Optionsgruppe AWS KMS-Berechtigungen

Mit dem nativen Backup und der nativen Wiederherstellung von RDS für SQL Server kann die Backup-Datei clientseitig verschlüsselt und entschlüsselt werden. Wenn die Richtlinie für die IAM-Rolle, die mit der Optionsgruppe verknüpft ist, keine Berechtigungen für den KMS-Schlüssel hat, schlägt das Backup oder die Wiederherstellung fehl.

Beispiel für eine Protokollausgabe:

 [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

Um dieses Problem zu beheben, füge der IAM-Richtlinie, die der Optionsgruppe zugeordnet ist, die folgende Anweisung hinzu.

{  
  "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/*"  
    }  
  ]  
}

Erteile in der IAM-Richtlinie oder Bucket-Richtlinie Berechtigungen für kontoübergreifende Backups

Wenn du ein Datenbank-Backup von einem AWS-Konto in ein anderes Konto wiederherstellst, bricht Amazon RDS die Aufgabe möglicherweise aufgrund unzureichender Berechtigungen ab. Du speicherst beispielsweise das Backup in einem S3-Bucket in Konto A und stellst es in einer Amazon RDS-DB-Instance in Konto B wieder her.

Es fehlen entweder Berechtigungen in der Richtlinie für die IAM-Rolle, die der Optionsgruppe zugeordnet ist, oder in der Bucket-Richtlinie des S3-Buckets.

Beispiel für eine Protokollausgabe:

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

Gehe wie folgt vor, um dieses Problem zu beheben:

  1. Füge der IAM-Richtlinie, die mit der Optionsgruppe in Konto B verknüpft ist, die folgende Anweisung hinzu:

    {  
      "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. Füge der Bucket-Richtlinie, die mit dem S3-Bucket in Konto A verknüpft ist, die folgende Anweisung hinzu:

    {  
      "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/*"  
          ]  
        }  
      ]  
    }

Weitere Informationen findest du unter Import und Export von SQL-Server-Datenbanken mit nativer Sicherung und Wiederherstellung und Bucket-Besitzer gewährt kontoübergreifende Berechtigungen für Objekte, die er nicht besitzt.

Importiere das TDE-Zertifikat

Wenn du ein Backup einer Datenbank wiederherstellst, aber das TDE-Zertifikat nicht auf den Zielserver importiert hast, wird die Aufgabe abgebrochen. Du versuchst beispielsweise, eine Datenbank mit TDE von einer EC2- oder On-Premises-Instance in eine DB-Instance in RDS für SQL Server wiederherzustellen.

Beispiel für eine Protokollausgabe:

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

Um dieses Problem zu beheben, importiere das TDE-Zertifikat auf den Zielserver. 

Um dieses Problem zu vermeiden, verwende eine der folgenden Problemumgehungen.

Du sicherst die Datenbank von einer On-Premises- oder EC2-Instance, aber die Ziel-RDS für SQL Server befindet sich in mehreren Availability Zones

Führe die folgenden Schritte aus:

  1. Erstelle ein Backup der EC2- oder On-Premises-Datenbank mit aktivierter TDE.

  2. Stelle das Backup als neue Datenbank auf deinem On-Premises-Server wieder her.

  3. Führe den folgenden Befehl aus, um die Verschlüsselung für die neue Datenbank zu deaktivieren:

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

    Hinweis: Ersetze Databasename durch den Namen deiner Datenbank.

  4. Führe den folgenden Befehl aus, um den Datenbank-Verschlüsselungsschlüssel (Database Encryption Key, DEK) der neuen Datenbank zu löschen:

    USE Databasename;  
    GO  
    DROP DATABASE ENCRYPTION KEY;  
    GO

    Hinweis: Ersetze Databasename durch den Namen deiner Datenbank.

  5. Führe ein natives SQL-Server-Backup durch und stelle das Backup dann in der DB-Instance wieder her.

  6. Aktiviere TDE für die neue DB-Instance.

Du sicherst die DB-Instance von einer DB-Instance in RDS für SQL Server, die mit TDE verschlüsselt ist

Führe die folgenden Schritte aus:

  1. Verwende einen DB-Snapshot von der Instance in RDS für SQL Server für die Wiederherstellung in einer neuen DB-Instance.
    Hinweis: Wenn du die Edition der DB-Instance änderst, findest du Informationen dazu unter Überlegungen zu Microsoft SQL Server.
  2. Deaktiviere TDE für die neue DB-Instance.
  3. Führe ein natives SQL-Backup durch und stelle das Backup dann in der DB-Instance wieder her.
  4. Aktiviere TDE für die neue DB-Instance.

Gib die korrekten Windows-Laufwerksbuchstaben an

RDS für SQL Server kann eine Datenbank in zusätzlichen Speichervolumes wiederherstellen. Wenn du einen falschen Windows-Laufwerksbuchstaben für ein Speichervolume angibst, schlägt der Wiederherstellungsvorgang fehl.

Beispiel für Abfrage und Fehlermeldung:

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

Um dieses Problem zu beheben, überprüfe die Windows-Laufwerksbuchstaben. Führe die folgenden Schritte aus:

  1. Liste die angehängten zusätzlichen Speichervolumes auf deiner DB-Instance mit dem Befehl describe-db-instances auf:

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

    Hinweis: Ersetze your-db-instance-id durch die Kennung deiner DB-Instance.
    Hinweis: Wenn du den Volume-Namen nicht abrufen kannst, musst du die AWS CLI auf die neueste Version aktualisieren.

    Weitere Informationen zu Speichervolumes findest du unter Überlegungen zur Verwendung zusätzlicher Speichervolumes mit RDS für SQL Server.

  2. Passe deine Abfrage an, um die korrekten Windows-Laufwerksbuchstaben für @data_file_volume und @log_file_volume anzugeben.

Setze den Parameter MAXTRANSFERSIZE der Backup-Datei auf einen Wert, der größer ist als der Wert, den du bei der Wiederherstellung verwendet hast

Ein MAXTRANSFERSIZE-Fehler tritt auf, wenn das Backup FILESTREAM- oder In-Memory OLTP-Dateigruppen enthält und du bei der Wiederherstellung eine falsche MAXTRANSFERSIZE verwendet hast.

Hinweis: RDS für SQL Server unterstützt das FILESTREAM-Feature nicht.

Wenn du den Parameter MAXTRANSFERSIZE explizit angibst, kann ein Fehler auftreten: „RESTORE requires MAXTRANSFERSIZE=<required_size> but <your_specified_size> was specified.“

Beispiel für Abfrage und Protokollausgabe:

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

Um dieses Problem zu beheben, gib MAXTRANSFERSIZE nicht an:

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'  

Oder gib einen Wert an, der gleich oder größer als die in der Fehlermeldung angegebene Größe ist:

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

Die Größe der Backup-Datei reduzieren, um sie nach Amazon S3 zu übertragen

Dieses Problem tritt auf, wenn du ein Objekt verschiebst, das größer als die maximale Objektgröße für einen mehrteiligen Amazon-S3-Vorgang ist. Amazon S3 unterteilt das größere Objekt in mehrere Teile, die die maximale Anzahl von Teilen für jeden Upload überschreiten.

Beispiel für eine Protokollausgabe:

[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

Aktiviere zur Behebung dieses Problems die Komprimierung von Datenbank-Backups, um die Backup-Größe zu verringern, damit Amazon S3 die Datei empfangen kann.

Führe den folgenden Befehl aus, um die Backup-Komprimierung zu aktivieren:

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