スキップしてコンテンツを表示

Amazon RDS for SQL Server DB インスタンスのネイティブバックアップと復元を使用するときのエラーを解決する方法を教えてください。

所要時間7分
0

Microsoft SQL Server DB インスタンス用の Amazon Relational Database Service (Amazon RDS) をバックアップして復元するときに発生するエラーを解決したいです。

簡単な説明

Amazon RDS for SQL Server DB インスタンスのネイティブバックアップと復元を使用する際に発生するエラーを解決するには、以下を試してください。

  • DB インスタンスのスペースを増やします。
  • SQLSERVER\ _BACKUP\ _RESTORE オプションの AWS Identity and Access Management (IAM) ロールにアクセス許可を付与します。
  • オプショングループの AWS Key Management Service (AWS KMS) アクセス許可を IAM ロールに付与します。
  • クロスアカウントバックアップのアクセス許可を IAM ポリシーまたはバケットポリシーに付与します。
  • 透過的データ暗号化 (TDE) 証明書をインポートします。
  • 正しい Windows のドライブレターを指定してください。
  • バックアップファイルの MAXTRANSFERSIZE を、復元を実行したときに使用した値よりも大きい値に設定します。
  • バックアップファイルのサイズを小さくして、ファイルを Amazon Simple Storage Service (Amazon S3) に転送します。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

DB インスタンスの容量を増やす

Amazon Elastic Compute Cloud (Amazon EC2) またはオンプレミスインスタンスからバックアップを復元すると、DB インスタンスの容量が不足する可能性があります。その場合、Amazon RDS はタスクを停止します。

ログ出力の例:

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

この問題を解決するには、DB インスタンスで利用可能なストレージを増やします。または、DB インスタンスのトランザクションログファイルのサイズを小さくします。

使用可能なストレージを増やす

次の手順を実行します。

  1. EC2 またはオンプレミスインスタンスで次のクエリを実行して、データベースデータファイルとトランザクションログファイルのサイズを確認します。
    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)
    **注:**DB_NAME は、実際のデータベース名に置き換えます。
  2. EC2 またはオンプレミスインスタンスのデータベースサイズを、DB インスタンスで使用可能なストレージと比較します。
  3. DB インスタンスで利用可能なストレージを増やし、データベースを復元します。

トランザクションログファイルのサイズを小さくする

次の手順を実行します。

  1. EC2 またはオンプレミスインスタンスの現在のトランザクションログファイルサイズを減らすには、次のコマンドを実行します。
    DBCC SHRINKFILE (FileName, FileSizeMB)
    **注:**FileName をデータまたはトランザクションログファイルの名前に置き換え、**FileSizeMB **をメガバイト単位のターゲットファイルサイズに置き換えます。
  2. データベースをバックアップします。

SQLSERVER\ _BACKUP\ _RESTORE オプションの IAM ロールにアクセス許可を付与する

SQLSERVER\ _BACKUP\ _RESTORE オプションに関連付けられている IAM ロールに対するアクセス許可が不十分な場合、Amazon RDS はタスクを停止します。

ログ出力の例:

[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

-または-

[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 バケットの Amazon リソースネーム (ARN) に置き換えてください。

  3. SQLSERVER\ _BACKUP\ _RESTORE オプションに関連付けられているロールにポリシーを追加します。

  4. SQLSERVER\ _BACKUP\ _RESTORE オプションが DB インスタンスに関連付けられているオプショングループにあることを確認します。

詳細については、「Amazon RDS に SQL Server データベースのネイティブバックアップを行い、Amazon S3 から復元する方法を教えてください」を参照してください。

オプショングループの IAM ロールに AWS KMS アクセス許可を付与する

RDS for SQL Server のネイティブバックアップと復元では、クライアント側でバックアップファイルを暗号化および復号できます。オプショングループに関連付けられている IAM ロールのポリシーに KMS キーへのアクセス許可がない場合、バックアップまたは復元は正しく実行されません。

ログ出力の例:

 [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

この問題を解決するには、オプショングループに関連付けられている IAM ポリシーに次のステートメントを追加します。

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

クロスアカウントバックアップのアクセス許可を IAM ポリシーまたはバケットポリシーに付与する

ある AWS アカウントから別のアカウントにデータベースバックアップを復元すると、アクセス許可が不十分なため Amazon RDS がタスクを停止することがあります。例えば、バックアップをアカウント A の S3 バケットに保存し、アカウント B の Amazon 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 のオプショングループに関連付けられている 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"  
            ]  
          },  
          "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/*"  
          ]  
        }  
      ]  
    }

