Was sind häufige Probleme, die bei der Verwendung von nativen Sicherungen und Wiederherstellungen in RDS for SQL Server auftreten können?

Lesedauer: 10 Minute
0

Ich führe eine native Sicherung oder Wiederherstellung für meine Amazon Relational Database Service (Amazon RDS) für Microsoft SQL Server-Instance durch. Was sind häufige Fehler, auf die ich während dieses Vorgangs stoßen kann?

Behebung

Wenn Sie die native Sicherungs- und Wiederherstellungsoption RDS for SQL Server verwenden, können Überprüfungsfehler auftreten. Diese Fehler werden sofort angezeigt und eine Aufgabe wird nicht erstellt. Im Folgenden werden häufig auftretende Fehler und Lösungsvorschläge aufgeführt:

Fehler: Die Aufgabe wurde aufgrund eines Aufgabenfehlers oder einer gleichzeitigen RESTORE_DB-Anforderung abgebrochen

Dieser Fehler tritt auf, wenn Sie beim Wiederherstellen der Sicherung aus Amazon Elastic Compute Cloud (Amazon EC2) oder lokal speicherplatzbezogene Probleme auf der DB-Instance haben:

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

Gehen Sie zur Behebung dieses Fehlers folgendermaßen vor:

Option 1:

1.    Führen Sie den folgenden Befehl auf der Quellinstanz aus (EC2 oder lokal). Dieser Befehl überprüft die Größe der Datenbank, einschließlich der Datendatei und der Tlog-Datei. Ersetzen Sie im folgenden Beispiel [DB_NAME] durch den Namen Ihrer Datenbank.

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.    Vergleichen Sie die Datenbankgröße der Quell-Instances mit dem verfügbaren Speicher auf der DB-Instance. Erhöhen Sie den verfügbaren Speicher entsprechend und stellen Sie dann die Datenbank wieder her.

Option 2:

Verkleinern Sie die aktuelle DB-Protokolldatei auf dem Quell-SQL Server, um nicht verwendeten Speicherplatz freizugeben, und führen Sie dann die Datenbanksicherung durch.

Verwenden Sie den folgenden Befehl, um die Protokolldatei zu verkleinern.

DBCC SHRINKFILE (LogFileName, Desired Size in MB)

Fehler: Die Aufgabe wurde aufgrund eines Aufgabenfehlers oder einer gleichzeitigen RESTORE_DB-Anforderung abgebrochen

Der folgende Fehler tritt auf, wenn Sie Berechtigungsprobleme im Zusammenhang mit der AWS Identity and Access Management (IAM) -Rolle oder -Richtlinie haben, die mit der Option SQLSERVER_BACKUP_RESTORE verknüpft ist:

