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

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

使用原生備份與還原

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

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

如果您也提供選用的 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 – 對稱加密 KMS 金鑰的 ARN,用來加密項目。

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

    • 如果您未指定 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 ARN file_name 部分的任何位置。星號會由所產生檔案 (以 1-of-number_of_files 開頭) 中的一系列字母數字字串取代。

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

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

    • 多個備份在 S3 ARN 的 file_name 部分中只能有一個星號。

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

  • @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 還原資料庫或日誌的使用者登入。

部分還原資料庫的快照還原和時間點復原行為

來源執行個體中的局部還原資料庫 (停留在 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_DB

  • 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 用於加密 (備份時) 和解密 (還原時) 的 KMS 金鑰的 ARN。
filepath 不適用於原生備份與還原任務。
overwrite_file 不適用於原生備份與還原任務。