本页面介绍了如何创建将 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.bakmy-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.bakmy-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.trnmy-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.bak1.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.bak1.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。 请参阅 条带介质集中的备份设备。
- 对源实例进行完整备份。请参阅
快速入门:使用 SSMS 备份和恢复 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\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 存储桶。