0

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

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

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

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

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

但是,该表不存在,并且在创建或修改任务时我看不到任何启用 TaskRecoveryTableEnabled 的选项。

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

如果 DMS​​ 报告成功,那么在有人打电话给我们抱怨之前,我们无法知道我们的数据落后了数小时或数天。

我确实在 DMS 任务中看到了“启用验证”的选项,但直觉告诉我这会产生大量不必要的开销。

提前致谢。

4

1 回答 1

1

这里有几个问题:

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

首先,任务监控提供了许多 Clo​​udWatch 指标(请参阅所有 CDC* 指标)。

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

一种选择是将CloudWatch 警报放在 CDCLatencySource 上。

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

对于第二个问题,要通过控制台设置 TaskRecoveryTableEnabled,请勾选“在目标数据库上创建恢复表”选项

在目标数据库上创建恢复表

勾选此选项后,您可以通过查看任务的概述选项卡来确认 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
  }

控制台中的任务设置

于 2018-09-27T03:45:29.280 回答