首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

物化视图的容易应用

2012-07-23 
物化视图的简单应用1.创建示例表?create table t1(t11 varchar2(10),t12 varchar2(10),t13 varchar2(10))

物化视图的简单应用

1.创建示例表

?

create table t1(t11 varchar2(10),t12 varchar2(10),t13 varchar2(10));alter table T1  add 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 T2  add 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;begin  select 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 存储过程.调用的时间间隔可以自行设定.?

?

?

?

?

?

?

?

?

?

?

热点排行