Oracle 物化视图

oracle 中常常会用物化视图来同步数据或者迁移数据。在dbms_mview中刷新过程,可以使用并行刷新的特性,这样有效的减少了完全刷新的时间。

  • dbms_mview('表名','F') 快速刷新,也是增量刷新,即只对异动数据进行刷新
  • dbms_mview('表名','C') 完全刷新
步骤:
create materialized view log on  test;  ---创建物化视图日志,关联表为test,默认为test有主键,否则用with rowid 作为日志的主键
create table mv_test as select * from test@dblink where 1=2;  --创建与源表相同的表结构
create materialized view mv_test on prebuilt table fresh fast as select * from test@dblink;  --创建物化视图
比如需要刷新一张mv_test的物化视图
begin
  dbms_mview.refresh('mv_test','f');
  --dbms_mview.refresh(TAB=>'MV_TEST',METHOD=>'COMPLETE',PARALLELISM=>8)
end; 
  • 示例
grant create materialized view to scott; --给scott 用户授权创建物化视图的权限 
grant query rewrite to scott; --给scott 用户授权查、读、写权限
grant create any table to scott; --给scott用户授权创建表的权限
grant select any table to scott; --授权scott 查询表权限

--切换到scott 用户下

--1.创建物化视图日志
create materialized view log on dept with rowid; --在部门表上创建物化视图日志,没有主键的情况下可以使用rowid,这里使用rowid
create materialized view log on emp with rowid; --同上
--此时会生成 MLOG$_DEPT 和MLOG$_MEP
select * from MLOG$_DEPT;  --这两个表主要用于监控主表(dept)数据的变化,并缓存变化数据,变化数据同步到物化视图后即消失

--2. 创建物化视图语句
create materialized view mtrlview_test
build immediate  --立刻创建物化视图,也可以选 build deffered 即延迟至使用时再创建
refresh fast  --刷新数据类型为fast
on commit  --在基表更新后立即更新物化视图
enable query rewrite  --启用查询重写功能
as   --查询体
select d.dname,d.loc,e.ename,e.job,e.mgr,e.hiredate,e.sal,d.rowid d_rowid,e.rowid e_rowid
from dept d,emp e
where e.deptno=d.deptno(+);

-- 查询物化视图
select * from mtrlview_test;
posted @   丹心石  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2021-04-17 依赖注入-Ninject 与Autofac 用法比较
点击右上角即可分享
微信分享提示