本页面介绍了如何创建将 SQL Server 数据库迁移到 Cloud SQL for SQL Server 所需的备份文件,包括以下部分:
- 要求和限制列出了备份文件支持方面的重要限制。
- 命名规范介绍了备份文件的文件名要求。
- 进行完整备份包含创建完整备份文件的步骤。
- 进行差分备份包含创建差分备份文件的步骤。
- 事务日志备份文件包含创建事务日志备份文件的步骤。
要求和限制
您用于迁移的备份文件需要遵循以下要求和限制:
- 所有备份文件的名称都必须遵循各自的命名惯例。 
- 备份文件的大小上限为 5 TB。 
- 如果您的数据库大小超过 5 TB,您可以将完整备份文件或差异备份文件条带化为多个较小的文件。每个条带的大小上限为 5 TB。 
- 您可以使用加密的备份文件和事务日志文件进行迁移。如果您想使用加密的备份文件,则必须对迁移中包含的特定数据库所用的每个备份文件(完整备份、差分备份、事务日志)进行加密。请参阅 使用加密备份。 
- Database Migration Service 不会迁移 SQL Server - master数据库。
- 您的源 SQL Server 实例无法使用简单恢复模型。如需详细了解恢复模型,请参阅 Microsoft 文档中的恢复模型 (SQL Server)。 
命名规则
本部分介绍完整备份文件、差分备份文件和事务日志备份文件的文件名要求。
- 如需了解 Cloud Storage 存储桶文件夹名称和结构要求,请参阅 创建和配置 Cloud Storage 存储桶。 
- 如需了解 Database Migration Service 如何在同构 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 实例进行完整备份。请按照以下步骤操作:
- 请确保您符合以下要求:
    - 您为备份文件使用了正确的 命名要求 。
- 源数据库不使用简单恢复模型。 请参阅 Microsoft 文档中的恢复模式 (SQL Server) 。
- 如果您的数据库大小超过 5 TB,请务必将完整备份划分为单独的条带。每个条带的大小上限为 5 TB。 请参阅 条带介质集中的备份设备。
 
- 对源实例进行完整备份。请参阅 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 
- 将备份文件上传到 Cloud Storage 存储桶。 请参阅 创建和配置 Cloud Storage 存储桶。
为 Amazon RDS 执行完整备份
如需对 Amazon RDS 源进行完整备份,请按以下步骤操作:
- 请确保您符合以下要求:
    - 您为备份文件使用了正确的 命名要求 。
- 源数据库不使用简单恢复模型。 请参阅 Amazon RDS 文档中的确定 Microsoft SQL Server 数据库的恢复模型。
- 如果您想在进行完整备份后使用事务日志备份,请在 Amazon RDS 实例上 启用自动备份。
 
- 设置原生备份功能。请参阅 Amazon RDS 文档中的 设置原生备份和恢复。
- 对源实例进行完整备份。如果数据库大小超过 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; 
- 将备份文件上传到 Cloud Storage 存储桶。 请参阅 创建和配置 Cloud Storage 存储桶。
对源实例进行差分备份
您可以在迁移作业的增量加载阶段使用差异数据库备份文件。如果您还加密了同一数据库的完整备份文件和事务日志文件,则可以使用加密的差分备份文件。每个数据库的所有备份和事务日志文件都必须使用相同的加密密钥。请参阅 使用加密备份。
为本地 SQL Server 实例执行差分备份
您可以使用 T-SQL 或 SQL Server Management Studio (SSMS) 对本地 SQL Server 实例进行差异备份。请按照以下步骤操作:
- 请确保您符合以下要求:
    - 您为备份文件使用了正确的 命名要求 。
- 源数据库不使用简单恢复模型。 请参阅 Microsoft 文档中的恢复模式 (SQL Server) 。
- 如果数据库大小超过 5 TB,请务必将差异备份划分为单独的条带。每个条带的大小上限为 5 TB。 请参阅 条带介质集中的备份设备。
 
- 对源实例进行差分备份。请参阅 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 
- 将备份文件上传到 Cloud Storage 存储桶。 请参阅 创建和配置 Cloud Storage 存储桶。
为 Amazon RDS 执行差分备份
如需对 Amazon RDS 源进行差异备份,请按以下步骤操作:
- 请确保您符合以下要求:
    - 您为备份文件使用了正确的 命名要求 。
- 源数据库不使用简单恢复模型。 请参阅 Amazon RDS 文档中的确定 Microsoft SQL Server 数据库的恢复模型。
 
- 设置原生备份功能。请参阅 Amazon RDS 文档中的 设置原生备份和恢复。
- 对源实例进行差分备份。使用 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; 
- 将备份文件上传到 Cloud Storage 存储桶。 请参阅 创建和配置 Cloud Storage 存储桶。
进行事务日志备份
事务日志备份文件包含在您进行完整备份后源数据库中发生的更改。迁移作业的持续加载阶段需要事务日志备份。您可以安排定期导出和上传事务日志,以确保数据更新持续复制到 Cloud SQL for SQL Server 目标实例。请参阅 安排事务日志备份。
如果您使用加密的备份文件,则还必须对同一数据库的事务日志文件进行加密。请参阅 使用加密备份。
为本地 SQL Server 实例创建事务日志备份
如需对本地 SQL Server 数据库进行事务日志备份,请按以下步骤操作:
- 请确保您符合以下要求:
    - 您为备份文件使用了正确的 命名要求 。
- 源数据库不使用简单恢复模型。 请参阅 Microsoft 文档中的恢复模式 (SQL Server) 。
 
- 从 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 
- 将事务日志备份文件上传到您为迁移创建的 Cloud Storage 存储桶。
为 Amazon RDS 执行事务日志备份
如果您的 Amazon RDS 实例上启用了自动备份,系统会自动创建事务日志备份。请参阅 Amazon RDS 文档中的 启用自动备份。
如需在迁移中使用事务日志备份文件,请按以下步骤操作:
- 在 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; 
- 将事务日志备份文件从 S3 存储桶复制到您为迁移创建的 Cloud Storage 存储桶。