本页介绍了如何创建将 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)); BACKUP DATABASE @DATABASE TO DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '.bak'; 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)); BACKUP DATABASE @DATABASE TO DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak', DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak', DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak' WITH FORMAT, MEDIANAME = 'AdventureWorksStripedSet0', MEDIADESCRIPTION = 'Striped media set for ' + @DATABASE + ' database'; 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)); BACKUP DATABASE @DATABASE TO DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '.bak' WITH DIFFERENTIAL; 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)); BACKUP DATABASE @DATABASE TO DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak', DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak', DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak' WITH DIFFERENTIAL; WITH FORMAT, MEDIANAME = 'AdventureWorksStripedSet0', MEDIADESCRIPTION = 'Striped differential media set for ' + @DATABASE + ' database'; 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)); BACKUP LOG @DATABASE TO DISK = 'X:\SQLServerBackups\log\' + @DATABASE + '.' + @unixTimestamp + '.trn';
- 将事务日志备份文件上传到您为迁移创建的 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 存储桶。