攻击变更数据捕获的MV日志

时间:2016-08-03 00:15:02

标签: oracle

我正在考虑一种使用物化视图日志的解决方案,其方式不是Oracle所预期的。 我们的想法是为Oracle源和非Oracle目标实现快速刷新MV功能。 我已经测试了这种方法以确认它是否有效,但我担心这种无意识和不受支持的使用会产生长期后果。

MY_TAB是Oracle(11.2)表,我希望在另一个非Oracle RDBMS中镜像。

目标表的referh由源数据库中Oracle过程调用的外部进程应用。 该进程接受从MV Log提取的数据集,并将更改应用于目标。 成功执行后,将从MV Log中删除已处理的更改。

MLOG $ _MY_TAB是MY_TAB创建的MV日志:

CREATE MATERIALIZED VIEW LOG ON my_tab
WITH PRIMARY KEY;

注意:此MV日志中不会有MV。

通过调用以下过程调用referesh进程:

BEGIN

  SELECT *
  FROM mlog$_my_tab;

  /* Call externall process and pass the data */

  DELETE mlog$_my_tab;

  COMMIT;

END;

除了一般的无意/不支持的问题之外,是否有人发现此方法存在任何具体问题?

1 个答案:

答案 0 :(得分:1)

根据我的上述评论,我想建议修改方法。创建一个新表mv_log_replica。该表应该是mv_log表的副本。

 var date= DateTime.Now;
 var Yourrequeired= date.ToString("dd-MM-yyyy HH: mm: ss");

此方法将确保您只删除复制到mv_log_replica表的数据。如果在mv_log之间插入任何其他数据,则不会删除它。此外,您可以使mv_log_replica成为全局临时表(ON COMMIT DELETE ROWS)。