【问题标题】:Is there a way to query the changes made by a materialized view fast refresh in Oracle?有没有办法查询Oracle中物化视图快速刷新所做的更改?
【发布时间】:2012-02-18 15:20:43
【问题描述】:

假设您有两个 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 中已刷新了哪些行。

谢谢!

【问题讨论】:

    标签: oracle replication materialized-views


    【解决方案1】:

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

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

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

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

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

    显然,您无法使用此想法跟踪删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 2014-02-19
      • 2013-05-17
      • 1970-01-01
      • 2011-10-20
      • 2018-02-18
      • 2013-05-31
      相关资源
      最近更新 更多