當我在 Amazon RDS for SQL Server 資料庫執行個體上使用原生備份與還原功能時,該如何解決發生的錯誤?
我想解決在備份與還原 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 資料庫執行個體時發生的錯誤。
簡短描述
若要解決在 Amazon RDS for SQL Server 資料庫執行個體使用原生備份和還原功能時發生的錯誤,請嘗試下列操作:
- 增加資料庫執行個體上的空間。
- 針對 SQLSERVER_BACKUP_RESTORE 選項,授與 AWS Identity and Access Management (IAM) 角色的存取權限。
- 將 AWS Key Management Service (KMS) 權限授與選項群組的 IAM 角色。
- 授與權限給 IAM 政策或儲存貯體政策,以滿足跨帳戶備份需求。
- 匯入透明資料加密 (TDE) 憑證。
- 指定正確的 Windows 磁碟機代號。
- 將備份檔案的 MAXTRANSFERSIZE 設定為大於執行還原時所使用的值。
- 縮減備份檔案大小,以便將檔案傳輸到 Amazon Simple Storage Service (Amazon S3)。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱「對 AWS CLI 錯誤進行疑難排解」。此外,請確定您使用的是最新的 AWS CLI 版本。
增加資料庫執行個體上的空間
從 Amazon Elastic Compute Cloud (Amazon EC2) 或內部部署執行個體還原備份時,資料庫執行個體可能沒有足夠的空間。此時,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.
若要解決此問題,您可以增加資料庫執行個體上的可用儲存空間。或者,縮減資料庫執行個體上的交易日誌檔案大小。
增加可用儲存空間
請完成下列步驟:
- 在 EC2 或內部部署執行個體上執行下列查詢,檢查資料庫資料檔案與交易日誌檔案的大小:
**注意:**將 DB_NAME 替換成您的資料庫名稱。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) - 根據 EC2 或內部部署執行個體資料庫大小,比對資料庫執行個體上的可用儲存空間是否足夠。
- 增加資料庫執行個體上的可用儲存空間,然後還原資料庫。
縮減交易日誌檔案大小
請完成下列步驟:
- 若要縮減 EC2 或內部部署執行個體上目前的交易日誌檔案大小,請執行下列命令:
**注意:**將 FileName 替換成您的資料檔案或交易日誌檔案名稱,並將 FileSizeMB 替換成目標檔案大小 (以 MB 為單位)。DBCC SHRINKFILE (FileName, FileSizeMB) - 備份資料庫。
針對 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
若要解決此問題,請完成以下步驟:
-
執行下列命令,確認還原查詢中 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'; -
將下列陳述式新增至 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 Resource Name (ARN)。
-
將政策新增至與 SQLSERVER_BACKUP_RESTORE 選項相關聯的角色。
-
在與資料庫執行個體相關聯的選項群組中,確認是否包含 SQLSERVER_BACKUP_RESTORE 選項。
如需更多資訊,請參閱「如何將 SQL Server 資料庫原生備份到 Amazon RDS,並從 Amazon S3 還原?」
將 AWS KMS 權限授與選項群組的 IAM 角色
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 資料庫執行個體。
這通常是因為與選項群組相關聯的 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.
若要解決此問題,請完成以下步驟:
-
將下列陳述式新增至帳戶 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/*" ] } ] } -
將下列陳述式新增至與帳戶 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 資料庫執行個體。
日誌輸出範例:
[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 位於多個可用區域內
請完成下列步驟:
-
針對已開啟 TDE 的 EC2 或內部部署資料庫建立備份。
-
在內部部署伺服器上,將備份檔還原成新的資料庫。
-
執行下列命令,以關閉新資料庫的加密功能:
USE master; GO ALTER DATABASE Databasename SET ENCRYPTION OFF; GO**注意:**將 Databasename 替換成您的資料庫名稱。
-
執行下列命令,以移除新資料庫的資料庫加密金鑰 (DEK):
USE Databasename; GO DROP DATABASE ENCRYPTION KEY; GO**注意:**將 Databasename 替換成您的資料庫名稱。
-
執行原生 SQL Server 備份,然後將備份檔還原到資料庫執行個體。
從使用 TDE 加密的 RDS for SQL Server 資料庫執行個體,備份資料庫實例
請完成下列步驟:
- 使用 RDS for SQL Server 執行個體的資料庫快照還原成新的資料庫執行個體。
**注意:**如果您變更資料庫執行個體的版本,請參閱「Microsoft SQL Server 注意事項」。 - 關閉新資料庫執行個體的 TDE。
- 執行原生 SQL 備份,然後將備份檔還原到資料庫執行個體。
- 開啟新資料庫執行個體的 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 磁碟機代號。請完成下列步驟:
-
使用 describe-db-instances 命令,列出資料庫執行個體上掛載的額外儲存磁碟區:
aws rds describe-db-instances \ --db-instance-identifier your-db-instance-id \ --query 'DBInstances[].AdditionalStorageVolumes[].VolumeName' \ --output text**注意:**將 your-db-instance-id 替換成您的資料庫執行個體識別碼。
**注意:**如果無法取得磁碟區名稱,您需要將 AWS CLI 更新為最新版本。如需更多有關儲存磁碟區的資訊,請參閱 “Considerations for using additional storage volumes with RDS for SQL Server” (針對 RDS for SQL Server 使用額外儲存磁碟區的注意事項)。
-
修正您的查詢,為
@data_file_volume和@log_file_volume指定正確的 Windows 磁碟機代號。
將備份檔案的 MAXTRANSFERSIZE 設定為大於執行還原時所使用的值
當備份包含 FILESTREAM 或記憶體內部 OLTP 檔案群組,且還原時使用了錯誤的 MAXTRANSFERSIZE,便會發生 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';
相關內容
已提問 3 年前
已提問 3 年前
已提問 2 年前

