一,为什么要使用物化视图(materialized view)
答,类似于杀毒软件,我们只需要在固定时间升级一下病毒库,然后就可以利用杀毒软件所带来的好处了,没有必要每次杀毒都调用瑞星公司总部的杀毒服务器。从而即满足了自己的需要也减少了网络的传输。
二,物化视图分类
物化视图总体可以分为readonly型和readwrite型,readonly指的是创建的物化试图不能进行DML操作,而readwrite型则可以进行DML操作,可以基于mast表,view,synonym上建立物化视图。物化视图有两种方法refresh数据,一种是fast,一种是complete
1,创建readwrite型物化视图(含选项for update)
create materialized view message_view
refresh fast with rowid for update
as
select * from userid.message@dblink_tmp
where market = ‘B’;
2,创建readonly型物化视图
create materialized view message_view
as
select * from userid.message@dblink_tmp;
where market = ‘B’;
三,因为物化视图和视图不一样,我们只能在定期更新物化视图以同步实际表数据
exec dbms_mview.refresh(list=>'message_view',method='C');
或者
begin
dbms_mview.refresh(list=>'message_view',method='C');
end;
/
四,删除物化视图
drop snapshot message_view;
或者
drop materialized view message_view;
特别申明:
1,基于mast表建立materialized view如果是refresh fast则需要建立materialized view log,如果是complete则不需要建立
2,创建物化视图时,如果不带refresh with rowid,则默认的是refresh with primary key,如果参照表没有主键约束会报ORA-12014错误
然而如果是基于synonym创建物化视图则不受此约束。
3,基于synonym尚创建物化视图必须是readonly型的,不能含参数for update,否则会报ORA-12013错误