加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

有没有办法查询Oracle中物化视图快速刷新所做的更改?

发布时间:2020-12-12 13:14:31 所属栏目:百科 来源:网络整理
导读:假设您有两个Oracle数据库,DB_A和DB_B. DB_A中有一个名为TAB1的表,其中包含物化视图日志,以及在DB_B中创建的名为SNAP_TAB1的物化视图 CREATE SNAPSHOT SNAP_TAB1REFRESH FASTAS SELECT * FROM TAB1@DB_A; 有没有办法在DB_B中查询每次调用快速刷新物化视图后
假设您有两个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中刷新.

谢谢!

解决方法

我认为下面的行与预构建表一起使用:

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

对于插入,您可以将其置于默认的sysdate =>对于每个插入,您将拥有插入的时间戳.

对于更新,您可以使用触发器.由于该列未包含在物化视图中,因此使用触发器更新列不会有问题.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读