備妥備份檔案

本頁面說明如何建立將 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 時間戳記
  • .bak 是副檔名

有效範例包括:

  • 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 執行個體中啟用交易記錄檔的存取權。 請參閱「 Access to transaction log backups with RDS for SQL Server」(使用 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