詳細については、「ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート」および「バケット所有者が所有権のないオブジェクトへのクロスアカウントアクセス許可を付与する」を参照してください。

TDE 証明書をインポートする

データベースのバックアップを復元しても、TDE 証明書を宛先サーバーにインポートしなかった場合、タスクは停止します。例えば、TDE を使用してデータベースを EC2 またはオンプレミスインスタンスから RDS for SQL Server DB インスタンスに復元しようとしたとします。

ログ出力の例:

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

この問題を解決するには、TDE 証明書を宛先サーバーにインポートします。

この問題を回避するには、次の回避策のいずれかを使用してください。

データベースはオンプレミスまたは EC2 インスタンスからバックアップしているが、ターゲット RDS for SQL Server は複数のアベイラビリティーゾーンにある場合

次の手順を実行します。

  1. TDE をオンにした状態で EC2 またはオンプレミスデータベースのバックアップを作成します。

  2. バックアップをオンプレミスサーバー内の新しいデータベースとして復元します。

  3. 次のコマンドを実行して、新しいデータベースの暗号化を無効にします。

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

    注: Databasename は、実際のデータベース名に置き換えます。

  4. 次のコマンドを実行して、データベース暗号化キー (DEK) を新しいデータベースにドロップします。

    USE Databasename;  
    GO  
    DROP DATABASE ENCRYPTION KEY;  
    GO

    注: Databasename は、実際のデータベース名に置き換えます。

  5. SQL Server のネイティブバックアップを実行し、そのバックアップを DB インスタンスに復元します。

  6. 新しい DB インスタンスの TDE を有効にします。

TDE で暗号化された RDS for SQL Server DB インスタンスから DB インスタンスをバックアップしている場合

次の手順を実行します。

  1. RDS for SQL Server インスタンスの DB スナップショットを使用して、新しい DB インスタンスに復元します。
    注: DB インスタンスのエディションを変更する場合は、「Microsoft SQL Server に関する考慮事項」を参照してください。
  2. 新しい DB インスタンスの TDE を無効にします。
  3. SQL のネイティブバックアップを実行し、そのバックアップを DB インスタンスに復元します。
  4. 新しい DB インスタンスの TDE を有効にします。

正しい Windows のドライブレターを指定する

RDS for SQL Server は、データベースを追加のストレージボリュームに復元できます。ストレージボリュームに間違った Windows ドライブレターを指定すると、復元操作が正しく実行されません。

クエリとエラーメッセージの例:

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

この問題を解決するには、Windows のドライブレターを確認してください。次の手順を実行します。

  1. describe-db-instances コマンドを使用して、DB インスタンスにアタッチされている追加のストレージボリュームを一覧表示します。

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

    **注:**your-db-instance-id は、実際の DB インスタンスの識別子に置き換えます。
    注: ボリューム名を取得できない場合は、AWS CLI を最新バージョンに更新する必要があります。

    ストレージボリュームの詳細については、「RDS for SQL Server で追加のストレージボリュームを使用する際の考慮事項」を参照してください。

  2. @data_file_volume および @log_file_volume に正しい Windows のドライブレターを指定するようにクエリを修正してください。

バックアップファイルの MAXTRANSFERSIZE を、復元を実行したときに使用した値よりも大きい値に設定する

MAXTRANSFERSIZE エラーは、バックアップに FILESTREAM またはインメモリ OLTP ファイルグループが含まれていて、復元中に正しくない MAXTRANSFERSIZE を使用した場合に発生します。

注: RDS for SQL Server は FILESTREAM 機能をサポートしていません。

MAXTRANSFERSIZE を明示的に指定すると、次のエラーが発生することがあります。 "RESTORE requires MAXTRANSFERSIZE=<required_size> but <your_specified_size> was specified."

クエリとログ出力の例:

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

この問題を解決するには、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'  

または、エラーメッセージに示されているサイズと同じかそれ以上の値を指定します。

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

バックアップファイルのサイズを小さくして、ファイルを Amazon S3 に転送する

この問題は、Amazon S3 マルチパートオペレーションの最大オブジェクトサイズより大きいオブジェクトを移動した場合に発生します。Amazon S3 は、大きい方のオブジェクトを、各アップロードの最大パート数を超える数のパートに分割します。

ログ出力の例:

[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

この問題を解決するには、データベースバックアップ圧縮を有効にしてバックアップサイズを小さくし、Amazon S3 がファイルを受信できるようにします。

バックアップ圧縮を有効にするには、次のコマンドを実行します。

exec rdsadmin..rds_set_configuration 'S3 backup compression', 'true';
AWS公式更新しました 9ヶ月前
コメントはありません

関連するコンテンツ