<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    為了對物化視圖的一些性能進行測試,做了幾個簡單的實驗:
    ?
    ?
    1、首先在實例A中創建表T8:
    ?

    create table t8 (i int primary key ,a number ,n varchar2 ( 100 ));

    insert into t8 values ( 1 , 10 , 'aaaaaaaaaaa' );

    insert into t8 values ( 2 , 20 , 'bbbbbbbbbbb' );

    insert into t8 values ( 3 , 30 , 'ccccccccccc' );

    insert into t8 values ( 4 , 40 , 'ddddddddddd' );

    insert into t8 values ( 5 , 50 , 'eeeeeeeeeee' );

    insert into t8 values ( 6 , 60 , 'fffffffffff' );

    insert into t8 values ( 7 , 70 , 'ggggggggggg' );

    commit ;

    ?

    2、在實例B中創建A的DBLINK temp_link

    ?

    create public database link temp_link

    connect to wxq identified by wxq

    using 'SID' ;

    ?

    3、在實例B中創建物化視圖wxq_mv:

    ?

    create materialized view wxq_mv

    tablespace wxq_tbs

    build deferred ? -- 延遲刷新不立即刷新 ,immediate 為立即刷新

    refresh force ?? -- 如果可以快速刷新則進行快速刷新,否則完全刷新

    on demand ?????? -- 按照指定方式刷新,遠程復制不能使用 commit

    start with to_date( '10-09-2008 16:45:10' , 'dd-mm-yyyy hh24:mi:ss' )

    next sysdate + 1

    with primary key

    as

    select t.*, sysdate mydate from t8@temp_link t;

    ?

    注1:這個過程遇到一個錯誤,在next子句后面加了注釋后編譯報錯,暈,搞了N久才發現。

    注2:發現在MV自動自制JOB后到了時間沒有觸發,查了下資料,是JOB_QUEUE_INTERVA參數設置為0,alter system set job_queue_processes=10后可以自動運行。

    注3:手動運行job——execute dbms_job.run(21)

    ?

    ?

    4、檢查數據:

    ?

    執行job刷新視圖后查詢數據:

    ?

    SQL> execute dbms_job.run(26);
    ?
    PL/SQL procedure successfully completed

    ?

    SQL> column i format a5
    SQL> column a format a5

    SQL> column n format a15

    SQL> column mydate format a20
    ?
    SQL> select * from wxq_mv;
    ?
    ??? I???? A N?????????????? MYDATE
    ----- ----- --------------- --------------------
    ??? 1??? 10 aaaaaaaaaaa???? 2008-9-10 17:41:38
    ??? 2??? 20 bbbbbbbbbbb???? 2008-9-10 17:41:38
    ??? 3??? 30 ccccccccccc???? 2008-9-10 17:41:38
    ??? 4??? 40 ddddddddddd???? 2008-9-10 17:41:38
    ??? 5??? 50 eeeeeeeeeee???? 2008-9-10 17:41:38
    ??? 6??? 60 fffffffffff???? 2008-9-10 17:41:38
    ??? 7??? 70 ggggggggggg???? 2008-9-10 17:41:38
    ?
    7 rows selected

    ?

    在A實例中修改數據:

    ?

    SQL> update t8 set a=100 where i=1;
    ?
    1 row updated
    ?
    SQL> commit;
    ?
    Commit complete

    ?

    再從B實例中查詢數據:

    ?

    SQL> execute dbms_job.run(26);
    ?
    PL/SQL procedure successfully completed
    ?
    SQL> select * from wxq_mv;
    ?
    ??? I???? A N?????????????? MYDATE
    ----- ----- --------------- --------------------
    ??? 1?? 100 aaaaaaaaaaa???? 2008-9-10 17:47:20
    ??? 2??? 20 bbbbbbbbbbb???? 2008-9-10 17:47:20
    ??? 3??? 30 ccccccccccc???? 2008-9-10 17:47:20
    ??? 4??? 40 ddddddddddd???? 2008-9-10 17:47:20
    ??? 5??? 50 eeeeeeeeeee???? 2008-9-10 17:47:20
    ??? 6??? 60 fffffffffff???? 2008-9-10 17:47:20
    ??? 7??? 70 ggggggggggg???? 2008-9-10 17:47:20
    ?
    7 rows selected

    ?

    從時間可以看到,是全部刷新的

    ?

    ?

    5、創建log后檢查數據:

    ?

    在A實例中創建materialized view log

    ?

    SQL> create materialized view log on t8 with rowid;

    Materialized view log created

    ?

    在B實例中建立的物化視圖:

    ?

    SQL> create materialized view wxq_mv2
    ? 2? tablespace wxq_tbs
    ? 3? build deferred? --延遲刷新不立即刷新,immediate為立即刷新
    ? 4? refresh fast??? --使用增量刷新
    ? 5? on demand?????? --按照指定方式刷新
    ? 6? start with to_date('10-09-2008 16:45:10', 'dd-mm-yyyy hh24:mi:ss')
    ? 7? next sysdate + 1
    ? 8? with rowid
    ? 9? as
    ?10? select * from t8@temp_link?t;
    ?
    Materialized view created

    ?

    注:這里不能加入sysdate字段了,因為遠程快速刷新只能是簡單的表復制

    ??? 只有創建materialized view log 后才可以refresh fast

    ?

    ?

    6、查看已經創建的materialized view:

    ?

    SQL> select query from dba_mviews where mview_name='WXQ_MV2';
    ?
    QUERY
    --------------------------------------------------------------------------------
    SELECT "T"."I" "I","T"."A" "A","T"."N" "N" FROM
    "T8"@TEMP_LINK.SINATAY.COM "T"

    ?

    發現已經把*自動轉化為每個列名,這跟view是一樣的

    所以,當遠程數據庫A增加列時,對本地B的mv不產生影響,B將忽略新增的列

    但是當A改變原有的列名,或刪除了B的mv引用的列名時,mv更新時就會報錯

    ?

    ?

    7、物化視圖將新建一個表、一個job:

    ?

    SQL> select owner,table_name,tablespace_name from dba_tables where table_name='WXQ_MV2';
    ?
    OWNER????????????????????????? TABLE_NAME???????????????????? TABLESPACE_NAME
    ------------------------------ ------------------------------ ------------------------------
    WANGXIAOQI???????????????????? WXQ_MV2??????????????????????? WXQ_TBS
    ?
    SQL>?desc WXQ_MV2
    Name Type????????? Nullable Default Comments
    ---- ------------- -------- ------- --------
    I??? INTEGER????????????????????????????????
    A??? NUMBER??????? Y????????????????????????
    N??? VARCHAR2(100) Y???

    ?

    SQL> select job,log_user,last_date,last_sec,next_date,next_sec,interval,what from user_jobs;
    ?
    JOB?? LOG_USER????????LAST_DATE????LAST_SEC????NEXT_DATE?? NEXT_SEC??INTERVAL???? WHAT
    ----- --------------- ------------ ----------- ----------- --------- ------------ ----------------------------------------------

    29??? WANGXIAOQI??????2008-9-17? ? 09:48:10????2008-9-17?? 14:04:12??sysdate + 1? dbms_refresh.refresh('"WANGXIAOQI"."WXQ_MV2"');

    ?

    每個mv都會對應一個實體表和一個job

    ?

    ?

    8、查看是否會創建主鍵:

    ?

    當原始表T8沒有主鍵時,MV只能創建為with rowid模式

    當然生成的mv table也是沒有主鍵的

    ?

    當原始表T8含有主鍵時,必須要重新生成log,然后再創建mv時必須使用with primary key

    ?

    SQL> alter table t8 add constraint t8_key primary key(i);
    ?
    Table altered
    ?
    SQL> drop materialized view log on t8 ;
    ?
    Materialized view log dropped
    ?
    SQL> create materialized view log on t8 ;
    ?
    Materialized view log created

    SQL> select constraint_name,table_name,status from user_constraints where table_name='T8';
    ?
    CONSTRAINT_NAME??????????????? TABLE_NAME???????????????????? STATUS
    ------------------------------ ------------------------------ --------
    T8_KEY???????????????????????? T8???????????????????????????? ENABLED

    ?

    然后在B創建MV:

    ?

    SQL> create materialized view wxq_mv2
    ? 2? tablespace wxq_tbs
    ? 3? build deferred? --延遲刷新不立即刷新,immediate為立即刷新
    ? 4? refresh fast??? --使用增量刷新
    ? 5? on demand?????? --按照指定方式刷新
    ? 6? start with to_date('10-09-2008 16:45:10', 'dd-mm-yyyy hh24:mi:ss')
    ? 7? next sysdate + 1
    ? 8? with?primary key?? --使用rowid時報錯
    ? 9? as
    ?10? select * from t8@temp_link?t;
    ?
    Materialized view created

    ?

    SQL> select constraint_name,table_name,status from dba_constraints where table_name='WXQ_MV3';
    ?
    CONSTRAINT_NAME??????????????? TABLE_NAME???????????????????? STATUS
    ------------------------------ ------------------------------ --------
    T8_KEY???????????????????????? WXQ_MV3??????????????????????? ENABLED

    ?

    生成的表中已經含有主鍵和索引。

    ?

    ?

    ?

    9、關于使用on prebuilt table在已有表上建立MV的操作和應用:

    ?

    先創建一個新表T2:

    ?

    SQL> create table t2 (a int primary key,b varchar2(10));
    ?
    Table created

    ?
    創建對應的MV:


    SQL> create materialized view wxq_mv as select * from t2;
    ?
    Materialized view created

    ?
    已經生成了一個table和一個MV:


    SQL> select object_name,object_type from user_objects where object_name='WXQ_MV';
    ?
    OBJECT_NAME????????????????????????????????????????????????????????????????????? OBJECT_TYPE
    -------------------------------------------------------------------------------- ------------------
    WXQ_MV?????????????????????????????????????????????????????????????????????????? TABLE
    WXQ_MV?????????????????????????????????????????????????????????????????????????? MATERIALIZED VIEW
    ?

    刪除MV:


    SQL> drop materialized view wxq_mv;
    ?
    Materialized view dropped
    ?

    發現table和MV都已經被刪除:


    SQL> select object_name,object_type from user_objects where object_name='WXQ_MV';
    ?
    OBJECT_NAME????????????????????????????????????????????????????????????????????? OBJECT_TYPE
    -------------------------------------------------------------------------------- ------------------
    ?

    下面使用on prebuilt table來創建MV:
    先建一個新表T3用來存放MV


    SQL> create table t3 as select * from t2;
    ?
    Table created
    ?

    T3上建立MV:


    SQL> create materialized view T3 on prebuilt table as select * from t2;
    ?
    Materialized view created
    ?

    查看新建的MV,還是有table:


    SQL> select object_name,object_type from user_objects where object_name='T3';
    ?
    OBJECT_NAME????????????????????????????????????????????????????????????????????? OBJECT_TYPE
    -------------------------------------------------------------------------------- ------------------
    T3?????????????????????????????????????????????????????????????????????????????? TABLE
    T3?????????????????????????????????????????????????????????????????????????????? MATERIALIZED VIEW
    ?

    再刪除MV:


    SQL> drop materialized view t3;
    ?
    Materialized view dropped
    ?

    發現T3任然保留,其數據也保留到最后更新狀態:


    SQL> select object_name,object_type from user_objects where object_name='T3';
    ?
    OBJECT_NAME????????????????????????????????????????????????????????????????????? OBJECT_TYPE
    -------------------------------------------------------------------------------- ------------------
    T3?????????????????????????????????????????????????????????????????????????????? TABLE

    ?

    應用說明:可以先使用表基礎上的MV來進行增量更新,當需要切換數據庫數據時,斷開源數據庫,然后刪除MV即可

    缺點是MV針對的是對象,如果對象很多的話,建立起來比較麻煩。

    ?

    ?





    -The End-

    posted on 2008-09-04 11:22 decode360-3 閱讀(540) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 一个人免费观看日本www视频| 亚洲人成网址在线观看 | 亚洲熟妇无码乱子AV电影| 久久美女网站免费| 亚洲天堂男人影院| 中文字幕亚洲天堂| 国产成人无码免费网站| 自拍偷自拍亚洲精品第1页| 一区二区三区视频免费观看| 亚洲国产天堂久久综合网站| 暖暖日本免费在线视频| 国产一区二区免费视频| 色天使色婷婷在线影院亚洲| 亚洲Av无码国产情品久久| 美女内射无套日韩免费播放| 美美女高清毛片视频黄的一免费| 国产成人免费一区二区三区| 特a级免费高清黄色片| 亚洲国产综合人成综合网站00| 亚洲精品国精品久久99热| 怡红院免费全部视频在线视频 | 国产一区二区免费视频| 亚洲av无码专区在线观看亚| 亚洲图片在线观看| 亚洲精品国产V片在线观看| 日韩视频在线精品视频免费观看| 亚洲一日韩欧美中文字幕在线| 国产精品色午夜视频免费看 | 亚洲 另类 无码 在线| 亚洲综合免费视频| 亚洲aⅴ无码专区在线观看春色| 亚洲国产精品无码专区影院| 青青青国产在线观看免费| 一级有奶水毛片免费看| 亚洲毛片免费观看| 成人午夜亚洲精品无码网站| 午夜毛片不卡高清免费| 黄色网址免费大全| 美女内射无套日韩免费播放| 成人性生交大片免费看中文| 亚洲精品视频免费|