本次测试为实现将102上sjzfyglzs的users_test表数据通过物化视图同步至104上sjzfygl的users_test表中
每半天同步一次 1/2
操作步骤如下:
1、登录102sjzfyglzs,创建物化视图日志并指定表空间
create tablespace mlog 
datafile '/u02/mlog.dbf' size 1000M 
autoextend on 
maxsize  2000M
extent management local
segment space management auto;CREATE MATERIALIZED VIEW LOG ON users_test
tablespace mlog;2、使用system登录104数据库,对sjzfygl授权
grant create database link to SJZFYGL;
grant create materialized view to SJZFYGL;
grant global query rewrite to SJZFYGL;
3、登录sjzfygl创建数据库链和物化视图
create public database link db_102_sjzfyglzs connect to sjzfyglzs 
identified by "sjzfyglzs" using '192.168.9.102:1521/oracle';
create materialized view users_test ON PREBUILT TABLE
TABLESPACE m --保存表空间
BUILD DEFERRED --延迟刷新不立即刷新
refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新
on demand --按照指定方式刷新
start with to_date('18-9-2012 16:00:10', 'dd-mm-yyyy hh24:mi:ss') --第一次刷新时间
next TRUNC(SYSDATE+1)+18/24 --刷新时间间隔
as select * from users_test@db_102_sjzfyglzs ;问题就在这里了,我是第一次做物化视图,上面的选项都是东凑西凑拼出来的。在执行物化视图创建语句的时候提示我missing keybord这次只是要做测试,真是的目的是要同步很多表大约40多个。我的方案合理吗?如果不合理请大家教教我 

解决方案 »

  1.   

    如果没有建前置表的话,应该不用ON PREBUILT TABLE子句吧
      

  2.   

    --创建物化视图时,添加LOG用法示例
    CREATE MATERIALIZED VIEW LOG ON cz_dw_dict_medicine
    WITH ROWID ,SEQUENCE(ITEM_CODE,ITEM_NAME,MAKER,ITEM_SPEC,VALIDTIME_START,VALIDTIME_END) including new values
      

  3.   

    是这样的 我的是有“前置表”users_test的,和元库的表名一样。 就是把物化视图创建到前置表上经过这两天我试验 结果如下
    1、
    当物化视图的创建语句为
    create materialized view users_test1
    refresh force
    as select * from users_test@db_102_sjzfyglzs;
    这是数据在视图创建完成后即可同步一份过来,待下次需同步数据时手动执行的
    execute dbms_mview.refresh('users_test1')
    这样也可以实现数据的同步 
    2、当物化视图的创建语句为
    create materialized view users_test
    ON PREBUILT TABLE
    refresh force 
    as select * from users_test@db_102_sjzfyglzs;
    这样数据不能即刻同步过来,我手动执行刷新语句数据还是不能同步过来
    不知道为什么
    我需要使用第二种方式,就是创建在前置表上