如何使用 AWS DMS 从运行 SQL Server 的 Amazon RDS 数据库实例迁移?

上次更新时间:2019 年 9 月 26 日

如何使用 AWS Database Migration Service (AWS DMS) 从运行 SQL Server 的 Amazon Relational Database Service (Amazon RDS) 数据库实例迁移?

简短描述

您可使用 AWS DMS 将数据从一个或多个 SQL Server 数据库实例迁移到任何支持的目标数据库引擎

首先,请务必使用 RDS SQL Server 实例的主用户来配置数据库和表。然后使用 AWS DMS 控制台创建源终端节点使用 AWS 命令行界面 (AWS CLI)

有关 SQL Server 如何使用更改数据捕获 (CDC) 的更多信息以及将持续复制用于 SQL Server 数据库实例的前提条件和要求,请参阅在 SQL Server 源中使用持续复制 (CDC)

解决方法

AWS DMS 提供了两种捕获持续更改的方法:MS-Replication 和 MS-CDC。

注意:将 SQL Server 作为源运行的 Amazon RDS 实例必须使用 MS-CDC,因为 Amazon RDS 不支持系统管理员权限。

使用主用户运行以下命令以在数据库级别启用 MS-CDC:

EXEC msdb.dbo.rds_cdc_enable_db 'DBName';
GO

然后为每个表运行以下命令以在表级别启用 CDC:

EXECUTE sys.sp_cdc_enable_table @source_schema = N'SchemaName', @source_name =N'TableName', @role_name = NULL;
GO

然后运行以下命令以增加 T-Log 中事务的保留期限:

EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 3599;
GO

为 SQL Server 实例配置持续复制时,最佳实践是将 pollinginterval 设置为保留 1 天(86400 秒)的更改。但某些版本的 SQL Server 存在已知问题,因此如果 pollinginterval 的值设置大于 3599 秒,则该值会重置为默认值,即 5 秒。在这种情况下,T-Log 条目将在 AWS DMS 读取它们前被清除。要查看哪些版本仍受此问题影响,请参阅 Microsoft 文档在 SQL Server 的 sys.sp_cdc_scan 中将“pollinginterval”参数从秒转换为小时时发生错误结果

创建 AWS DMS 任务后,您可以监控迁移任务的状态。如果您停止任务并在一小时后恢复该任务,则可能会失败,这是因为由于之前所述的原因,T-Log 已被截断,AWS DMS 不拥有所需的日志序列号 (LSN)。为防止出现这种情况,请遵循以下步骤:

1.    停止捕获作业:

use [DBName]
exec sys.sp_cdc_stop_job;

2.    停止 AWS DMS 任务,等待所有剩余的活动停止。

3.    恢复 DMS 任务并通过监控 AWS DMS 任务的源延迟来等待它同步。

4.    重新启动捕获作业:

use [DBName]
exec sys.sp_cdc_start_job;

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?