准备备份文件

本页面介绍了如何创建将自管理或 Amazon RDS 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 时间戳(以秒为单位)
  • .trn 是文件扩展名

有效示例包括:

  • 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));
    
    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 存储桶。 请参阅 创建和配置 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));
    
    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 存储桶。 请参阅 创建和配置 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));
    
    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 存储桶。

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