gpt4 book ai didi

oracle - 破解 MV 日志以捕获变更数据

转载 作者:行者123 更新时间:2023-12-02 03:13:16 28 4
gpt4 key购买 nike

我正在考虑一种以 Oracle 不希望的方式使用物化 View 日志的解决方案。这个想法是为 Oracle 源和非 Oracle 目标实现快速刷新 MV 功能。我已经测试了这种方法以确认它有效,但我担心这种意外和不受支持的使用的长期后果。

MY_TAB 是我想在另一个非 Oracle RDBMS 中镜像的 Oracle (11.2) 表。

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

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;

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

最佳答案

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

BEGIN
DELETE FROM mv_log_replica;
INSERT INTO mv_log_replica
(
pk_col,
col1,
col2)
SELECT
pk_col,
col1,
col2
FROM mlog$_my_tab;

/* Call externall process and pass the data */
/* Here instead of mlog$_my_tab use the mv_log_replica table */

DELETE FROM mlog$_my_tab a
WHERE EXISTS (SELECT 1 FROM mv_log_replica b WHERE a.pk_col = b.pk_col);

COMMIT;
END;

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

关于oracle - 破解 MV 日志以捕获变更数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38732414/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com