使用原生備份與還原 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用原生備份與還原

啟用並設定原生備份與還原之後,就可以開始使用此選項。首先,您會連線至 Microsoft SQL Server 資料庫,然後呼叫 Amazon RDS預存程序來執行工作。如需連接資料庫的指示,請參閱連線至執行 Microsoft SQL Server 資料庫引擎的資料庫執行個體

某些預存程序需要您將 Amazon Resource Name (ARN) 提供給 Amazon S3 儲存貯體和檔案。您 的格式ARN為 arn:aws:s3:::bucket_name/file_name.extension。Amazon S3 不需要 中的帳戶號碼或 AWS 區域ARNs。

如果您也提供選用KMS金鑰,則金鑰ARN的 格式為 arn:aws:kms:region:account-id:key/key-id。如需詳細資訊,請參閱 Amazon 資源名稱 (ARNs) AWS 和服務命名空間。您必須使用對稱加密KMS金鑰來加密備份。Amazon RDS 不支援非對稱KMS金鑰。如需詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的建立對稱加密KMS金鑰

注意

無論您是否使用KMS金鑰,原生備份和還原任務預設會為上傳至 S3 的檔案啟用伺服器端進階加密標準 (AES) 256 位元加密。

如需如何呼叫每個預存程序的相關指示,請參閱下列主題:

備份資料庫

若要備份資料庫,請使用 rds_backup_database 預存程序。

注意

您無法在維護時段或 Amazon RDS拍攝快照時備份資料庫。

用量

exec msdb.dbo.rds_backup_database @source_db_name='database_name', @s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension', [@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'], [@overwrite_s3_backup_file=0|1], [@block_size=512|1024|2048|4096|8192|16384|32768|65536], [@max_transfer_size=n], [@buffer_count=n], [@type='DIFFERENTIAL|FULL'], [@number_of_files=n];

下列是必要參數:

  • @source_db_name – 要備份之資料庫的名稱。

  • @s3_arn_to_backup_to – ARN指出要用於備份的 Amazon S3 儲存貯體,以及備份檔案名稱。

    檔案可以有任何副檔名,但通常使用 .bak

下列是選用參數:

  • @kms_master_key_arn – 用於加密項目ARN的對稱加密KMS金鑰的 。

    • 您無法使用預設的加密金鑰。如果您使用預設金鑰,資料庫將不會備份。

    • 如果您未指定 KMS 金鑰識別符,則不會加密備份檔案。如需詳細資訊,請參閱加密 Amazon RDS 資源

    • 當您指定KMS金鑰時,會使用用戶端加密。

    • Amazon RDS 不支援非對稱KMS金鑰。如需詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的建立對稱加密KMS金鑰

  • @overwrite_s3_backup_file – 此值指出是否覆寫現有的備份檔案。

    • 0 – 不覆寫現有檔案。此為預設值。

      @overwrite_s3_backup_file 設為 0 時,如果檔案已存在,則傳回錯誤。

    • 1 – 即使現有檔案不是備份檔案,只要是指定的名稱,就覆寫檔案。

  • @type – 備份的類型。

    • DIFFERENTIAL – 建立差異備份。

    • FULL – 建立完整備份。此為預設值。

    差異備份是以前次完整備份為基礎。您不能在前次完整備份和差異備份之間擷取快照,差異備份才能運作。如果您要建立差異備份,但快照存在,請先建立另一個完整備份,再繼續建立差異備份。

    您可以使用下列範例SQL查詢來尋找最後一個完整的備份或快照:

    select top 1 database_name , backup_start_date , backup_finish_date from msdb.dbo.backupset where database_name='mydatabase' and type = 'D' order by backup_start_date desc;
  • @number_of_files – 要將備份分割 (分塊) 的檔案數目。上限為 10。

    • 完整和差異備份都支援多個備份。

    • 如果輸入值 1 或省略參數,則會建立單一備份檔案。

    提供檔案共有的字首,再於末尾加上星號 (*)。星號可以在 S3 的任何file_name位置ARN。星號會由所產生檔案 (以 1-of-number_of_files 開頭) 中的一系列字母數字字串取代。

    例如,如果 S3 中的檔案名稱ARN是 backup*.bak且您設定 @number_of_files=4,則產生的備份檔案為 backup1-of-4.bakbackup3-of-4.bakbackup2-of-4.bakbackup4-of-4.bak

    • 如果任一檔案名稱已存在,且 @overwrite_s3_backup_file 為 0,則會傳回錯誤。

    • 多檔案備份在 file_name S3 中只能有一個星號ARN。

    • 單一檔案備份在 S3 file_name的部分中可以有任意數量的星號ARN。不會從所產生檔案名稱中移除星號。

  • @block_size – 區塊大小 (以位元組為單位),指定備份操作的實體區塊大小。有效值為 512、1024、2048、4096、8192、16384、32768 和 65536

  • @max_transfer_size – 最大傳輸大小表示備份程序期間每個 I/O 操作傳輸的資料磁碟區上限 (以位元組為單位)。有效值為 65536 位元組 (64 KB) 的倍數,最多 4194304 位元組 (4 MB)。

  • @buffer_count – 用於備份程序的 I/O 緩衝區總數。

