備妥備份檔案

本頁面說明如何建立將 SQL Server 資料庫遷移至 SQL Server 適用的 Cloud SQL 所需的備份檔案,包括以下各節:

需求條件和限制

下列規定和限制適用於用於遷移作業的備份檔案:

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

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

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

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

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

  • 來源 SQL Server 執行個體無法使用簡單復原模式。如要進一步瞭解復原模型,請參閱 Microsoft 說明文件中的「Recovery Models (SQL Server)」(復原模型 (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
  • 如果您將完整備份分割成個別的區塊,每個區塊都可以使用您選擇的任何名稱,但必須上傳至名稱為 Unix 時間戳記 (以秒為單位) 的 Cloud Storage 資料夾:

    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
  • 如果您將差異備份分割成個別的條紋,每個條紋都可以使用您選擇的任何名稱,但必須上傳至名稱為 Unix 時間戳記 (以秒為單位) 的 Cloud Storage 資料夾:

    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
  • 如果您將完整備份分割成個別的區塊,每個區塊都可以使用您選擇的任何名稱,但必須上傳至名稱為 Unix 時間戳記 (以秒為單位) 的 Cloud Storage 資料夾:

    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
  • 如果您將完整備份分割成個別的區塊,每個區塊都可以使用您選擇的任何名稱,但必須上傳至名稱為 Unix 時間戳記 (以秒為單位) 的 Cloud Storage 資料夾:

    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));
    
    BACKUP DATABASE @DATABASE
    TO DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '.bak';
    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));
    
    BACKUP DATABASE @DATABASE
    TO DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak',
    DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak',
    DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak'
    WITH FORMAT,
      MEDIANAME = 'AdventureWorksStripedSet0',
      MEDIADESCRIPTION = 'Striped media set for ' + @DATABASE + ' database';
    GO
  3. 將備份檔案上傳至 Cloud Storage 值區。請參閱「 建立及設定 Cloud Storage 值區」一文。

為 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 值區。請參閱「 建立及設定 Cloud Storage 值區」一文。

為來源執行個體建立差異備份

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

為地端 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));
    
    BACKUP DATABASE @DATABASE
    TO DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '.bak' WITH DIFFERENTIAL;
    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));
    
    BACKUP DATABASE @DATABASE
    TO DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak',
    DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak',
    DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak'
    WITH DIFFERENTIAL;
    WITH FORMAT,
      MEDIANAME = 'AdventureWorksStripedSet0',
      MEDIADESCRIPTION = 'Striped differential media set for ' + @DATABASE + ' database';
    GO
  3. 將備份檔案上傳至 Cloud Storage 值區。請參閱「 建立及設定 Cloud Storage 值區」一文。

為 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 值區。請參閱「 建立及設定 Cloud Storage 值區」一文。

備份交易記錄

交易記錄備份檔案包含完整備份後,������資料庫������生的變更。遷移工作需要交易記錄備份,才能進行持續載入階段。您可以排定定期的交易記錄匯出和上傳作業,確保資料更新持續複製至目的地 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));
    
    BACKUP LOG @DATABASE
    TO DISK = 'X:\SQLServerBackups\log\' + @DATABASE + '.' + @unixTimestamp + '.trn';
  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 值區複製到您為遷移作業建立的 Cloud Storage 值區