備妥備份檔案

本頁面說明如何建立備份檔案,以便將自行管理的資料庫或 Amazon RDS SQL Server 資料庫,遷移至 SQL Server 適用的 Cloud SQL,包括下列各節:

需求條件和限制

用於遷移的備份檔案須符合下列規定和限制:

  • 所有備份檔案的名稱都必須符合各自的命名慣例。

  • 備份檔案的大小上限為 5 TB。

  • 如果資料庫大小超過 5 TB,您可以將完整或差異備份檔案拆分為多個小型檔案。每個拆分檔案的大小上限為 5 TB。

  • 您可以使用加密備份和交易記錄檔進行遷移。 如要使用加密備份檔案,您必須加密遷移作業中特定資料庫使用的每個備份檔案 (完整、差異、交易記錄)。請參閱「 使用加密備份」。

  • 資料庫遷移服務不會遷移 SQL Server master 資料庫。

  • 來源 SQL Server 執行個體無法使用簡單復原模式。如要進一步瞭解復原模式,請參閱 Microsoft 說明文件中的「復原模式 (SQL Server)」。

命名慣例

本節說明完整、差異和交易記錄備份檔案的檔案名稱規定。

地端部署 SQL Server 執行個體的備份檔案命名慣例

完整備份檔案名稱

完整備份檔案的命名慣例,取決於您是使用單一備份檔案,還是將其分成多個條帶。無論是哪種情況,資料庫遷移服務都要求您加入 Epoch 時間戳記 (以秒為單位的 Unix 時間戳記),代表完整備份的大致時間。

  • 如果完整備份是單一檔案,檔案名稱必須採用 db_name.epoch.bak 格式,其中:

    • db_name 是資料庫名稱
    • epoch 是以秒為單位的 Unix 時間戳記
    • .bak 是副檔名

    有效範例包括:

    • my-business-database.1712649600.bak
    • my-other-database.1712649600.bak
  • 如果將完整備份分割成不同的分區,每個分區都可以使用您選擇的任何名稱,但必須上傳到 Cloud Storage 資料夾,且資料夾名稱必須是 Unix 時間戳記 (以秒為單位):

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- 1712649600/
    |  |  |  |- mystripe-full_backup_file.bak
    |  |  |  |- otherStripefull-bkp.bak
    |  |- diff/
    |  |  |- ...
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- 1715250742/
    |  |  |  |- cool-stripe-file.bak
    |  |  |  |- secondStripeFile.bak
    |  |- diff/
    |  |  |- ...
    |  |- log/
    |  |  |- ...
    

差異備份檔案名稱

差異備份檔案的命名慣例,取決於您是使用單一備份檔案,還是將檔案分成多個分區。無論是哪種情況,資料庫遷移服務都要求您加入 Epoch 時間戳記 (以秒為單位的 Unix 時間戳記),代表差異備份的大致時間。

  • 如果差異備份是單一檔案,檔案名稱必須採用 db_name.epoch.ext 格式,其中:

    • db_name 是資料庫名稱
    • epoch 是以秒為單位的 Unix 時間戳記
    • .ext 是副檔名;差異備份檔案可以使用下列副檔名:.bak、.dif、.diff。

    有效範例包括:

    • my-business-database.1731159833.bak
    • my-other-database.1731159833.dif
  • 如果將差異備份分割成不同的分區,每個分區都可以使用您選擇的任何名稱,但必須上傳到 Cloud Storage 資料夾,且資料夾名稱必須是 Unix 時間戳記 (以秒為單位):

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- mydiffstripe-diff_backup_file.dif
    |  |  |  |- mySeconddiffstripe-diff_backup_file.bak
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- firstDiffStripe.bak
    |  |  |  |- other_diff_stripe.diff
    |  |- log/
    |  |  |- ...
    

交易記錄檔名稱

交易記錄檔名稱必須採用 db_name.epoch.trn 格式,其中:

  • db_name 是資料庫名稱
  • epoch 是以秒為單位的 Unix 時間戳記
  • .trn 是副檔名

有效範例包括:

  • my-business-database.1712649600.trn
  • my-other-database.1712649600.trn

Amazon RDS 備份檔案命名慣例

完整備份檔案名稱

