物化视图的简单应用
1.创建示例表create table t1(t11 varchar2(10),t12 varchar2(10),t13 varchar2(10));alter table T1add constraint pk_t11 primary key (T11);--主键是必须地,后面用得到insert into t1(t11,t12,t13) values ('a1','aa','aaa') ;insert into t1(t11,t12,t13) values ('a2','aa','aaa') ;insert into t1(t11,t12,t13) values ('a3','aa','aaa') ;insert into t1(t11,t12,t13) values ('a4','aa','aaa') ;insert into t1(t11,t12,t13) values ('a5','aa','aaa') ;insert into t1(t11,t12,t13) values ('a6','aa','aaa') ;commit ;create table t2(t21 varchar2(10) ,t22 varchar2(10),t23 varchar2(10));alter table T2add constraint pk_t21 primary key (T21);--主键是必须地,后面用得到insert into t2(t21,t22,t23) values ('a1','bb','bbb') ;insert into t2(t21,t22,t23) values ('a2','bb','bbb') ;insert into t2(t21,t22,t23) values ('a3','bb','bbb') ;insert into t2(t21,t22,t23) values ('a4','bb','bbb') ;insert into t2(t21,t22,t23) values ('a5','bb','bbb') ;insert into t2(t21,t22,t23) values ('a6','bb','bbb') ;commit ;
2.创建物化视图以物化视图日志
例1(个人推荐使用)./*要想实时刷新并且是增量刷新必须创建物化视图日志,因为物化视图是根据日志与基表进行沟通的,创建物化视图日志的前提是必须在基表中建立主键*/CREATE MATERIALIZED VIEW LOG ON t1 ; CREATE MATERIALIZED VIEW LOG ON t2 ;--创建物化视图create materialized view MV_T--物化视图名称TABLESPACE JWZH --保存表空间BUILD DEFERRED --延迟刷新不立即刷新refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新on demand --按照指定方式刷新(可以用DBMS_MVIEW.REFRESH或者Job的方式刷新)start with sysdate --第一次刷新时间(也可以使用to_date('24-11-2005 18:00:10', 'dd-mm-yyyy hh24:mi:ss'))--刷新时间间隔,大概30分钟刷新一次(可以改成1/720,大概5分钟左右刷新一次),经过测试在oracle10g中指定BUILD DEFERRED参数也是可以自动刷新的next sysdate + 1/48 asselect t1.*,t2.* from t1,t2 where t1.t11 = t2.t21 ;例2.Create MATERIALIZED VIEW mv_t_demandREFRESH COMPLETE --对整个物化视图进行完全刷新ON DEMAND--立即刷新,影响基表的插入速度START WITH sysdate NEXT SYSDATE + 1/360 ASselect t1.*,t2.* from t1,t2 where t1.t11 = t2.t21 ; 如果第一种方法没有自己刷新,那么可以通用Job的方式刷新物化视图.
-- 用于存放Job的执行时间create table job_execStat (job varchar2(100),start_time date,end_time date);-- Job需要调用的存储过程create or replace procedure ref_mv asstart_time date;end_time date;beginselect sysdate into start_time from dual;exec dbms_mview.refresh('MV_T') ;select sysdate into end_time from dual;insert into job_exedura values('job_execStat',start_time , end_time);commit;end;Job可以在PL/SQL Deve中直接创建并调用 ref_mv 存储过程.调用的时间间隔可以自行设定.
页:
[1]