1.我创建的物化视图没有指定为自动刷新,请问如何将物化视图修改为自动刷新模式?请给出示例。
2.如何查看已定义的物化视图的sql结构? 

解决方案 »

  1.   


    REFRESH 子句
                [refresh [fast|complete|force]
                [on demand | commit]
                [start with date] [next date]
                [with {primary key|rowid}]]默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明: 创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。 查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。 刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。
    ON DEMAND和ON COMMIT物化视图的区别在于其刷新方法的不同,ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新,即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。
    Oracle 物化视图
    http://blog.csdn.net/tianlesoftware/archive/2009/10/22/4713553.aspx
      

  2.   

    用JOB吧。
    BEGIN
      SYS.DBMS_JOB.ISUBMIT
      ( job       => 723 
       ,what      => 'BEGIN     dbms_Mview.refresh(''mv_name'');
     END;'
       ,next_date => to_date('28-08-2009 06:00:00','dd/mm/yyyy hh24:mi:ss')
       ,interval  => 'TRUNC(SYSDATE+1)+1/4'
       ,no_parse  => FALSE
      );
    COMMIT;
    END;
    /