完整備份檔案的命名慣例,取決於您是使用單一備份檔案,還是將其分成多個條帶。無論是哪種情況,資料庫遷移服務都要求您加入 Epoch 時間戳記 (以秒為單位的 Unix 時間戳記),代表完整備份的大致時間。

  • 如果完整備份是單一檔案,檔案名稱必須採用 db_id.family_guid.rds_backup_seq_id.epoch.bak 格式,其中:

    • db_id 是 Amazon RDS 內部資料庫 ID
    • family_guid 是原始資料庫建立時的 Amazon RDS 專屬 ID
    • rds_backup_seq_id 是 Amazon RDS 內部使用的 ID,代表了個別交易記錄備份檔案的序號
    • epoch 是以秒為單位的 Unix 時間戳記
    • .bak 是副檔名

    有效範例包括:

    • 3.CX11CB3D-G2E4-46D9-B462-CE40CDA97E89.22.1712649600.bak
    • 1.FD21CD3F-B5E4-27Z9-B462-CE40CDA97E89.21.1712649600.bak
  • 如果將完整備份分割成不同的分區,每個分區都可以使用您選擇的任何名稱,但必須上傳到 Cloud Storage 資料夾,且資料夾名稱必須是 Unix 時間戳記 (以秒為單位):

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- 1712649600/
    |  |  |  |- mystripe-full_backup_file.bak
    |  |  |  |- otherStripefull-bkp.bak
    |  |- diff/
    |  |  |- ...
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- 1715250742/
    |  |  |  |- cool-stripe-file.bak
    |  |  |  |- secondStripeFile.bak
    |  |- log/
    |  |  |- ...
    

差異備份檔案名稱

差異備份檔案的命名慣例,取決於您是使用單一備份檔案,還是將檔案分成多個分區。無論是哪種情況,資料庫遷移服務都要求您加入 Epoch 時間戳記 (以秒為單位的 Unix 時間戳記),代表差異備份的大致時間。

  • 如果差異備份是單一檔案,檔案名稱必須採用 db_id.family_guid.rds_backup_seq_id.epoch.ext 格式,其中:

    • db_id 是 Amazon RDS 內部資料庫 ID
    • family_guid 是原始資料庫建立時的 Amazon RDS 專屬 ID
    • rds_backup_seq_id 是 Amazon RDS 內部使用的 ID,代表了個別交易記錄備份檔案的序號
    • epoch 是以秒為單位的 Unix 時間戳記
    • .bak 是副檔名;差異備份檔案可以使用下列副檔名:.bak、.dif、.diff。

    有效範例包括:

    • 3.CX11CB3D-G2E4-46D9-B462-CE40CDA97E89.22.1731159833.bak
    • 1.FD21CD3F-B5E4-27Z9-B462-CE40CDA97E89.21.1731159833.dif
  • 如果將完整備份分割成不同的分區,每個分區都可以使用您選擇的任何名稱,但必須上傳到 Cloud Storage 資料夾,且資料夾名稱必須是 Unix 時間戳記 (以秒為單位):

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- mydiffstripe-diff_backup_file.dif
    |  |  |  |- mySeconddiffstripe-diff_backup_file.bak
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- firstDiffStripe.bak
    |  |  |  |- other_diff_stripe.diff
    |  |- log/
    |  |  |- ...
    

交易記錄檔名稱

Amazon RDS 會自動產生交易記錄備份檔案,內含所有必要資料庫 ID。這些預設名稱包含 Epoch 時間戳記,而且資料庫遷移服務提供完整支援。您可以直接將這些檔案上傳至 /log/ 資料夾。

完整備份來源執行個體

遷移工作的初始載入階段需要完整的資料庫備份檔案。如要加密備份,請務必儲存加密金鑰,以便日後建立遷移工作時,將金鑰上傳至 Cloud Storage。請參閱「 使用加密備份」。

完整備份地端部署 SQL Server 執行個體

您可以使用 T-SQL 或 SQL Server Management Studio (SSMS),完整備份地端部署 SQL Server 執行個體。步驟如下:

  1. 請確認符合下列規定:
  2. 完整備份來源執行個體。請參閱 Microsoft 說明文件中的「 快速入門導覽課程:使用 SSMS 備份及還原 SQL Server 資料庫」。您也可以查看下列範例指令:

    單一完整備份檔案的 T-SQL 指令範例

    這個範例指令會完整備份 AdventureWorks2022 資料庫。產生的備份檔案會採用必要的命名慣例。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath NVARCHAR(2000);
    SET @BackupPath = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '.bak';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP DATABASE [' + @DATABASE + '] TO DISK = N''' + @BackupPath + '''';
    EXEC sp_executesql @SQL;
    GO

    範例 T-SQL 指令:建立等量完整備份檔案

    這個範例指令會完整備份 AdventureWorks2022 資料庫。產生的備份檔案會採用必要的命名慣例。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath1 NVARCHAR(2000);
    DECLARE @BackupPath2 NVARCHAR(2000);
    DECLARE @BackupPath3 NVARCHAR(2000);
    
    SET @BackupPath1 = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak';
    SET @BackupPath2 = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak';
    SET @BackupPath3 = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP DATABASE [' + @DATABASE + '] '
               + 'TO DISK = N''' + @BackupPath1 + ''', '
               + 'DISK = N''' + @BackupPath2 + ''', '
               + 'DISK = N''' + @BackupPath3 + ''' '
               + 'WITH FORMAT, '
               + 'MEDIANAME = N''AdventureWorksStripedSet0'', '
               + 'MEDIADESCRIPTION = N''Striped media set for ' + @DATABASE + ' database''';
    EXEC sp_executesql @SQL;
    GO
  3. 將備份檔案上傳至 Cloud Storage bucket。 請參閱「 建立及設定 Cloud Storage bucket」。

