RDS for SQL Server で、ネイティブバックアップと復元を使用する際に発生する一般的な問題としては、どのようなものがありますか?
最終更新日: 2022 年 10 月 4 日
Microsoft SQL Server インスタンスのために、Amazon Relational Database Service (Amazon RDS) のネイティブバックアップと復元を実行しています。このプロセス中に発生する可能性のある一般的なエラーには、どのようなものがありますか?
解決方法
RDS for SQL Server でネイティブバックアップや復元オプションを使用すると、検証エラーが発生することがあります。これらのエラーは発生した直後に表示され、タスクは作成されません。一般的なエラーと、それらの解決方法を以下に示します。
エラー: 「Aborted the task because of a task failure or a concurrent RESTORE_DB request」(タスクが失敗した、あるいは、RESTORE_DB リクエストが同時に発生したため、このタスクは中止されました)
このエラーは、領域に関連する問題がある DB インスタンスにおいて、Amazon Elastic Compute Cloud (Amazon EC2) またはオンプレミスからバックアップを復元しようとした場合に発生します。
[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.
エラーを解決するには、次の操作を行います。
オプション 1:
1. ソースインスタンス (EC2 またはオンプレミス) で次のコマンドを実行します。このコマンドは、データファイルや Tlog ファイルなどを含むデータベースのサイズを検証します。次の例の [DB_NAME] は、実際に使用しているデータベースの名前に置き換えます。
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. ソースインスタンスのデータベースサイズを、DB インスタンスで使用可能なストレージサイズと比較します。必要な場合は使用可能なストレージを増加し、その後にデータベースを復元します。
オプション 2:
ソース SQL Server にある DB ログファイルを圧縮して未使用の領域を解放してから、データベースのバックアップを実行します。
次のコマンドを使用してログファイルを圧縮します。
DBCC SHRINKFILE (LogFileName, Desired Size in MB)
エラー: 「Aborted the task because of a task failure or a concurrent RESTORE_DB request」(タスクが失敗した、あるいは、RESTORE_DB リクエストが同時に発生したため、このタスクは中止されました)
SQLSERVER_BACKUP_RESTORE オプションが関連付けられている AWS Identity and Access Management (IAM) のロールまたはポリシーにおいて、アクセス許可に関する問題が存在していると、次のエラーが発生します。
[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
エラーを解決するには、次の操作を行います。
1. 復元クエリをチェックして、S3 バケットとフォルダーが適切にプレフィックスされていることを確認します。
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. 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/*"
}
]
}
注: arn:aws:s3:::bucket_name は、実際の S3 バケットの ARN に置き換えます。
3. ポリシーと SQLSERVER_BACKUP_RESTORE オプションで指定されたロールとの間で、適切な関連付けが行われていることを確認します。
4. DB インスタンスのオプショングループとして、SQLSERVER_BACKUP_RESTORE オプションが関連付けられていることを確認します。
S3 バケットの ARN
S3 フォルダのプレフィックス (オプション)
詳細については、「SQL Server を実行している Amazon RDS DB インスタンスのネイティブバックアップを実行する方法を教えてください。」を参照してください。
エラー: 「Aborted the task because of a task failure or a concurrent RESTORE_DB request」(タスクが失敗した、あるいは、RESTORE_DB リクエストが同時に発生したため、このタスクは中止されました)
一般的に、このエラーはクロスアカウントデータベースにおける復元に関連します。
例:
- アカウント A に、バックアップを保存するための S3 バケットがあります。
- アカウント B に、復元の処理が実行される RDS DB インスタンスがあります。
このエラーは、オプションが関連付けられた IAM ロールまたはポリシーに、アクセス許可に関する問題がある場合に発生します。または、クロスアカウントの S3 バケットに関連付けられているバケットポリシーが、アクセス許可の問題を持つ場合にも発生します。
[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.
エラーを解決するには、次の操作を行います。
1. アカウント B (復元する対象の DB インスタンスが置かれているアカウント) の IAM ポリシーに、以下の属性が含まれていることを確認します。
{
"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. アカウント A の S3 バケットに関連付けられているバケットポリシーに、以下の属性が含まれていることを確認します。
{
"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
]
}
]
}
詳細については、以下を参照してください。
エラー: サムプリントが 'XXXXXX' であるサーバー証明書が見つかりません
このエラーは、EC2 またはオンプレミスの透過的データ暗号化 (TDE) されたデータベースを、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.
このエラーは、TDE を使用して暗号化されたデータベースのバックアップを、オリジンサーバー以外の SQL インスタンスに復元しようとしたことを意味します。移行先サーバーに対し、オリジンサーバーの TDE 証明書をインポートする必要があります。サーバー証明書のインポート、および個別の制限の詳細については、「SQL サーバーの透過的なデータの暗号化サポート」を参照してください。
このエラーを解決するには、証明書のインポートは停止し、次の操作を行います。
このエラーについては、以下の 2 つの回避策があります。
オプション 1: データベースのバックアップはオンプレミスまたは EC2 インスタンスをソースとしながら、ターゲット RDS SQL Server はマルチ AZ に配置する
1. TDE を有効にして、ソースデータベースのバックアップを作成します。
2. オンプレミスサーバーに対し、新しい DB としてバックアップを復元します。
3. 新しく作成したデータベースの TDE を無効にします。TDE の無効化は、下記のコマンドにより行います。
次のコマンドを実行して、データベースの暗号化を無効にします。次のコマンドの Databasename は、実際のデータベースの適切な名前に置き換えます。
USE master;
GO
ALTER DATABASE [Databasename] SET ENCRYPTION OFF;
GO
次のコマンドを実行して、暗号化に使用された DEK を削除します。次のコマンドの Databasename は、実際のデータベースの適切な名前に置き換えます。
USE [Databasename];
GO
DROP DATABASE ENCRYPTION KEY;
GO
4. SQL Server のバックアップをネイティブに作成し、そのバックアップを目的の RDS インスタンスに復元します。詳細については、「SQL Server を実行している Amazon RDS DB インスタンスのネイティブバックアップを実行する方法を教えてください。」を参照してください。
5. 新しい RDS データベースで TDE を再度有効化します。
オプション 2: TDE で暗号化された RDS for SQL Server データベースをソースとする
1. ソースインスタンスからのスナップショットを使用して、DB を新しいインスタンスに復元します。
2. スナップショットから作成されたデータベースの TDE を無効にします。
3. SQL バックアップをネイティブに作成し、このバックアップを目的の RDS インスタンスに復元します。
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」(エラー: タスクが失敗した、あるいは、RDS 自動バックアップの希望するバックアップウィンドウと重複しているため、このタスクは中止されました)
SQLSERVER_BACKUP_RESTORE オプションに関連付けられた IAM ロールまたはポリシーにおいて、アクセス許可に関する問題が存在する場合、次のエラーが発生します。
[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
この問題を解決するには、次の操作を実行します。
1. 復元クエリをチェックして、S3 バケットとフォルダーが適切にプレフィックスされていることを確認します。
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. 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/*"
}
]
}
注: arn:aws:s3:::bucket_name は、実際の S3 バケットの ARN に置き換えます。
3. ポリシーと SQLSERVER_BACKUP_RESTORE オプションに示されているロールの間で、適切な関連付けが行われていることを確認します。
4. DB インスタンスに関連付けられているオプショングループに、SQLSERVER_BACKUP_RESTORE オプションがあることを確認します。
S3 バケットの ARN
S3 フォルダのプレフィックス (オプション)
詳細については、「SQL Server を実行している Amazon RDS DB インスタンスのネイティブバックアップを実行する方法を教えてください。」を参照してください。
「Error: Write on "XXX" failed, Unable to write chunks to S3, S3 write stream upload failed」(エラー:「XXX」への書き込みに失敗しました、S3 にチャンクを書き込めません、S3 書き込みストリームのアップロードに失敗しました)
これは RDS for SQL Server での既知の問題です。データベースサイズの推定が不正確なことがあり、この場合、バックアップ手順は失敗し次のエラーが表示されます。
[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
このエラーの回避策は、データベースのバックアップに対する圧縮を有効化することです。これによりバックアップのサイズが圧縮され、S3 がファイルを受信しやすくなります。
バックアップの圧縮を有効にするには、次のコマンドを実行します。
exec rdsadmin..rds_set_configuration 'S3 backup compression', 'true';