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