完整備份 Amazon RDS

如要完整備份 Amazon RDS 來源,請按照下列步驟操作:

  1. 請確認符合下列規定:
  2. 設定原生備份功能。請參閱 Amazon RDS 說明文件中的「 設定原生備份與還原」。
  3. 完整備份來源執行個體。如果資料庫大小超過 5 TB,請務必使用 @number_of_files 參數,將完整備份拆分為多個資料條。每個拆分檔案的大小上限為 5 TB。請參閱 Amazon RDS 說明文件中的「備份資料庫 」。

    您也可以查看下列指令範例:

    在 Amazon RDS 執行完整備份的查詢範例

    這個範例指令會完整備份 AdventureWorks2022 資料庫。產生的備份檔案會採用必要的命名慣例。

    declare @DATABASE varchar(1000);
    declare @S3Bucket varchar(1000);
    declare @unixTimestamp varchar(30);
    declare @fileName varchar(1000);
    
    SELECT @S3Bucket = 'dms-sqlserver-exports';
    SELECT @DATABASE = 'AdventureWorks2022';
    
    SELECT @unixTimestamp=CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    SELECT @fileName = ('arn:aws:s3:::' + @S3Bucket + '/' + @DATABASE + '/full/' + @DATABASE + '.' + @unixTimestamp + '/' + CAST(database_id AS VARCHAR(10)) + '.' + CAST(family_guid AS VARCHAR(50)) + '.*.' + @unixTimestamp) FROM master.sys.database_recovery_status WHERE DB_NAME(database_id)=@DATABASE;
    
    exec msdb.dbo.rds_backup_database
      @source_db_name=@DATABASE,
      @s3_arn_to_backup_to=@fileName,
      @overwrite_s3_backup_file=1,
      @type='FULL',
      @number_of_files=1;
  4. 將備份檔案上傳至 Cloud Storage bucket。 請參閱「 建立及設定 Cloud Storage bucket」。

對來源執行個體進行差異備份

在遷移工作的增量載入階段,您可以使用差異資料庫備份檔案。如果您也加密同一資料庫的完整備份檔案和交易記錄檔,則可以使用加密的差異備份檔案。每個資料庫的所有備份和交易記錄檔,都必須使用相同的加密金鑰。請參閱「 使用加密備份」。

為地端部署 SQL Server 執行個體建立差異備份

您可以使用 T-SQL 或 SQL Server Management Studio (SSMS),對地端部署 SQL Server 執行個體進行差異備份。步驟如下:

  1. 請確認符合下列規定:
  2. 建立來源執行個體的差異備份。請參閱 Microsoft 說明文件中的「 建立差異資料庫備份」。您也可以查看下列範例指令:

    單一差異備份檔案的 T-SQL 指令範例

    這個範例指令會對 AdventureWorks2022 資料庫進行差異備份。產生的備份檔案會採用必要的命名慣例。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath NVARCHAR(2000);
    SET @BackupPath = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '.bak';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP DATABASE [' + @DATABASE + '] TO DISK = N''' + @BackupPath + ''' WITH DIFFERENTIAL';
    EXEC sp_executesql @SQL;
    GO

    分區差異備份檔案的 T-SQL 指令範例

    這個範例指令會對 AdventureWorks2022 資料庫進行差異備份。產生的備份檔案會採用必要的命名慣例。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath1 NVARCHAR(2000);
    DECLARE @BackupPath2 NVARCHAR(2000);
    DECLARE @BackupPath3 NVARCHAR(2000);
    
    SET @BackupPath1 = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak';
    SET @BackupPath2 = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak';
    SET @BackupPath3 = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP DATABASE [' + @DATABASE + '] '
               + 'TO DISK = N''' + @BackupPath1 + ''', '
               + 'DISK = N''' + @BackupPath2 + ''', '
               + 'DISK = N''' + @BackupPath3 + ''' '
               + 'WITH DIFFERENTIAL, FORMAT, '
               + 'MEDIANAME = N''AdventureWorksStripedSet0'', '
               + 'MEDIADESCRIPTION = N''Striped differential media set for ' + @DATABASE + ' database''';
    EXEC sp_executesql @SQL;
    GO
  3. 將備份檔案上傳至 Cloud Storage bucket。 請參閱「 建立及設定 Cloud Storage bucket」。

