知识要点
- mview基本概念
- 基本语法
- 手动刷新
- fast+commit刷新
- fast+start with next刷新
- 可更新物化视图
mview基本概念
materialized view 占用自己的存储空间,物化视图,也叫快照,默认行的内容只读
基本语法
- 创建物化视图日志
- create materialized view log on tabname;要有一个主键
- create materialized view log on tabname with rowid;
- 创建物化视图
- create materialized view <> refresh <刷新方式 > on <刷新时间> as select .....
- 刷新方式
- complete(完全刷新)
- fast(依赖于物化视图日志,识别哪些行发生了更改)
- force(强制刷新)
- 刷新时间
- on demand 手动刷新
- on commit;事务提交就刷新
- start with / next 指定刷新时间
- 手动刷新
- exec dbms_mview.refresh('mviewname','fast');
- exec dbms_mview.refresh('mviewname','c');
手动刷新
- 创建实验用户mvl
- sys>create user mvl identified by 123;
- sys>grant connect,resource to mvl;
- sys>grant select on scott.emp to mvl;
- sys>grant create materialized view to mvl;
- sys>grant execute on dbms_mview to mvl;
-
- 创建
- 物化视图
- mvl>create materialized view emp as select * from scott.emp;
- 验证
- scott用户做更新
- scott>update emp set sal = sal -2;
- scott>commit;
- 因为创建的时候没有定义物化视图刷新方式,因此这里要手动进行刷新才能同步数据
- mvl>exec dbms_mview.refresh('emp','c');
- 可以看到已经同步
- mvl>select * from empf1;
fast+commit刷新
- fast刷新需要首先创建物化视图日志
- sys>grant create materialized view to scott;
-
- scott>create materialized view log on emp;
-
- sys>grant select on scott.MLOG$_EMP to mvl;
- 授予权限
- sys>grant on commit refresh on scott.emp to mvl;
- 创建快速刷新且提交后立刻同步的物化视图
- mvl>create materialized view empf1 refresh fast on commit as select * from scott.emp;
- 验证
- scott>update emp set sal = sal + 2;
- scott>commit;
- 可以看到已经同步
- mvl>select * from empf1;
fast+start with next刷新
- mvl>create materialized view empf2 refresh fast start with sysdate next sysdate+1/1440 as select * from scott.emp;
- 验证
- scott>update emp set sal = sal + 2;
- scott>commit;
- 1分钟之后可以看到已经同步
- mvl>select * from empf1;
可更新物化视图
- mvl>create materialized view empf3 refresh fast for update start with sysdate next sysdate+1/1440 as select * from scott.emp;