AWS DMS 持续复制落后?

AWS DMS Ongoing Replication Falling Behind?

我们正在使用 AWS DMS 将特定 table 从一个 Oracle RDS 数据库实例持续复制到另一个 Oracle RDS 数据库(均为 11g)。

间歇性地,复制似乎落后或不同步。日志中没有错误,一切都报告为成功,但数据丢失。

我们可以开始全面刷新,然后数据就会显示出来,但这不是定期进行的可行选择。这是一个生产系统,完全刷新需要 14 小时以上

我们想监控目标数据库是否[至少大部分]是最新的。也就是说,不超过 2-3 小时。

我发现您可以使用 "SELECT current_scn FROM V$DATABASE" 从源数据库和 "awsdms_txn_state" table 中的目标获取当前 SCN。

但是,table 不存在,我在创建或修改任务时没有看到任何启用 TaskRecoveryTableEnabled 的选项。

是否有自动监控这些值的现有功能?可以通过 Lambda 完成吗?

如果 DMS​​ 报告成功,那么我们无法知道我们的数据落后了几小时或几天,直到有人打电话给我们投诉。

我确实在 DMS 任务中看到 "Enable validation" 的选项,但直觉告诉我这会产生大量不必要的开销。

提前致谢。

这里有几个问题:

  1. CDC 延迟的任务监控
  2. 如何设置 TaskRecoveryTableEnabled

首先,task Monitoring 提供了一些 CloudWatch 指标(查看所有 CDC* 指标)。

当目标与源不同步时,可以在这些指标上看到,以及这些更改在复制实例进程中的位置。来自 AWS 的详细博客解释了这些 Task Monitoring metrics 值得一读。

一种选择是在 CDCLatencySource 上放置 CloudWatch Alarm

或者,您可以在 CloudWatch 计划上创建自己的 Lambda,以 运行 您对源和目标的 SCN 查询,并使用 PutMetricData 输出自定义 CloudWatch 指标。如果它们不同步,您可以在此指标上创建 CloudWatch 警报。

对于第二个问题,要通过控制台设置 TaskRecoveryTableEnabled,勾选选项 "Create recovery table on target DB"

勾选此项后,您可以通过查看任务的概览选项卡确认 TaskRecoveryTableEnabled 已设置为是。底部是任务设置 json,其中包含类似以下内容:

    "TargetMetadata": {
        "TargetSchema": "",
        "SupportLobs": true,
        "FullLobMode": false,
        "LobChunkSize": 0,
        "LimitedSizeLobMode": true,
        "LobMaxSize": 32,
        "InlineLobMaxSize": 0,
        "LoadMaxFileSize": 0,
        "ParallelLoadThreads": 0,
        "ParallelLoadBufferSize": 0,
        "BatchApplyEnabled": false,
        "TaskRecoveryTableEnabled": true
  }