ITPUB??ì3
2010数据库技术大会
ITPUB论坛 » Oracle数据库管理 » 关于物化视图问题,请教大家。

您有 2 条公共消息
  • 来自: 公共消息 标题: 新开"PLM/PDM产品 ... 内容: 讨论范围包括:产品研发管理(PDM),产品生命周期管理(PLM),工艺/ ...
  • 来自: 公共消息 标题: 2010数据库技术大 ... 内容: “2010数据库技术大会”将于2010年4月2日~4月3日,在北京歌华开元大酒 ...

    标题: 关于物化视图问题,请教大家。
    离线 db2001
    资深会员



    精华贴数 0
    个人空间 0
    技术积分 2764 (681)
    社区积分 1 (45666)
    注册日期 2005-5-9
    论坛徽章:2
    会员2007贡献徽章祖国60周年纪念徽章    
          

    发表于 2005-6-3 17:40 
    关于物化视图问题,请教大家。

    物化视图复制的设置
    主站点:db001.d-link
    物化视图站点:db002.d-link
    主机名:dbmis
    复制用户:dev001

    1. 检查初始化参数
    SQL> connect sys/change_on_install@db001.d-link as sysdba ;
    已连接。
    SQL> show parameter global_names ;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- -------------------------
    global_names                         boolean     TRUE
    SQL> show parameter job;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    job_queue_processes                  integer     20
    SQL> select * from global_name ;

    GLOBAL_NAME
    ------------------------------------------------------------------------------
    DB001.d-link

    SQL>
    SQL> connect sys/change_on_install@db002.d-link as sysdba ;
    已连接。
    SQL> show parameter global_names ;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    global_names                         boolean     TRUE
    SQL> show parameter job;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    job_queue_processes                  integer     10
    SQL> select * from global_name ;

    GLOBAL_NAME
    -----------------------------------------
    DB002.d-link

    SQL>

    2,检查全局数据库名称



    SQL> connect dev001/whoami@db002.d-link  ;
    已连接。
    SQL> select * from dev001.test001@db001 ;

             A B
    ---------- ----------
             1 wui
             2 zyun

    SQL>

    SQL> connect sys/change_on_install@db002.d-link as sysdba ;
    已连接。
    SQL> select owner,db_link from all_db_links ;

    OWNER                DB_LINK
    -------------------- --------------------
    SYS                  DB001.d-link
    PUBLIC               DB001.d-link

    SQL> connect sys/change_on_install@db001.d-link as sysdba ;
    已连接。
    SQL> select owner,db_link from all_db_links ;

    OWNER                DB_LINK
    -------------------- --------------------
    SYS                  DB002.d-link
    PUBLIC               DB002.d-link

    SQL>




    4. 建立主体站点
    SQL> connect system/whoami@db001.d-link ;
    已连接。
    SQL>
    --建立复制管理用户repadmin 并授权
    CREATE USER repadmin IDENTIFIED BY repadmin;
    BEGIN
    DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'repadmin');
    END;
    /
    GRANT COMMENT ANY TABLE TO repadmin;
    GRANT LOCK ANY TABLE TO repadmin;
    GRANT SELECT ANY DICTIONARY TO repadmin;

    --注册传播用户并授权
    BEGIN
    DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 'repadmin');
    END;
    /
    --注册接收用户
    BEGIN
    DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
    username => 'repadmin',
    privilege_type => 'receiver',
    list_of_gnames => NULL);
    END;
    /
    --建立物化视图站点复制管理员的代理用户
    BEGIN
    DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
    username => 'repadmin',
    privilege_type => 'proxy_snapadmin',
    list_of_gnames => NULL);
    END;
    /
    GRANT CREATE SESSION TO repadmin;
    GRANT SELECT ANY TABLE TO repadmin;
    --以复制管理员身份登陆到主站点
    SQL> CONNECT repadmin/repadmin@db001.d-link ;
    BEGIN
    DBMS_DEFER_SYS.SCHEDULE_PURGE (
    next_date => SYSDATE,
    interval => 'SYSDATE + 1/24',
    delay_seconds => 0);
    END;
    /
    commit;
    5. 设置物化视图站点
    SQL> connect system/whoami@db002.d-link ;
    --建立物化视图管理员,并授权
    CREATE USER mvadmin IDENTIFIED BY mvadmin;
    BEGIN
    DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (
    username => 'mvadmin');
    END;
    /
    GRANT COMMENT ANY TABLE TO mvadmin;
    GRANT LOCK ANY TABLE TO mvadmin;
    GRANT SELECT ANY DICTIONARY TO mvadmin;
    --建立传播者,并授权
    BEGIN
    DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 'mvadmin');
    END;
    /
    --建立刷新者,并授权,这里使用mvadmin 用户刷新物化视图
    GRANT CREATE SESSION TO mvadmin;
    GRANT ALTER ANY MATERIALIZED VIEW TO mvadmin;
    --注册接受者
    BEGIN
    DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
    username => 'mvadmin',
    privilege_type => 'receiver',
    list_of_gnames => NULL);
    END;
    /
    --建立PUBLIC 数据库链
    CREATE PUBLIC DATABASE LINK db001 USING 'db001.d-link';
    SQL> CONNECT mvadmin/mvadmin@db002.d-link;
    已连接。
    SQL>CREATE DATABASE LINK db001 CONNECT TO repadmin IDENTIFIED BY repadmin;
    --建立到主站点上复制管理员的数据库链
    --以传播者身份登陆物化视图站点
    BEGIN
    DBMS_DEFER_SYS.SCHEDULE_PURGE (
    next_date => SYSDATE,
    interval => 'SYSDATE + 1/24',
    delay_seconds => 0,
    rollback_segment => '');
    END;
    /
    --设置将修改推入到主站点的job
    BEGIN
    DBMS_DEFER_SYS.SCHEDULE_PUSH (
    destination => 'db001.d-link',
    interval => 'SYSDATE + 1/24',
    next_date => SYSDATE,
    stop_on_error => FALSE,
    delay_seconds => 0,
    parallelism => 0);
    END;
    /
    commit;
    6. 建立主体组
    --以复制管理员身份登陆复制站点
    CONNECT repadmin/repadmin@db001.d-link ;
    --建立名为rep_test 的复制组
    BEGIN
    DBMS_REPCAT.CREATE_MASTER_REPGROUP (
    gname => 'reptest');
    END;
    /
    --将复制对象增加到复制组中
    BEGIN
    DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
    gname => 'rep_test',
    type => 'TABLE',
    oname => 'test001',
    sname => 'dev001',
    use_existing_object => TRUE,
    copy_rows => FALSE);
    END;
    /
    --生成复制支持
    BEGIN
    DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
    sname => 'dev001',
    oname => 'test001',
    type => 'TABLE',
    min_communication => TRUE);
    END;
    /
    --开始复制
    BEGIN
    DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
    gname => 'reptest');
    END;
    /
    commit;
    7. 建立物化视图

    CONNECT dev001/whoami@db001.d-link ;
    --建立物化视图日志表,FAST 刷新方式必须要求建立物化视图日志
    CREATE MATERIALIZED VIEW LOG ON dev001.test001;
    --建立复制用户到主站点代理刷新者的数据库链
    CONNECT dev001/whoami@db002.d-link;
    CREATE DATABASE LINK db001 CONNECT TO repadmin IDENTIFIED BY repadmin;
    --建立物化视图组
    CONNECT mvadmin/mvadmin@db002.d-link ;
    --物化视图组必须和复制站点上的复制组名称相同
    BEGIN
    DBMS_REPCAT.CREATE_MVIEW_REPGROUP (
    gname => 'reptest',
    master => 'db001.d-link',
    propagation_mode => 'ASYNCHRONOUS');
    END;
    /
    -----------------------------------------------------
    错误提示:
    SQL> begin
      2  dbms_repcat.create_mview_repgroup(
      3  gname=>'reptest',
      4  master=>'db001.d-link',
      5  propagation_mode => 'ASYNCHRONOUS');
      6  end;
      7  /
    begin
    *
    ERROR 位于第 1 行:
    ORA-23313: 在 PUBLIC 没有控制对象组 "REPTEST"."db001.d-link"
    ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 105
    ORA-06512: 在"SYS.DBMS_REPCAT_SNA_UTL", line 1690
    ORA-06512: 在"SYS.DBMS_REPCAT_SNA", line 64
    ORA-06512: 在"SYS.DBMS_REPCAT", line 1262
    ORA-06512: 在line 2


    SQL>

    解决方法:(查知道说是因为目前主站属于静默模式)
    BEGIN
    DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
    gname => 'reptest');
    END;
    /
    但还是无效,一样报错,上午这样执行一下后,建立物化视图组是通过了的,奇怪,
    现在把所有都删除了重新建立,报错误了。
    SQL> connect repadmin/repadmin@db001.d-link ;
    已连接。
    SQL> select gname, master, status from dba_repgroup;

    GNAME                          M STATUS
    ------------------------------ - ---------
    REPTEST                        Y NORMAL

    按照论坛上别人回答的
    SQL> execute dbms_repcat.suspend_master_activity (gname => 'reptest');

    PL/SQL 过程已成功完成。

    SQL> connect mviewadmin/mviewadmin@db002.d-link ;
    已连接。
    SQL> begin
      2  dbms_repcat.create_mview_repgroup(
      3  gname=>'reptest',
      4  master=>'db001.d-link',
      5  propagation_mode=>'ASYNCHRONOUS');
      6  end;
      7  /
    begin
    *
    ERROR 位于第 1 行:
    ORA-23313: 在 PUBLIC 没有控制对象组 "REPTEST"."db001.d-link"
    ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 105
    ORA-06512: 在"SYS.DBMS_REPCAT_SNA_UTL", line 1690
    ORA-06512: 在"SYS.DBMS_REPCAT_SNA", line 64
    ORA-06512: 在"SYS.DBMS_REPCAT", line 1262
    ORA-06512: 在line 2


    SQL>
    -----------------------------------------------------
    --创建刷新组
    BEGIN
    DBMS_REFRESH.MAKE (
    name => 'mvadmin.rep_refresh',
    list => '',
    next_date => SYSDATE,
    interval => 'SYSDATE + 1/24',
    implicit_destroy => FALSE,
    rollback_seg => '',
    push_deferred_rpc => TRUE,
    refresh_after_errors => FALSE);
    END;
    /

    SQL> connect mviewadmin/mviewadmin@db002.d-link ;
    已连接。

    SQL> select *from dev001.test001@db001 ;

             A B
    ---------- ----------
             1 wui
             2 zyun

    SQL>
    ------------------------------------------------------------------
    --创建物化视图
    SQL> CREATE MATERIALIZED VIEW dev001.test001
      2  REFRESH FAST WITH PRIMARY KEY FOR UPDATE
      3  AS SELECT * FROM dev001.test001@db001 ;
    AS SELECT * FROM dev001.test001@db001
              *
    ERROR 位于第 3 行:
    ORA-12028: 主体站点 @DB001.d-link 不支持实体化视图类型


    SQL>


    -------------------------------------------------------------------

    两处用长虚线的位置是我遇到的问题,请教大家。


    只看该作者    顶部
    离线 db2001
    资深会员



    精华贴数 0
    个人空间 0
    技术积分 2764 (681)
    社区积分 1 (45666)
    注册日期 2005-5-9
    论坛徽章:2
    会员2007贡献徽章祖国60周年纪念徽章    
          

    发表于 2005-6-3 19:42 
    顶一下


    只看该作者    顶部
    离线 anniversary
    老会员



    精华贴数 0
    个人空间 0
    技术积分 948 (2379)
    社区积分 2 (32229)
    注册日期 2005-4-25
    论坛徽章:0
          
          

    发表于 2005-6-3 21:27 
    关注.........


    __________________
    If I die today, then on the date that comes in the next year, it will be my anniversary.so, love today and life.Enjoy!
    只看该作者    顶部
    离线 killlove
    老会员


    精华贴数 1
    个人空间 0
    技术积分 1745 (1166)
    社区积分 2 (32304)
    注册日期 2005-5-8
    论坛徽章:7
    授权会员开发板块每日发贴之星数据库板块每日发贴之星   
          

    发表于 2005-6-3 21:29 
    厉害
    顶一下


    __________________
    -----孤臣-------    一部春秋史,     千年孤臣泪,     成败难长久,     兴亡转瞬间,  可叹孤臣生非时...------孤臣-----
    只看该作者    顶部
    离线 binss
    超级会员


    精华贴数 19
    个人空间 0
    技术积分 28822 (35)
    社区积分 9621 (217)
    注册日期 2002-4-5
    论坛徽章:141
    现任管理团队成员2009架构师大会纪念徽章ITPUB北京2009年会纪念徽章蓝色妖姬紫蜘蛛九尾狐狸
    玉石琵琶蓝色妖姬玉兔嫦娥红孩儿铁扇公主

    发表于 2005-6-4 02:17 
    oracle 什么版本啊?


    __________________
    只看该作者    顶部
    离线 db2001
    资深会员



    精华贴数 0
    个人空间 0
    技术积分 2764 (681)
    社区积分 1 (45666)
    注册日期 2005-5-9
    论坛徽章:2
    会员2007贡献徽章祖国60周年纪念徽章    
          

    发表于 2005-6-4 12:45 
    顶一下。ORALCRE是9。2


    只看该作者    顶部
    离线 husthxd
    版主


    精华贴数 13
    个人空间 1787
    技术积分 63444 (9)
    社区积分 4212 (442)
    注册日期 2002-2-20
    论坛徽章:135
    现任管理团队成员ITPUB元老参与项目管理沙龙活动纪念第18届世界杯(德国)纪念徽章管理团队2006纪念徽章会员2007贡献徽章
    会员2006贡献徽章设计板块每日发贴之星设计板块每日发贴之星2010年世界杯参赛球队:塞尔维亚2010新春纪念徽章祖国60周年纪念徽章

    发表于 2005-6-4 14:51 
    1.在主体站点上
    sql>show parameter global_names
    sql>select global_name from dual;
    2.在物化视图站点上
    sql>select global_name@db001 from dual;
    把结果贴出来看看把.

    参考:
    http://www.itpub.net/234279.html


    __________________
    少吃饭,多吃菜少说话,多做事少灌水,多看文档
    -----------------------吃遍全城!--------------------
    -----------------------Java钻研中--------------------
    --------------------学好英语,报效祖国--------------------
    人生最幸福的事情莫过于通过自己的努力实现自己的梦想!
    http://space.itpub.net/6906/
    只看该作者    顶部
    离线 dyzl
    初级会员



    精华贴数 0
    个人空间 0
    技术积分 52 (31428)
    社区积分 4 (21630)
    注册日期 2005-5-31
    论坛徽章:0
          
          

    发表于 2005-6-4 15:16 
    学习


    只看该作者    顶部
    离线 db2001
    资深会员



    精华贴数 0
    个人空间 0
    技术积分 2764 (681)
    社区积分 1 (45666)
    注册日期 2005-5-9
    论坛徽章:2
    会员2007贡献徽章祖国60周年纪念徽章    
          

    发表于 2005-6-4 19:58 


    QUOTE:
    最初由 husthxd 发布
    1.在主体站点上
    sql>show parameter global_names
    sql>select global_name from dual;
    2.在物化视图站点上
    sql>select global_name@db001 from dual;
    把结果贴出来看看把.

    参考:
    http://www.itpub.net/234279.html


    主体站点上
    SQL> connect sys/change_on_install@db001.d-link as sysdba ;
    已连接。
    SQL> show parameter global_names ;

    NAME TYPE VALUE
    ------------------------------------ ----------- -------------------------
    global_names boolean TRUE
    SQL> show parameter job;

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    job_queue_processes integer 20
    SQL> select * from global_name ;

    GLOBAL_NAME
    ------------------------------------------------------------------------------
    DB001.d-link

    SQL>
    物化视图站点上
    SQL> connect sys/change_on_install@db002.d-link as sysdba ;
    已连接。
    SQL> show parameter global_names ;

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    global_names boolean TRUE
    SQL> show parameter job;

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    job_queue_processes integer 10
    SQL> select * from global_name ;

    GLOBAL_NAME
    -----------------------------------------
    DB002.d-link

    SQL>


    只看该作者    顶部
    离线 db2001
    资深会员



    精华贴数 0
    个人空间 0
    技术积分 2764 (681)
    社区积分 1 (45666)
    注册日期 2005-5-9
    论坛徽章:2
    会员2007贡献徽章祖国60周年纪念徽章    
          

    发表于 2005-6-4 22:37 
    --建立物化视图组
    CONNECT mvadmin/mvadmin@db002.d-link ;
    --物化视图组必须和复制站点上的复制组名称相同
    BEGIN
    DBMS_REPCAT.CREATE_MVIEW_REPGROUP (
    gname => 'reptest',
    master => 'db001.d-link',
    propagation_mode => 'ASYNCHRONOUS');
    END;
    /
    -----------------------------------------------------
    错误提示:
    SQL> begin
    2 dbms_repcat.create_mview_repgroup(
    3 gname=>'reptest',
    4 master=>'db001.d-link',
    5 propagation_mode => 'ASYNCHRONOUS');
    6 end;
    7 /
    begin
    *
    ERROR 位于第 1 行:
    ORA-23313: 在 PUBLIC 没有控制对象组 "REPTEST"."db001.d-link"
    ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 105
    ORA-06512: 在"SYS.DBMS_REPCAT_SNA_UTL", line 1690
    ORA-06512: 在"SYS.DBMS_REPCAT_SNA", line 64
    ORA-06512: 在"SYS.DBMS_REPCAT", line 1262
    ORA-06512: 在line 2


    SQL>

    解决方法:(查知道说是因为目前主站属于静默模式)
    BEGIN
    DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
    gname => 'reptest');
    END;
    /
    但还是无效,一样报错,上午这样执行一下后,建立物化视图组是通过了的,奇怪,
    现在把所有都删除了重新建立,报错误了。
    SQL> connect repadmin/repadmin@db001.d-link ;
    已连接。
    SQL> select gname, master, status from dba_repgroup;

    GNAME M STATUS
    ------------------------------ - ---------
    REPTEST Y NORMAL

    按照论坛上别人回答的
    SQL> execute dbms_repcat.suspend_master_activity (gname => 'reptest');

    PL/SQL 过程已成功完成。

    SQL> connect mviewadmin/mviewadmin@db002.d-link ;
    已连接。
    SQL> begin
    2 dbms_repcat.create_mview_repgroup(
    3 gname=>'reptest',
    4 master=>'db001.d-link',
    5 propagation_mode=>'ASYNCHRONOUS');
    6 end;
    7 /
    begin
    *
    ERROR 位于第 1 行:
    ORA-23313: 在 PUBLIC 没有控制对象组 "REPTEST"."db001.d-link"
    ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 105
    ORA-06512: 在"SYS.DBMS_REPCAT_SNA_UTL", line 1690
    ORA-06512: 在"SYS.DBMS_REPCAT_SNA", line 64
    ORA-06512: 在"SYS.DBMS_REPCAT", line 1262
    ORA-06512: 在line 2


    SQL>
    -----------------------------------------------------


    我现在就是想知道这里到底什么错了,该如何解决?


    只看该作者    顶部
    相关内容


    CopyRight 1999-2006 itpub.net All Right Reserved.
    北京皓辰网域网络信息技术有限公司. 版权所有
    E-mail:Webmaster@itpub.net
    网站律师 隐私政策 知识产权声明
    京ICP证:060528号 联系我们