千家信息网

12c物化视图中什么是快速刷新

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了12c物化视图中什么是快速刷新,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实验之前先明确两个定义:主表:SH.co
千家信息网最后更新 2026年11月02日12c物化视图中什么是快速刷新

这篇文章主要介绍了12c物化视图中什么是快速刷新,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

实验之前先明确两个定义:

主表:SH.costs ,example中的示例表

基表:SH.mv_costs ,保存查询结果集的实体表,也就是"模拟物化视图"的真正保存数据的地方。

增量基表:记录主表数据变化的表

什么是快速刷新?

快速刷新就是增量刷新,只应用主表产生的insert、update、delete操作。就像是RMAN中的增量备份,只备0级增量备份后的变化。

快速刷新的实现需要在主表上创建一个日志文件,该文件记录了主表被修改的记录。其实该文件也是一张基表,保存了主表的增量变化。增量基表记录变化时依赖于主表的主键或者是rowid。当触发快速刷新后,增量基表中的变化数据会更新到物化视图的基表中,然后将自己清空等待主表的变化。从另一个角度来看增量基表采用了缓存的原理,将数据变化收集起来,分批次加载到物化视图基表,减少完全刷新的消耗。

下面通过一个实验来看看快速刷新的过程

[oracle@snow ~]$ sqlplus / as sysdba

SYS@cdb > conn sh/sh@pdb1

目前COSTS表中没有主键,在创建MV日志时只能使用ROWID

SH@pdb1 > col owner for a20

SH@pdb1 > col constraint_name for a20

SH@pdb1 > select owner,constraint_name,constraint_type from dba_constraints where table_name='COSTS';

OWNER CONSTRAINT_NAME C

-------------------- -------------------- -

SH SYS_C009967 C

SH SYS_C009966 C

SH SYS_C009965 C

SH SYS_C009964 C

SH SYS_C009963 C

SH SYS_C009962 C

SH COSTS_CHANNEL_FK R

SH COSTS_TIME_FK R

SH COSTS_PRODUCT_FK R

SH COSTS_PROMO_FK R

1. 采用rowid的方式创建物化视图日志

SH@pdb1 > create materialized view log on costs with rowid;

Materialized view log created.

如果有主键的话可以使用

SH@pdb1 > create materialized view log on costs with primary key;

2. 创建快速刷新的物化视图

SH@pdb1 > create materialized view mvf_costs

2 segment creation immediate

3 refresh with rowid fast on demand

4 as select promo_id,sum(unit_cost) cost from costs group by promo_id;

as select promo_id,sum(unit_cost) cost from costs group by promo_id

*

ERROR at line 4:

ORA-32401: materialized view log on "SH"."COSTS" does not have new values

错误提示刚刚创建的物化视图日志不符合要求。将其删除,调整后重新创建。

SH@pdb1 > drop materialized view log on costs;

Materialized view log dropped.

重新创建物化视图日志,并且添加Including new values字句。

其中sequence是通过promo_id和unit_cost记录DML操作的次序,当刷新时按照这个次序在基表上执行

SH@pdb1 >

create materialized view log on costs with rowid,

sequence(promo_id,unit_cost) including new values;

Materialized view log created.

让我们看看物化视图日志创建成功后会包含两个对象,其中MLOG$_COSTS是增量基表。当主表产生数据变化时,隐含的trigger会将其写入该表中。

SH@pdb1 > col object_name for a30

SH@pdb1 > select object_name,object_type from user_objects where object_name like '%_COSTS%';

OBJECT_NAME OBJECT_TYPE

------------------------------ -----------------------

I_MLOG$_COSTS INDEX

MLOG$_COSTS TABLE

修改后的物化视图日志满足要求,再次创建物化视图成功。

SH@pdb1 >

create materialized view mvf_costs

segment creation immediate

refresh fast with rowid on demand

as select promo_id,sum(unit_cost) cost from costs group by promo_id;

下面看看物化视图mvf_costs的家族成员吧。MVF_COSTS(MATERIALIZED VIEW)是数据的逻辑容器;MVF_COSTS(TABLE)是保存查询结果的基表;MLOG$_COSTS是增量基表保存主表COSTS的数据变化;I_SNAP$_MVF_COSTS是MV的唯一索引,它是Oracle为了提高刷新性能二自动创建的;I_MLOG$_COSTS是增量基表的索引。

SH@pdb1 > col object_name for a30

SH@pdb1 > select object_name,object_type from user_objects where object_name like '%_COSTS%';

OBJECT_NAME OBJECT_TYPE

------------------------------ -----------------------

I_MLOG$_COSTS INDEX

I_SNAP$_MVF_COSTS INDEX

MLOG$_COSTS TABLE

MVF_COSTS TABLE

MVF_COSTS MATERIALIZED VIEW

下面开始测试一下刷新功能

向主表costs添加1000条数据

SH@pdb1 > insert into costs select * from costs where rownum < 1001;

1000 rows created.

SH@pdb1 > commit;

Commit complete.

检查增量基表会看到新增了1000条记录

SH@pdb1 > select count(*) from MLOG$_COSTS;

COUNT(*)

----------

1000

手工执行一次快速刷新

SH@pdb1 > exec dbms_mview.refresh('MVF_COSTS','F');

PL/SQL procedure successfully completed.

快速刷新执行完毕,增量基表中的数据不再有用。

SH@pdb1 > select count(*) from MLOG$_COSTS;

COUNT(*)

----------

0

下面是刷新前后物化视图的数据变化

SH@pdb1 > select * from mvf_costs;

PROMO_ID COST

---------- ----------

999 9173508.88

350 242949.08

351 258268

SH@pdb1 > select * from mvf_costs;

PROMO_ID COST

---------- ----------

999 9313900.88

350 242949.08

351 258268

感谢你能够认真阅读完这篇文章,希望小编分享的"12c物化视图中什么是快速刷新"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

视图 增量 数据 变化 日志 篇文章 文件 成功 两个 备份 次序 索引 结果 实验 查询 也就是 价值 兴趣 再次 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 重生之互联网科技帝国 互联网科技公司华为 科技赋能下的互联网金融 互联网金融监管科技数据 互联网科技公司税收优惠 互联网公司 科技公司 互联网科技公司电话 互联网 的科技创新 艾特科技互联网 无锡溥仪互联网科技有限公司 博兴的互联网电子科技公司 哈尔滨新华互联网科技学院 互联网企业和科技型企业 互联网时代的科技公司 上海乐五互联网科技有限公司 上海万顺科技互联网有限公司招聘 互联网科技博主张洲 互联网科技创新创业项目 平安好医生打造互联网科技医疗 广东猫王互联网科技有限公司电话 南京欣网互联网络科技 科技股互联网 南京欣网互联网科技 知域互联网科技有限公司大骗子 互联网5g黑科技有哪些 速维有品互联网信息科技(苏州)有限公司 群盈汇互联网科技有限公司 杭州披云加互联网科技有限公司 卡尔迅互联网科技有限公司 互联网与数字科技关系
0