[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

Gehen Sie zur Behebung dieses Fehlers folgendermaßen vor:

1.    Überprüfen Sie die Wiederherstellungsabfrage, um sicherzustellen, dass der S3-Bucket und das Ordnerpräfix 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.    Stellen Sie sicher, dass die IAM-Richtlinie die folgenden Attribute enthält:

{
  "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: Ersetzen Sie arn:aws:s3: ::bucket_name durch den ARN Ihres S3-Buckets.

3.    Stellen Sie sicher, dass die Richtlinie korrekt mit der in der Option SQLSERVER_BACKUP_RESTORE angegebenen Rolle verknüpft ist.

4.    Stellen Sie sicher, dass die Option SQLSERVER_BACKUP_RESTORE die Optionsgruppe ist, die der DB-Instance zugeordnet ist:

S3-Bucket AR
Präfix des S3-Ordners (optional)

Für weitere Informationen siehe Wie führe ich native Sicherungen einer Amazon RDS DB-Instance durch, auf der ein SQL Server läuft?

Fehler: Die Aufgabe wurde aufgrund eines Aufgabenfehlers oder einer gleichzeitigen RESTORE_DB-Anforderung abgebrochen

Dieser Fehler wird häufig mit der kontoübergreifenden Datenbankwiederherstellung in Verbindung gebracht.

Beispiel:

  • Konto A verfügt über einen S3-Bucket, in dem die Sicherung gespeichert wird.
  • Konto B verfügt über eine RDS-DB-Instance, in der die Wiederherstellung durchgeführt werden muss.

Der Fehler tritt auf, wenn Sie berechtigungsbezogene Probleme in einer IAM-Rolle oder -Richtlinie haben, die mit der Option verknüpft ist. Oder es liegt ein Berechtigungsproblem mit der Bucket-Richtlinie vor, die dem S3-Bucket im Cross-Account zugeordnet ist.

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

Gehen Sie zur Behebung dieses Fehlers folgendermaßen vor:

1.    Stellen Sie sicher, dass die IAM-Richtlinie in Konto B (das Konto, in dem sich die DB-Instance befindet, in der Sie die Wiederherstellung durchführen möchten) die folgenden Attribute enthält:

{
  "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.    Stellen Sie sicher, dass die mit dem S3-Bucket in Konto A verknüpfte Bucket-Richtlinie die folgenden Attribute enthält:

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

Weitere Informationen finden Sie unter:

Fehler: Serverzertifikat mit dem Fingerabdruck 'XXXXXX' kann nicht gefunden werden

Dieser Fehler tritt auf, wenn Sie versuchen, eine Datenbank mit Transparent Data Encryption (TDE) aus EC2 oder lokal in RDS for SQL Server wiederherzustellen:

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

Dieser Fehler weist auf einen Versuch hin, eine Sicherung einer mit TDE verschlüsselten Datenbank auf einer anderen SQL-Instanz als dem ursprünglichen Server wiederherzustellen. Das TDE-Zertifikat des ursprünglichen Servers muss auf den Zielserver importiert werden. Weitere Informationen zum Importieren von Serverzertifikaten und den entsprechenden Einschränkungen finden Sie unter Unterstützung für transparente Datenverschlüsselung in SQL Server.

Um diesen Fehler neben dem Importieren von Zertifikaten zu beheben, gehen Sie wie folgt vor:

Es gibt zwei Workarounds, um diesen Fehler zu verhindern.

Option 1: Die Datenbanksicherung wird von einer lokalen oder einer EC2-Instance bezogen, der Ziel-RDS-SQL-Server befindet sich jedoch in MultiAZ

1.    Erstellen Sie eine Sicherungskopie der Quelldatenbank bei aktiviertem TDE.

2.    Stellen Sie die Sicherung als neue Datenbank mit Ihrem lokalen Server wieder her.

3.    Deaktivieren Sie TDE in der neu erstellten Datenbank. Verwenden Sie die folgenden Befehle, um TDE auszuschalten:

Führen Sie den folgenden Befehl aus, um die Verschlüsselung der Datenbank zu deaktivieren. Ersetzen Sie im folgenden Befehl Databasename durch den richtigen Namen für Ihre Datenbank.

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

Führen Sie folgenden Befehl aus, um den für die Verschlüsselung verwendeten DEK zu löschen. Ersetzen Sie im folgenden Befehl Databasename durch den richtigen Namen für Ihre Datenbank.

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

4.    Erstellen Sie eine native SQL Server-Sicherung, und stellen Sie diese neue Sicherung in der gewünschten RDS-Instanz wieder her. Für weitere Informationen siehe Wie führe ich native Sicherungen einer Amazon RDS DB-Instance durch, auf der ein SQL Server läuft?

5.    Schalten Sie TDE in der neuen RDS-Datenbank wieder ein.

Option 2: Die Datenbank stammt aus einer RDS for SQL Server-Datenbank, die mit TDE verschlüsselt ist

1.    Verwenden Sie einen Snapshot von der Quellinstanz, um die Datenbank in einer neuen Instance wiederherzustellen.

2.    Deaktivieren Sie TDE für die aus dem Snapshot erstellte Datenbank.

3.    Erstellen Sie eine native SQL-Sicherung und stellen Sie diese neue Sicherung in der gewünschten RDS-Instanz wieder her.

4.    Schalten Sie TDE in der neuen RDS-Datenbank wieder ein.

Häufige Fehler wurden bei nativen Backups auf RDS for SQL Server beobachtet

Fehler: Die Aufgabe wurde aufgrund eines Aufgabenfehlers oder einer Überschneidung mit Ihrem bevorzugten Backup-Fenster für die automatische RDS-Sicherung abgebrochen

Der folgende Fehler tritt auf, wenn Sie Berechtigungsprobleme im Zusammenhang mit der IAM-Rolle oder -Richtlinie haben, die mit der Option SQLSERVER_BACKUP_RESTORE verknüpft sind.

[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

Gehen Sie wie folgt vor, um dieses Problem zu beheben:

1.    Überprüfen Sie die Wiederherstellungsabfrage, um sicherzustellen, dass der S3-Bucket und das Ordnerpräfix 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.    Stellen Sie sicher, dass die IAM-Richtlinie die folgenden Attribute enthält:

{
  "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: Ersetzen Sie arn:aws:s3: ::bucket_name durch den ARN Ihres S3-Buckets.

3.    Stellen Sie sicher, dass die Richtlinie korrekt mit der Rolle verknüpft ist, die in der Option SQLSERVER_BACKUP_RESTORE angezeigt wird.

4.    Stellen Sie sicher, dass die Option SQLSERVER_BACKUP_RESTORE in der Optionsgruppe steht, die der DB-Instance zugeordnet ist.

S3-Bucket AR
Präfix des S3-Ordners (optional)

Für weitere Informationen siehe Wie führe ich native Sicherungen einer Amazon RDS DB-Instance durch, auf der ein SQL Server läuft?

Fehler: Schreiben auf „XXX“ fehlgeschlagen, Chunks konnten nicht in S3 geschrieben werden, S3-Schreibstream-Upload fehlgeschlagen

Dies ist ein bekanntes Problem mit RDS for SQL Server. Die Datenbankgröße wird manchmal falsch geschätzt und führt dazu, dass die Sicherungsprozedur mit dem folgenden Fehler fehlschlägt.

[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

Die Lösung für diesen Fehler besteht darin, die Datenbanksicherungskomprimierung zu aktivieren. Dadurch wird das Backup komprimiert, sodass S3 die Datei leichter empfangen kann.

Führen Sie den folgenden Befehl aus, um die Sicherungskomprimierung zu aktivieren:

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