為 Amazon RDS 建立差異備份

如要對 Amazon RDS 來源進行差異備份,請按照下列步驟操作:

  1. 請確認符合下列規定:
  2. 設定原生備份功能。請參閱 Amazon RDS 說明文件中的「 設定原生備份與還原」。
  3. 建立來源執行個體的差異備份。使用 rds_backup_database 預存程序,並將 type 參數設為 DIFFERENTIAL。

    如果資料庫大小超過 5 TB,請務必使用 @number_of_files 參數,將完整備份拆分為多個資料條。每個拆分檔案的大小上限為 5 TB。

    請參閱 Amazon RDS 說明文件中的「備份資料庫 」。您也可以查看下列指令範例:

    在 Amazon RDS 執行差異備份的查詢範例

    這個範例指令會對 AdventureWorks2022 資料庫進行差異備份。產生的備份檔案會採用必要的命名慣例。

    declare @DATABASE varchar(1000);
    declare @S3Bucket varchar(1000);
    declare @unixTimestamp varchar(30);
    declare @fileName varchar(1000);
    
    SELECT @S3Bucket = 'dms-sqlserver-exports';
    SELECT @DATABASE = 'AdventureWorks2022';
    
    SELECT @unixTimestamp=CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    SELECT @fileName = ('arn:aws:s3:::' + @S3Bucket + '/' + @DATABASE + '/full/' + @DATABASE + '.' + @unixTimestamp + '/' + CAST(database_id AS VARCHAR(10)) + '.' + CAST(family_guid AS VARCHAR(50)) + '.*.' + @unixTimestamp) FROM master.sys.database_recovery_status WHERE DB_NAME(database_id)=@DATABASE;
    
    exec msdb.dbo.rds_backup_database
      @source_db_name=@DATABASE,
      @s3_arn_to_backup_to=@fileName,
      @overwrite_s3_backup_file=1,
      @type='DIFFERENTIAL',
      @number_of_files=1;
  4. 將備份檔案上傳至 Cloud Storage bucket。 請參閱「 建立及設定 Cloud Storage bucket」。

備份交易記錄

交易記錄備份檔案包含完整備份後,來源資料庫中發生的變更。遷移工作的連續載入階段需要交易記錄備份。您可以排定定期匯出及上傳交易記錄,確保資料更新會持續複製到目的地 SQL Server 適用的 Cloud SQL 執行個體。請參閱「 排定交易記錄備份」。

如果使用加密備份檔案,也必須加密同一資料庫的交易記錄檔。請參閱「 使用加密備份」。

為地端部署 SQL Server 執行個體建立交易記錄備份

如要備份地端部署 SQL Server 資料庫的交易記錄,請按照下列步驟操作:

  1. 請確認符合下列規定:
  2. 從 SQL Server 來源資料庫匯出交易記錄檔。請參閱 Microsoft 說明文件中的「 備份交易記錄」。您也可以查看下列指令範例:

    將交易記錄檔匯出至本機磁碟的 T-SQL 指令範例

    這個範例指令會建立 AdventureWorks2022 資料庫的交易記錄備份,並將檔案儲存至本機磁碟。產生的備份檔案會採用必要的命名慣例。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath NVARCHAR(2000);
    SET @BackupPath = 'X:\SQLServerBackups\log\' + @DATABASE + '.' + @unixTimestamp + '.trn';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP LOG [' + @DATABASE + '] TO DISK = N''' + @BackupPath + '''';
    EXEC sp_executesql @SQL;
    GO
  3. 將交易記錄備份檔案上傳至您為遷移作業建立的 Cloud Storage bucket。

備份 Amazon RDS 的交易記錄

如果 Amazon RDS 執行個體啟用自動備份功能,系統會自動建立交易記錄備份。請參閱 Amazon RDS 說明文件中的「 啟用自動備份」。

如要使用交易記錄備份檔案進行遷移,請按照下列步驟操作:

  1. 啟用 Amazon RDS 執行個體中的交易記錄檔存取權。 請參閱「 使用 RDS for SQL Server 存取交易記錄備份」。您也可以查看下列指令範例:

    範例:在 Amazon RDS 中啟用交易記錄存取權的預存程序呼叫

    declare @DATABASE varchar(1000);
    declare @S3Bucket varchar(1000);
    declare @targetS3Arn varchar(1000);

    SELECT @S3Bucket = 'dms-sqlserver-exports'; SELECT @DATABASE = 'AdventureWorks2022'; SELECT @targetS3Arn = ('arn:aws:s3:::' + @S3Bucket + '/' + @DATABASE + '/log/');

    USE @DATABASE; exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn=@targetS3Arn;

  2. 將交易記錄備份檔案從 S3 bucket 複製到您為遷移作業建立的 Cloud Storage bucket。