AWS DMS正在进行的复制落后了吗?

时间:2018-09-06 16:16:03

标签: amazon-web-services aws-dms

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

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

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

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

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

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

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

如果DMS报告成功,那么除非有人打电话给我们投诉,否则我们无法知道我们的数据要落后数小时或数天。

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

先谢谢了。

1 个答案:

答案 0 :(得分:0)

这里有几个问题:

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

首先,task Monitoring提供了许多CloudWatch指标(请参阅所有CDC *指标)。

当目标与源不同步以及这些更改在复制实例的过程中的何处时,可以在这些度量标准上看到。 AWS上解释这些Task Monitoring metrics的详细博客值得阅读。

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

或者,您可以在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
  }

Task Settings in the console