我正在考虑一种使用物化视图日志的解决方案,其方式不是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;
除了一般的无意/不支持的问题之外,是否有人发现此方法存在任何具体问题?
答案 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)。