Amazon DMS在复制CDC记录时,如果记录已被删除,则可能无法完全复制。这是因为CDC记录需要在源数据库和目标数据库的日志中进行匹配,但是已删除的记录不再存在于源数据库日志中。
为了解决这个问题,可以使用以下解决方案:
- 使用时间戳策略
在源数据库中,将CDC记录中的时间戳字段设置为源表的更新时间。然后,在目标数据库中,将CDC记录中的时间戳字段设置为目标表的更新时间。这样,在复制CDC记录时,DMS将使用时间戳来匹配记录,而不是使用已删除的原始记录。
示例代码:
ALTER TABLE ADD COLUMN update_ts TIMESTAMP DEFAULT NULL;
UPDATE SET update_ts = NOW();
ALTER TABLE ADD COLUMN update_ts TIMESTAMP DEFAULT NULL;
UPDATE SET update_ts = NOW();
- 使用反向同步策略
在目标数据库中创建一个触发器,在源表的删除操作触发时,将删除操作反向同步到目标表中。这样,DMS将在目标数据库中看到已删除的记录,并将其正确地复制到目标表中。
示例代码:
CREATE TRIGGER sync_delete AFTER DELETE ON FOR EACH ROW
BEGIN
DELETE FROM WHERE id = OLD.id;
END;
通过以上两种解决方案,我们就可以解决Amazon DMS未完全复制已删除的CDC记录的问题。