假设您有两个 Oracle 数据库,DB_A 和 DB_B。 DB_A 中有一个名为 TAB1 的表,有一个物化 View 日志,DB_B 中有一个名为 SNAP_TAB1 的物化 View ,它是用
CREATE SNAPSHOT SNAP_TAB1
REFRESH FAST
AS SELECT * FROM TAB1@DB_A;
有没有办法在每次调用快速刷新物化 View 后在 DB_B 中查询对 SNAP_TAB1 所做的更改?
DBMS_SNAPSHOT.REFRESH( 'SNAP_TAB1', 'F' );
在 DB_A 中,在刷新之前,您可以查询物化 View 日志表 MLOG$_TAB1,以查看 TAB1 中哪些行已更改。我正在寻找一种在每次刷新后在 DB_B 中查询的方法,即在 SNAP_TAB1 中刷新了哪些行。
谢谢!
最佳答案
我认为以下几行适用于预建表:
您可以在表中添加一列 SNAP_TAB1
.
用于 Blade 您可以将其放在 default sysdate
上=> 对于每个插入,您都将获得插入的时间戳。
对于更新,您可以使用触发器。因为列不涉及实体化 View ,所以用触发器更新列不会有问题。
可能更好,使用触发器,您可以使用唯一 id 存储在该列中,在每次新刷新之前递增。(获取唯一 id 可能有不同的方法。)
显然,你不能用这个想法来跟踪删除。
关于oracle - 有没有办法查询Oracle中物化 View 快速刷新所做的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9002752/