範例

範例 差異備份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak', @overwrite_s3_backup_file=1, @type='DIFFERENTIAL';
範例 有加密的完整備份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak', @kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE', @overwrite_s3_backup_file=1, @type='FULL';
範例 多個備份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @number_of_files=4;
範例 多個差異備份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @type='DIFFERENTIAL', @number_of_files=4;
範例 多個備份與加密
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE', @number_of_files=4;
範例 多個備份與 S3 覆寫
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @overwrite_s3_backup_file=1, @number_of_files=4;
範例 區塊大小的備份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @block_size=512;
範例 使用 @max_transfer_size和 進行多檔案備份 @buffer_count
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @number_of_files=4, @max_transfer_size=4194304, @buffer_count=10;
範例 單一檔案備份與 @number_of_files 參數

此範例會產生名為 backup*.bak 的備份檔案。

exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @number_of_files=1;

還原資料庫

若要還原資料庫,請呼叫 rds_restore_database 預存程序。Amazon 會在還原任務完成且資料庫開啟後RDS建立資料庫的初始快照。

用量

exec msdb.dbo.rds_restore_database @restore_db_name='database_name', @s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name.extension', @with_norecovery=0|1, [@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'], [@block_size=512|1024|2048|4096|8192|16384|32768|65536], [@max_transfer_size=n], [@buffer_count=n], [@type='DIFFERENTIAL|FULL'];

下列是必要參數:

  • @restore_db_name– 要還原之資料庫的名稱。資料庫名稱是唯一的。您不能還原與現有資料庫同名的資料庫。

  • @s3_arn_to_restore_from – ARN指出用於還原資料庫之備份檔案的 Amazon S3 字首和名稱。

    • 若為單一檔案備份,請提供整個檔案名稱。

    • 若為多檔案備份,請提供檔案共有的字首,再於末尾加上星號 (*)。

    • 如果 @s3_arn_to_restore_from為空,則傳回下列錯誤訊息:S3 ARN字首不能為空

以下為差異還原的必要參數,但為完整還原的選用參數:

  • @with_norecovery – 用於還原操作的復原子句。

    • 將其設定為 0 以使用 還原RECOVERY。在此情況下,資料庫於還原之後會在線上。

    • 將其設定為 1 以使用 還原NORECOVERY。在此情況下,資料庫會在還原任務完成後保持 RESTORING 狀態。此方法可讓您進行後續差異還原。

    • 對於DIFFERENTIAL還原,請指定 01

    • 若為 FULL 還原,此值預設為 0

下列是選用參數:

  • @kms_master_key_arn – 如果您已加密備份檔案,則 KMS金鑰可用來解密檔案。

    當您指定KMS金鑰時,會使用用戶端加密。

  • @type – 還原的類型。有效類型為 DIFFERENTIALFULL。預設值為 FULL

  • @block_size – 區塊大小 (以位元組為單位),指定備份操作的實體區塊大小。有效值為 512、1024、2048、4096、8192、16384、32768 和 65536

  • @max_transfer_size – 最大傳輸大小表示備份程序期間每個 I/O 操作傳輸的資料磁碟區上限 (以位元組為單位)。有效值為 65536 位元組 (64 KB) 的倍數,最多 4194304 位元組 (4 MB)。

  • @buffer_count – 用於備份程序的 I/O 緩衝區總數。

注意

對於差異還原,資料庫必須處於 RESTORING 狀態,或者任務必須已存在,而該任務必須使用 還原NORECOVERY。

當資料庫在線上時,您無法還原後續差異備份。

您無法為已有 待定還原任務的資料庫提交還原任務RECOVERY。

多可用區域執行個體不支援具有 NORECOVERY和 差異還原的完整還原

在具有僅供讀取複本的異地同步備份執行個體上還原資料庫,與在異地同步備份執行個體上還原資料庫類似。您不需要採取任何其他動作來還原複本上的資料庫。

範例

範例 單一檔案還原
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
範例 多檔案還原

若要避免在還原多個檔案時發生錯誤,請確保所有備份檔案具有相同的字首,以及沒有其他檔案使用該字首。

exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*';
範例 的完整資料庫還原搭配 RECOVERY

下列三個範例執行相同的任務,即使用 進行完整還原RECOVERY。

exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', [@type='DIFFERENTIAL|FULL'];
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @type='FULL', @with_norecovery=0;
範例 含加密的完整資料庫還原
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
範例 區塊大小的還原
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @block_size=512;
範例 使用 @max_transfer_size 和 @buffer_count 進行多檔案還原
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*', @max_transfer_size=4194304, @buffer_count=10;
範例 的完整資料庫還原搭配 NORECOVERY
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @type='FULL', @with_norecovery=1;
範例 使用 進行差異還原 NORECOVERY
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @type='DIFFERENTIAL', @with_norecovery=1;
範例 使用 進行差異還原 RECOVERY
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @type='DIFFERENTIAL', @with_norecovery=0;

還原日誌

若要還原日誌,請呼叫 rds_restore_log 預存程序。

用量

exec msdb.dbo.rds_restore_log @restore_db_name='database_name', @s3_arn_to_restore_from='arn:aws:s3:::bucket_name/log_file_name.extension', [@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'], [@with_norecovery=0|1], [@stopat='datetime'], [@block_size=512|1024|2048|4096|8192|16384|32768|65536], [@max_transfer_size=n], [@buffer_count=n];

下列是必要參數:

  • @restore_db_name – 資料庫的名稱,表示要還原其日誌。

  • @s3_arn_to_restore_from – ARN指出用於還原日誌之日誌檔案的 Amazon S3 字首和名稱。檔案可以有任何副檔名,但通常使用 .trn

    如果 @s3_arn_to_restore_from為空,則傳回下列錯誤訊息:S3 ARN字首不能為空

下列是選用參數:

  • @kms_master_key_arn – 如果您加密了日誌, KMS金鑰可用來解密日誌。

  • @with_norecovery – 用於還原操作的復原子句。此值預設為 1

    • 將其設定為 0 以使用 還原RECOVERY。在此情況下,資料庫於還原之後會在線上。當資料庫在線上時,您無法還原更多的日誌備份。

    • 將其設定為 1 以使用 還原NORECOVERY。在此情況下,資料庫會在還原任務完成後保持 RESTORING 狀態。此方法可讓您進行後續日誌還原。

  • @stopat – 此值指定將資料庫還原至指定日期和時間的狀態 (日期時間格式)。只有在指定日期和時間之前寫入的交易日誌記錄,才會套用至資料庫。

    如果未指定此參數 (其為 NULL),則會還原完整日誌。

  • @block_size – 區塊大小 (以位元組為單位),指定備份操作的實體區塊大小。有效值為 512、1024、2048、4096、8192、16384、32768 和 65536

  • @max_transfer_size – 最大傳輸大小表示備份程序期間每個 I/O 操作傳輸的資料磁碟區上限 (以位元組為單位)。有效值為 65536 位元組 (64 KB) 的倍數,最多 4194304 位元組 (4 MB)。

  • @buffer_count – 用於備份程序的 I/O 緩衝區總數。

注意

對於日誌還原,資料庫必須處於還原狀態,或者任務必須已經存在,而該任務必須使用 進行還原NORECOVERY。

當資料庫在線上時,您無法還原日誌備份。

您無法在已有 待定還原任務的資料庫上提交日誌還原任務RECOVERY。

異地同步備份執行個體上不支援日誌還原。

範例

範例 日誌還原
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
範例 含加密的日誌還原
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn', @kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
範例 的日誌還原 NORECOVERY

下列兩個範例執行相同的任務,即使用 進行日誌還原NORECOVERY。

exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn', @with_norecovery=1;
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
範例 區塊大小的還原
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn', @block_size=512;
範例 的日誌還原 RECOVERY
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn', @with_norecovery=0;
範例 具有 STOPAT子句的日誌還原
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn', @with_norecovery=0, @stopat='2019-12-01 03:57:09';

完成資料庫還原

如果資料庫上的最後一個還原任務是使用 執行@with_norecovery=1,則資料庫現在處於 RESTORING 狀態。使用 rds_finish_restore 預存程序開啟資料庫,以正常操作。

用量

exec msdb.dbo.rds_finish_restore @db_name='database_name';
注意

若要使用此方法,資料庫必須處於 RESTORING 狀態,沒有任何待定的還原任務。

異地同步備份執行個體上不支援 rds_finish_restore 程序。

若要完成還原資料庫,請使用 master 登入。或使用最近還原資料庫或日誌的使用者登入,搭配 NORECOVERY。

處理部分還原的資料庫

捨棄部分還原的資料庫

若要捨棄部分還原的資料庫 (處於 RESTORING 狀態的左側),請使用rds_drop_database預存程序。

exec msdb.dbo.rds_drop_database @db_name='database_name';
注意

您無法為已有待定還原或完成還原任務的DROP資料庫提交資料庫請求。

若要捨棄資料庫,請使用 master 登入。或使用最近還原資料庫或日誌的使用者登入,搭配 NORECOVERY。

部分還原資料庫的快照還原和point-in-time 復原行為

在快照還原和 point-in-time復原期間,來源執行個體中部分還原的資料庫 (處於 RESTORING 狀態) 會從目標執行個體捨棄。

取消任務

若要取消備份或還原任務,請呼叫 rds_cancel_task 預存程序。

注意

您無法取消 FINISH_RESTORE 任務。

用量

exec msdb.dbo.rds_cancel_task @task_id=ID_number;

以下是必要參數:

  • @task_id– 要取消之任務的 ID。您可以呼叫 rds_task_status 來取得任務 ID。

追蹤任務的狀態

若要追蹤備份和還原任務的狀態,請呼叫 rds_task_status 預存程序。如果您不提供任何參數,預存程序會傳回所有任務的狀態。任務的狀態大約每兩分鐘更新一次。查詢歷程記錄會保留 36 天。

用量

exec msdb.dbo.rds_task_status [@db_name='database_name'], [@task_id=ID_number];

下列是選用參數:

  • @db_name– 要顯示任務狀態之資料庫的名稱。

  • @task_id– 要顯示任務狀態之任務的 ID。

範例

範例 列出特定任務的狀態
exec msdb.dbo.rds_task_status @task_id=5;
範例 列出特定資料庫和任務的狀態
exec msdb.dbo.rds_task_status @db_name='my_database', @task_id=5;
範例 列出特定資料庫上的所有任務及其狀態
exec msdb.dbo.rds_task_status @db_name='my_database';
範例 列出目前執行個體上的所有任務及其狀態
exec msdb.dbo.rds_task_status;

回應

rds_task_status 預存程序會傳回下列幾欄。

資料欄 描述

task_id

任務的 ID。

task_type

任務類型取決於輸入參數,如下所示:

  • 備份任務:

    • BACKUP_DB – 完整資料庫備份

    • BACKUP_DB_DIFFERENTIAL – 差異資料庫備份

  • 還原任務:

    • RESTORE_DB – 使用 進行完整資料庫還原 RECOVERY

    • RESTORE_DB_NORECOVERY – 使用 進行完整資料庫還原 NORECOVERY

    • RESTORE_DB_DIFFERENTIAL – 使用 進行差異資料庫還原 RECOVERY

    • RESTORE_DB_DIFFERENTIAL_NORECOVERY – 使用 進行差異資料庫還原 NORECOVERY

    • RESTORE_DB_LOG – 使用 進行日誌還原 RECOVERY

    • RESTORE_DB_LOG_NORECOVERY – 使用 進行日誌還原 NORECOVERY

  • 完成還原的任務:

    • FINISH_RESTORE – 完成還原並開啟資料庫

Amazon 會在資料庫完成下列還原任務後,建立資料庫的RDS初始快照:

  • RESTORE_資料庫

  • RESTORE_DB_DIFFERENTIAL

  • RESTORE_DB_LOG

  • FINISH_RESTORE

database_name

與任務相關聯之資料庫的名稱。

% complete

任務的進度 (以百分比值表示)。

duration (mins)

任務所花的時間 (以分鐘為單位)。

lifecycle

任務的狀態。可能的狀態如下:

  • CREATED – 呼叫 rds_backup_databaserds_restore_database 後,立即會建立任務,且狀態會設為 CREATED

  • IN_PROGRESS – 備份或還原任務開始之後,狀態會設為 IN_PROGRESS。最多可能需要 5 分鐘,狀態才會從 CREATED 變成 IN_PROGRESS

  • SUCCESS – 備份或還原任務完成之後,狀態會設為 SUCCESS

  • ERROR – 如果備份或還原任務失敗,狀態會設為 ERROR。關於錯誤的詳細資訊,請查看 task_info 欄。

  • CANCEL_REQUESTED – 呼叫 rds_cancel_task 後,任務的狀態會立即設為 CANCEL_REQUESTED

  • CANCELLED – 成功取消任務之後,任務的狀態會設為 CANCELLED

task_info

任務的其他資訊。

如果備份或還原資料庫時發生錯誤,此欄會包含此錯誤的相關資訊。如需可能錯誤的清單及緩解策略,請參閱故障診斷

last_updated

上次更新任務狀態的日期和時間。進度每完成 5% 後,就會更新一次狀態。

created_at

建立任務的日期和時間。

S3_object_arn ARN 指出 Amazon S3 字首和正在備份或還原的檔案名稱。

overwrite_s3_backup_file

呼叫備份任務時所指定之 @overwrite_s3_backup_file 參數的值。如需詳細資訊,請參閱備份資料庫

KMS_master_key_arn 用於加密 (用於備份) 和解密 (用於還原) ARN的KMS金鑰的 。
filepath 不適用於原生備份與還原任務。
overwrite_file 不適用於原生備份與還原任務。