暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle物化视图创建于管理

南风悠然 2018-02-08
496
  1. create materialized view [view_name]

  2. refresh [fast|complete|force]

  3. [

  4. on [commit|demand] |

  5. start with (start_time) next (next_time)

  6. ]

  7. as

  8. {创建物化视图用的查询语句}


  9. 以上是Oracle创建物化视图(Materialized View,以下简称MV)时的常用语法,各参数的含义如下:
     
    1.refresh [fast|complete|force] 视图刷新的方式:


  10. fast: 增量刷新.假设前一次刷新的时间为t1,那么使用fast模式刷新物化视图时,只向视图中添加t1到当前时间段内,主表变化过的数据.为了记录这种变化,建立增量刷新物化视图还需要一个物化视图日志表。create materialized view log on (主表名)。(多张表时,此语句也生效,创建后,原来的表中会多出两类视图表:MLOG$_table_name和RUPD$_table_name

  11.  

  12. complete:全部刷新。相当于重新执行一次创建视图的查询语句。


  13. force: 这是默认的数据刷新方式。当可以使用fast模式时,数据刷新将采用fast方式;否则使用complete方式。
     
    2.MV数据刷新的时间:

  14. on demand:在用户需要刷新的时候刷新,这里就要求用户自己动手去刷新数据了(也可以使用job定时刷新)
    on commit:当主表中有数据提交的时候,立即刷新MV中的数据;
    start ……:从指定的时间开始,每隔一段时间(由next指定)就刷新一次;


  15. 比如说我们要全刷新一张mv_test物化视图:

  16. begin
         dbms_mview.refresh(TAB=>'MV_TEST',
                                           METHOD=>'COMPLETE',
                                           PARALLELISM=>8);
    end;
    /

  17. 增量刷新就不需要使用什么并行了,通常情况下,是没有那个必要的。

  18. begin
         dbms_mview.refresh(TAB=>'MV_TEST',
                                           METHOD=>'FAST',
                                           PARALLELISM=>1);
    end;
    /

  19.  

  20. 或者,也可以这样执行:

  21. exec dbms_mview.refresh('MV_TEST','F');

  22.  

  23. 写此文,只是帮自己记住一些基本的语法,到时可以参照。

  24.  

  25. dbms_mview.refresh('表名', 'F') --快速刷新,也就是增量刷新
    dbms_mview.refresh('表名', 'C')--完全刷新


  26. 以下是我创建物化视图的一个过程记录(两台服务器A和B,其中,要把数据从A节点同步到B节点上):

  27.  

  28. 1.在A上先创建view log:

  29.  

  30. SQL> create materialized view log on TEST1;

  31. Materialized view log created.


  32. SQL> create materialized view log on TEST2;

  33. Materialized view log created.


  34. 2.在B上创建通向A的db link:

  35.  

  36. SQL>grant CREATE DATABASE LINK,CREATE PUBLIC DATABASE LINK to test;


  37. Grant succeeded.


  38. SQL> create database link db_link_A connect to A_user identified by "A_user_passwd" using 'db_A01'; 


  39. Database link created.


  40. SQL> create materialized view mv1_test1 refresh fast on demand as select * from test1@db_link_A ;


  41. Materialized view log created.


  42. SQL> create materialized view mv1_test2 refresh fast on demand as select * from test2@db_link_A ;


  43. Materialized view log created.


  44. SQL> exec dbms_mview.refresh('MV1_test1','F');


  45. SQL> exec dbms_mview.refresh('MV1_test2','F');

  46. 3.在B节点查询同步数据的情况:

  47.  

  48. SQL> select mview_name, last_refresh_date, staleness from user_mviews;

  49. MVIEW_NAME LAST_REFRESH_DATE STALENESS

  50. ------------------------------ ------------------- -------------------


  51. MV1_TEST1 2021-03-02 11:22:14 UNDEFINED

  52. MV1_TEST2 2021-03-02 11:22:22 UNDEFINED


  53. 4.在A节点上查询同步数据日志情况:

  54.  

  55. SQL> select log_owner,master,log_table,PRIMARY_KEY,LAST_PURGE_DATE,LAST_PURGE_STATUS from user_mview_logs;


  56. LOG_OWNER MASTER LOG_TABLE PRI LAST_PURGE_DATE LAST_PURGE_STATUS

  57. ---------- ------------------------------ ------------------------------ --- ------------------- -----------------


  58. TCODE TEST1                  MLOG$_TEST1                YES 2012-03-01 14:01:39 0

  59. TCODE TEST2                  MLOG$_TEST2                YES 2012-03-01 14:01:39 0

1.1 查看物化视图日志

 select * from dba_mview_logs ;


1.2 查看物化视图信息

SELECT *  FROM dba_MVIEWS;

1.3 查看物化视图上次刷新时间

SELECT * FROM dba_MVIEW_REFRESH_TIMES;

2.1 确认主表大小

select segment_name,segment_type,bytes/1024/1024 MB  from dba_segments where lower(segment_name)='fwcatns_boatmap';

2.2 确认主表是否已有物化视图日志

select * from dba_mview_logs  where lower(master)='fwcatns_pdd_rdstrip' ;

2.3 确认主表索引情况

物化视图不会自动创建原表索引,我们这里先记录其索引信息

2.4 创建物化视图日志(主表)

create materialized view log on SAPSR3.ZTMM0117 with rowid;

2.5 创建物化视图

create materialized view SAPSR3.ZTMM0057tablespace sapsr3
refresh fast on demandwith rowidstart with sysdate next SYSDATE + 10/1440 enable query rewriteasselect *from SAPSR3.ZTMM0057@SAPPROD;

2.5 创建索引

这里创建在 2.2 中获取的索引,如果需要的话

3. 删除物化视图:

3.1 删除主表物化视图日志

DROP MATERIALIZED VIEW LOG ON SAPSR3.GG_ZLX_ZHU;

3.2 删除物化视图

DROP MATERIALIZED VIEW SAPSR3.GG_ZLX_ZHU;

4. 手动刷新物化视图

EXEC DBMS_MVIEW.Refresh('SPCR.DDM_CUST','C');EXEC DBMS_MVIEW.Refresh('SPCR.DDM_CUST','F');exec dbms_ijob.run(4)

5. 重新编译物化视图

ALTER MATERIALIZED VIEW mview_name COMPILE;

6. 更改刷新时间

alter materialized view sapsr3.inob refresh start with sysdate next sysdate+10/1440


文章转载自南风悠然,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论