准备备份文件

本页介绍了如何创建将 SQL Server 数据库迁移到 Cloud SQL for SQL Server 所需的备份文件,包括以下部分:

要求和限制

您用于迁移的备份文件需满足以下要求和限制:

  • 所有备份文件的名称都必须遵循各自的命名惯例

  • 备份文件的大小上限为 5 TB。

  • 如果您的数据库大小超过 5 TB,您可以将完整备份文件或差异备份文件条带化为多个较小的文件。每个条带的大小上限为 5 TB。

  • 您可以使用加密的备份和事务日志文件进行迁移。如果您想使用加密的备份文件,则必须对迁移中包含的特定数据库使用的每个备份文件(完整备份、差分备份、事务日志)进行加密。请参阅 使用加密备份

  • Database Migration Service 不会迁移 SQL Server master 数据库

  • 您的 SQL Server 源实例无法使用简单恢复模型。如需详细了解恢复模型,请参阅 Microsoft 文档中的恢复模型 (SQL Server)

命名规则

本部分介绍了完整备份、差分备份和事务日志备份文件的文件名要求。

本地 SQL Server 实例的备份文件命名惯例

完整备份文件名

完整备份文件的命名惯例取决于您是使用单个备份文件,还是将其划分为多个条带。在这两种情况下,Database Migration Service 都要求您包含纪元时间戳(表示为以秒为单位的 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/
    |  |  |- ...
    

差分备份文件名

差分备份文件的命名惯例取决于您是使用单个备份文件,还是将其划分为多个条带。在这两种情况下,Database Migration Service 都要求您包含纪元时间戳(表示为以秒为单位的 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 的备份文件命名惯例

完整备份文件名

完整备份文件的命名惯例取决于您是使用单个备份文件,还是将其划分为多个条带。在这两种情况下,Database Migration Service 都要求您包含纪元时间戳(表示为以秒为单位的 Unix 时间戳),该时间戳表示您执行完整备份时的大致时间。

  • 如果完整备份是单个文件,则文件名必须采用 db_id.family_guid.rds_backup_seq_id.epoch.bak 格式,其中:

    • db_id 是 Amazon RDS 内部数据库标识符
    • family_guid 是创建时原始数据库的 Amazon RDS 唯一标识符
    • rds_backup_seq_id 是 Amazon RDS 在内部用于维护每个事务日志备份文件的序列号的标识符
    • 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/
    |  |  |- ...
    

差分备份文件名

差分备份文件的命名惯例取决于您是使用单个备份文件,还是将其划分为多个条带。在这两种情况下,Database Migration Service 都要求您包含纪元时间戳(表示为以秒为单位的 Unix 时间戳),该时间戳表示您执行差异备份时的大致时间。

  • 如果差异备份是单个文件,则文件名必须采用 db_id.family_guid.rds_backup_seq_id.epoch.ext 格式,其中:

    • db_id 是 Amazon RDS 内部数据库标识符
    • family_guid 是创建时原始数据库的 Amazon RDS 唯一标识符
    • rds_backup_seq_id 是 Amazon RDS 在内部用于维护每个事务日志备份文件的序列号的标识符
    • 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 中,事务日志备份文件是自动生成的,并且它们包含所有必需的数据库标识符。这些默认名称包含纪元时间戳,Database Migration Service 中完全支持这些名称。您可以将这些文件直接上传到您的 /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 存储桶

创建事务日志备份

事务日志备份文件包含在您执行完整备份后源数据库中发生的更改。迁移作业的持续加载阶段需要事务日志备份。您可以安排定期的事务日志导出和上传,以确保数据更新持续复制到目标 Cloud SQL for SQL Server 实例。请参阅 安排事务日志备份

如果您使用加密的备份文件,则还必须对同一数据库的事务日志文件进行加密。请参阅 使用加密备份

为本地 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 存储桶中。

为 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 存储桶