SQL Server 是一个值得信赖的老牌数据库系统,作为当代数据业务系统中最重要的基础软件之一,数据库的安全可控及风险抵抗能力显得尤为重要。本文着眼于数据库迁移中的全量数据复制,与大家一起进行深入探索。
全量数据复制一般是数据迁移重要的一环,简言之,它所实现的功能就是从源库中导出全部需要的数据,然后再导入到目标库中。下面可以跟着我们的技术步骤一起操作!
创建S3桶
在S3控制台点击创建存储桶

保证名称不重复,选择与数据库同区域的位置,其他选项保持默认即可。
创建访问S3桶的IAM角色
创建如下策略,将bucket_name替换为我们上一步创建的桶名称
向上滑动阅览

添加我们上一步创建的策略

点击下一步,取个名称即可

开启SQL Server的备份还原功能
找到数据库当前使用的选项组,点击添加选项,选项名称选择SQLSERVER_BACKUP_RESTORE,角色选择我们上一步创建的,点击立即应用


数据同步
1
当前数据展示

2
拍摄快照 / 备份数据之前,先做快照!

3
全量备份
用法:
exec msdb.dbo.rds_backup_database
@source_db_name='database_name',
@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension',
[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
[@overwrite_s3_backup_file=0|1],
[@type='DIFFERENTIAL|FULL'],
[@number_of_files=n];

参数介绍:
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html#SQLServer.Procedural.Importing.Native.Using.Backup

4
将全量的数据导入到新的库里
数据展示:

命令:
exec msdb.dbo.rds_restore_database
@restore_db_name='database_name',
@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name.extension',
@with_norecovery=0|1,
[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
[@type='DIFFERENTIAL|FULL'];
参数介绍:
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html#SQLServer.Procedural.Importing.Native.Using

注意with_norecovery要设置为1,否则无法进行下面的增量同步状态!!!
记住task_id,运行以下命令可查看还原状态:
exec msdb.dbo.rds_task_status
[@db_name='database_name'],
[@task_id=ID_number];
@db_name– 要显示其任务状态的数据库的名称。
@task_id– 要显示其任务状态的任务的 ID。

此时处于正在还原状态,为正常情况。
5
模拟增量

6
将增量数据导出来
前提:此时需将数据库的所有连接断开,可通过修改安全组关闭端口来实现
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak',
@overwrite_s3_backup_file=1,
@type='DIFFERENTIAL';

同样可根据task_id查看任务状态


7
将增量数据导入到新库
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=1;

查看任务状态

8
完成数据库还原
exec msdb.dbo.rds_finish_restore
@db_name='database_name';

查看任务状态

此时数据库的状态已变为正常

9
检查数据
