5

假设您有两个 Oracle 数据库,DB_A 和 DB_B。在 DB_A 中有一个名为 TAB1 的表,其中包含一个物化视图日志,并且在 DB_B 中创建了一个名为 SNAP_TAB1 的物化视图

CREATE SNAPSHOT SNAP_TAB1
REFRESH FAST
AS SELECT * FROM TAB1@DB_A;

每次调用快速刷新物化视图后,有没有办法在 DB_B 中查询对 SNAP_TAB1 所做的更改?

DBMS_SNAPSHOT.REFRESH( 'SNAP_TAB1', 'F' );

在 DB_A 中,在刷新之前,您可以查询物化视图日志表 MLOG$_TAB1,以查看 TAB1 中哪些行发生了更改。我正在寻找一种在 DB_B 中查询的方法,每次刷新后,SNAP_TAB1 中已刷新了哪些行。

谢谢!

4

1 回答 1

1

我认为以下几行适用于预建表:

您可以在表格中添加一列SNAP_TAB1

对于插入,您可以将它放在default sysdate=> 上,对于每个插入,您将拥有插入的时间戳。

对于更新,您可以使用触发器。因为实体化视图中不涉及列,所以使用触发器更新列不会有问题。

可能更好,使用触发器,您可以使用唯一 id 存储在该列中,在每次新刷新之前递增。(获取唯一 id 可能有不同的方法。)

显然,你不能用这个想法来跟踪删除。

于 2012-01-25T13:11:15.063 回答