准备备份文件

本页面介绍了如何创建将 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));
    
    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 存储桶