oracle 物化视图 materialized view

 


--创建物化视图
1.首先在源表用户下面建立基于物化视图的日志,用于记录刷新记录。
create MATERIALIZED VIEW LOG ON FDDEF11   
WITH PRIMARY KEY  
INCLUDING NEW VALUES;

2.建立dblink
3.建立FAST 物化视图,只能采用子查询模式,且查询条件中必须是主键

CREATE MATERIALIZED VIEW SPXX_FD123
REFRESH FAST ON DEMAND
START WITH TO_DATE('16-05-2014 07:32:30', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE + (1/(24*60)) 
AS
SELECT A.* FROM CSUSER.SPXX_FD@ZDTOPOS A
where exists (select 1 from FDDEF11@ZDTOPOS  B WHERE A.FDBH=B.FDBH AND  POSID=1)

create index INX_JGDDEF_FDBH on JGDDEF (FDBH);

--
物化视图日志
物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,Oracle会自动在物化视图日志名称后面加上数字作为序号。
物化视图日志在建立时有多种选项:可以指定为ROWID、PRIMARY KEY和OBJECT ID几种类型,同时还可以指定SEQUENCE或明确指定列名。
上面这些情况产生的物化视图日志的结构都不相同。
              

任何物化视图都会包括的4列:
SNAPTIME$$:用于表示刷新时间。
DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE。
OLD_NEW$$:用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作。
CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段。
如果WITH后面跟了ROWID,则物化视图日志中会包含:M_ROW$$:用来存储发生变化的记录的ROWID。
如果WITH后面跟了PRIMARY KEY,则物化视图日志中会包含主键列。
如果WITH后面跟了OBJECT ID,则物化视图日志中会包含:SYS_NC_OID$:用来记录每个变化对象的对象ID。
如果WITH后面跟了SEQUENCE,则物化视图日子中会包含:SEQUENCE$$:给每个操作一个SEQUENCE号,从而保证刷新时按照顺序进行刷新。
如果WITH后面跟了一个或多个COLUMN名称,则物化视图日志中会包含这些列。

4.在目标数据库,防止物化视图本身刷新机制出问题,重新建立job刷新

/***********在目标数据库,防止物化视图本身刷新机制出问题,重新建立job刷新*****/
create or replace procedure CSPUB.refresh_BFCONFIG Is
   v_msg Varchar2(500);
   --v_num Varchar2(14);
 begin
   --防止视图失败,重新编译物化视图
   execute immediate 'alter materialized view BFCONFIG compile';
   --增量刷新物化视图
   begin
     dbms_mview.refresh('BFCONFIG');
   Exception
     When Others Then
       v_msg := Sqlerrm;
   end;
       Commit;
   end  refresh_BFCONFIG;
/   

/**********制作刷新该过程的语句********************************/
 DECLARE   100 NUMBER  ;
begin
  dbms_job.isubmit(100,'refresh_BFCONFIG;',SYSDATE,'SYSDATE+30/1440');
END;
/

5.刷新物化视图 --命令行

EXEC dbms_mview.refresh('SPXX_FD','F');     ---快速刷新

BEGIN
dbms_mview.refresh('SPXX_FD','C');     ---全部刷新
END;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值