eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« 《Oracle数据库性能优化》一书热销 | Blog首页 | 政策的力量是无穷的 »

Oracle高级复制的创建配置步骤-Step by Step

本例涉及两个站点.
主体定义站点:AVATAR.COOLYOUNG.COM.CN
主体站点:AUTHAA.COOLYOUNG.COM.CN
注:主体定义站点指配置复制工作的站点

本例涉及的用户.
复制管理员:repadmin
应用用户:hawa
本例复制的对象:hw_test 数据表
本例的先决条件:你需要设置好相应的参数,job_queue_processes需要大于0,global_name=true,并且建立相应的db link.
这些具体可以参考:高级复制的初步研究一文.

1.在主体定义站点复制用户下创建复制对象
SQL> select * from global_name;

GLOBAL_NAME
-----------------------------------------------------------
AVATAR.COOLYOUNG.COM.CN

SQL> connect hawa/password
Connected.
SQL> create table hw_test as select * from hw_online;

Table created.

SQL>  select count(*) from hw_test;

  COUNT(*)
----------
       464

SQL> alter table hw_test add (constraint pk_userid primary key (numuserid));

Table altered.

2.在主体站点同样创建复制对象
SQL> select * from global_name;

GLOBAL_NAME
------------------------------------------------------------------------
AUTHAA.COOLYOUNG.COM.CN

SQL> connect hawa/password
Connected.
SQL> create table hw_test as select * from hw_online;

Table created.

SQL> select count(*) from hw_test;

  COUNT(*)
----------
         0

3.在主体站点手工同步数据
SQL> connect repadmin/password

Connected.
SQL> insert into hawa.hw_test select * from hawa.hw_test@avatar;

464 rows created.

SQL> commit;

Commit complete.

4.在主体定义站点开始操作
登陆主体定义站点
$ sqlplus repadmin/password

SQL*Plus: Release 9.2.0.4.0 - Production on Mon Jun 27 09:32:36 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL> select * from global_name;

GLOBAL_NAME
----------------------------------------------------------------------------
AVATAR.COOLYOUNG.COM.CN

创建复制组:
SQL> execute dbms_repcat.create_master_repgroup('rep_hh');

PL/SQL procedure successfully completed.

SQL> select gname,master,status from dba_repgroup where gname='REP_HH';

GNAME                          M STATUS
------------------------------ - ---------
REP_HH                         Y QUIESCED


在复制组里加入复制对象
SQL> execute dbms_repcat.create_master_repobject
(sname=>'hawa',oname=>'hw_test', 
type=>'table',use_existing_object=>true,gname=>'rep_hh',copy_rows=>false);

PL/SQL procedure successfully completed.

SQL> select sname,oname,status,gname from dba_repobject where gname='REP_HH';

SNAME                          ONAME                          STATUS     GNAME
------------------------------ ------------------------------ ---------- ------------------------------
HAWA                           HW_TEST                        VALID      REP_HH


对复制对象产生复制支持
SQL> execute dbms_repcat.generate_replication_support('hawa','hw_test','table');

PL/SQL procedure successfully completed.

SQL> select gname, master, status from dba_repgroup where gname='REP_HH';

GNAME                          M STATUS
------------------------------ - ---------
REP_HH                         Y QUIESCED

SQL> select sname,oname,status,gname from dba_repobject where gname='REP_HH';

SNAME                          ONAME                          STATUS     GNAME
------------------------------ ------------------------------ ---------- ------------------------------
HAWA                           HW_TEST                        VALID      REP_HH
HAWA                           HW_TEST$RP                     VALID      REP_HH
HAWA                           HW_TEST$RP                     VALID      REP_HH

SQL> 


添加主体复制节点
SQL> execute dbms_repcat.add_master_database
(gname=>'rep_hh',master=>'AUTHAA.COOLYOUNG.COM.CN',use_existing_objects=>true, 
copy_rows=>false, propagation_mode => 'synchronous');

PL/SQL procedure successfully completed.

SQL> column masterdef format a10
SQL> column master format a10
SQL> column dblink format a25
SQL> column gname format a12

SQL> select gname, dblink, masterdef MASTERDEF, master MASTER from sys.dba_repsites where gname='REP_HH';

GNAME        DBLINK                    MASTERDEF  MASTER
------------ ------------------------- ---------- ----------
REP_HH       AVATAR.COOLYOUNG.COM.CN   Y          Y
REP_HH       AUTHAA.COOLYOUNG.COM.CN   N          Y

登陆主体站点,检查复制对象情况:
[oracle@www167 oracle]$ sqlplus repadmin/password

SQL*Plus: Release 9.2.0.4.0 - Production on Mon Jun 27 09:34:49 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
AUTHAA.COOLYOUNG.COM.CN


SQL> set linesize 120
SQL> select sname,oname,status,gname from dba_repobject where gname='REP_HH';

SNAME                          ONAME                          STATUS     GNAME
------------------------------ ------------------------------ ---------- ------------------------------
HAWA                           HW_TEST                        VALID      REP_HH
HAWA                           HW_TEST$RP                     VALID      REP_HH
HAWA                           HW_TEST$RP                     VALID      REP_HH


在主体定义站点启动复制:
SQL> select * from global_name;

GLOBAL_NAME
-----------------------------------------------------------------------------
AVATAR.COOLYOUNG.COM.CN

SQL> execute dbms_repcat.resume_master_activity('rep_hh',true);

PL/SQL procedure successfully completed.


在主体定义站点删除数据测试:
SQL> connect hawa/password
Connected.
SQL> select count(*) from hw_test;

  COUNT(*)
----------
       464

SQL> delete from hw_test where rownum <20;

19 rows deleted.

SQL> commit;

Commit complete.

SQL> select count(*) from hw_test;

  COUNT(*)
----------
       445

在主体站点观察变化:
SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
AUTHAA.COOLYOUNG.COM.CN

SQL> select count(*) from hw_test;

  COUNT(*)
----------
       445

SQL>     

至此,同步复制配置完毕。

历史上的今天...
    >> 2012-06-27文章:
    >> 2011-06-27文章:
    >> 2007-06-27文章:
    >> 2006-06-27文章:

无觅

By eygle on 2005-06-27 09:34 | Comments (82) | Advanced | 319 |

82 Comments

eygle:
你的这个是实时同步的吗?
并且是双向的吗?

是同步复制,双向。

eygle:
这个之前是不是要建立db link呢?

db link肯定是要先建立好的,我这个是给一个朋友做的范例,省略了一些步骤。

eygle;
两个站点都需要repadmin这个用户吗?

参考这里的文章:
http://www.eygle.com/index-download.php

在添加主复制节点是出现如下错误:

ORA-23357: the propagator does not exist
ORA-06512: at "SYS.DBMS_REPCAT_CACHE", line 76
ORA-06512: at "SYS.DBMS_REPCAT_MAS", line 1863
ORA-06512: at "SYS.DBMS_REPCAT", line 121

minjiayan,你参考
http://www.eygle.com/index-download.php

不要漏掉需要的步骤,不会出问题的。

我想在增加一个表到复制组里,但是出现了下面的问题:
ERROR at line 1:
ORA-23310: object group "PUBLIC"."REP_HH" is not quiesced
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.DBMS_REPCAT_UTL", line 6176
ORA-06512: at "SYS.DBMS_REPCAT_MAS", line 2546
ORA-06512: at "SYS.DBMS_REPCAT", line 562
ORA-06512: at line 1
我该怎么把这个复制组的status改为quiesc呢?

呵呵,谢谢

呵呵,谢谢

请问,能否建立一个基于多主体表的实体化视图?

eygle;
为什么我在进行到‘登陆主体站点,检查复制对象情况:’这一步时执行select sname,oname,status,gname from dba_repobject where gname='REP_HH';
却是这样的信息:sname:hava oname:hw_test status:error gname:rep_hh

状态不对啊,你的某个步骤肯定有问题!

谢谢eygle!问题已经解决了,是我在建在主体站点上的那张表没有设置主关键字,对了,再问你一下,如果主体站点是分区表,也可以吗?

在添加主体复制节点时,报错,错误信息如下:
ERROR 位于第 1 行:
ORA-23375: 特性与数据库版本NEWSIS.US.ORACLE.COM不兼容
ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 86
ORA-06512: 在"SYS.DBMS_REPCAT_MAS", line 2159
ORA-06512: 在"SYS.DBMS_REPCAT", line 146
ORA-06512: 在line 1
经检查,两个服务器的版本均为Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

show parameter compatible

比较compatible参数设置!

两个服务器的compatible均为9.2.0.0.0

确认repadmin具有足够权限:

execute dbms_repcat_admin.grant_admin_any_repschema ('REPADMIN')

多谢你的回复,不过好象还是不行,一样的地方一样的错误

那可能是你的什么步骤配置出了问题,仔细检查一下。

把状态改为quiesced
execute dbms_repcat.suspend_master_activity (gname =>'REP_HH')

在登陆主体站点,检查复制对象情况时,dba_repobject表里没有记录,而且两个站点数据发生变化时,没有相互反映出来,为什么?我使用的版本是8.1.7.0.0

在登陆主体站点,检查复制对象情况时,dba_repobject表里没有记录,按照上面的步骤,最后向主体定义站点插入数据时提示:
ERROR at line 1:
ORA-04067: 没有执行,stored
procedure "hawa.hw_test$RP" 不存在
ORA-01085: 延迟 rpc 到 "hawa.hw_test$RP.REP_INSERT" 之前的错误
ORA-02063: preceding 2 lines from HLRDBBAK

检查dba_repcatlog看记录了什么错误.

dba_repcatlog的记录如下:

Id Source Status Userid Timestamp Role Master Sname Request Oname Type Message Errnum Gname
35 ORA.DATANG.COM AWAIT_CALLBACK REPADMIN 2005-12-28 14:52:06 MASTERDEF HLRDBBAK.DATANG.COM RESUME_MASTER_ACTIVITY UNDEFINED SCOTT_MG
29 ORA.DATANG.COM AWAIT_CALLBACK REPADMIN 2005-12-28 14:51:21 MASTERDEF HLRDBBAK.DATANG.COM COPY_FLAVOR_DEFINITIONS UNDEFINED SCOTT_MG
61 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:08:09 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY COPY_FLAVOR_DEFINITIONS UNDEFINED REP_GP_DAY
67 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:09:30 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY RESUME_MASTER_ACTIVITY UNDEFINED REP_GP_DAY
62 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:08:09 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY SCOTT CREATE_MASTER_REPOBJECT DEPT TABLE REP_GP_DAY
33 ORA.DATANG.COM AWAIT_CALLBACK REPADMIN 2005-12-28 14:51:22 MASTERDEF HLRDBBAK.DATANG.COM SCOTT_MG ADD_MASTER_DATABASE -1 UNDEFINED SCOTT_MG
34 ORA.DATANG.COM READY REPADMIN 2005-12-28 14:51:22 MASTERDEF HLRDBBAK.DATANG.COM SCOTT_MG ADD_MASTER_DATABASE -1 UNDEFINED SCOTT_MG
35 ORA.DATANG.COM READY REPADMIN 2005-12-28 14:52:06 MASTERDEF ORA.DATANG.COM RESUME_MASTER_ACTIVITY UNDEFINED SCOTT_MG
36 ORA.DATANG.COM AWAIT_CALLBACK REPADMIN 2005-12-28 14:53:05 MASTERDEF HLRDBBAK.DATANG.COM RESUME_MASTER_ACTIVITY UNDEFINED SCOTT_MG
63 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:08:10 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY SCOTT GENERATE_INTERNAL_PKG_SUPPORT DEPT TABLE REP_GP_DAY
64 ORA.DATANG.COM@PERDAY READY REPADMIN 2005-12-29 18:08:10 MASTERDEF ORA.DATANG.COM@PERDAY SCOTT END_GEN_INTERNAL_PKG_SUPPORT DEPT TABLE REP_GP_DAY
65 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:08:10 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY REP_GP_DAY ADD_MASTER_DATABASE -1 UNDEFINED REP_GP_DAY
66 ORA.DATANG.COM@PERDAY READY REPADMIN 2005-12-29 18:08:10 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY REP_GP_DAY ADD_MASTER_DATABASE -1 UNDEFINED REP_GP_DAY
67 ORA.DATANG.COM@PERDAY READY REPADMIN 2005-12-29 18:09:30 MASTERDEF ORA.DATANG.COM@PERDAY RESUME_MASTER_ACTIVITY UNDEFINED REP_GP_DAY
68 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:09:51 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY RESUME_MASTER_ACTIVITY UNDEFINED REP_GP_DAY

我按照步骤前面都一切顺利,但在登陆主体站点,检查复制对象情况:这一步时有问题了
SQL> select sname,oname,status,gname from dba_repobject where gname='REP_OOO';

SNAME ONAME STATUS GNAME
------------------------------ ------------------------------ ---------- ------------
game GAMEINFOTEST5 ERROR REP_OOO

oname的STATUS为ERROR,请问该怎么解决?

根据您写的advanced replication初步研究.pdf文档,按照“附录一。多主体复制站点的配置步骤”去执行,
在运行grant select any dictionary to repadmin;时,提示
ERROR at line 1:ORA-00990: missing or invalid privilege

其他别的步骤没有发生什么异常,在master数据库的dba_repobject中有三行记录,但在snap 数据库的dba_repobject中没有记录,最后分别更新两个数据库的记录时,在对方的数据库中没有任何变化。

你的数据库什么版本啊?

以上各位朋友请检查一下你的job_queue_processes参数是否>0.

数据库是8.1.7.0.0,而且job_queue_processes设置为10了。

SELECT ANY DICTIONARY 是9i中引入的.

Oracle8i和9i不同!

那为什么复制不成功呢?难道8.1.7.0.0不能复制吗?

Oracle8i支持复制,一定是你的配置存在问题.

检查一下日志/dba_repcatlog,看有什么错误.

我是按照您的文档上的要求进行配置的,还需要配置别的什么吗?dba_repcatlog的信息如下,我也看不出有什么错误.能帮我分析一下吗,谢谢eygle了!

Id Source Status Userid Timestamp Role Master Sname Request Oname Type Message Errnum Gname
61 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:08:09 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY COPY_FLAVOR_DEFINITIONS UNDEFINED REP_GP_DAY
67 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:09:30 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY RESUME_MASTER_ACTIVITY UNDEFINED REP_GP_DAY
62 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:08:09 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY SCOTT CREATE_MASTER_REPOBJECT DEPT TABLE REP_GP_DAY
63 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:08:10 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY SCOTT GENERATE_INTERNAL_PKG_SUPPORT DEPT TABLE REP_GP_DAY
64 ORA.DATANG.COM@PERDAY READY REPADMIN 2005-12-29 18:08:10 MASTERDEF ORA.DATANG.COM@PERDAY SCOTT END_GEN_INTERNAL_PKG_SUPPORT DEPT TABLE REP_GP_DAY
65 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:08:10 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY REP_GP_DAY ADD_MASTER_DATABASE -1 UNDEFINED REP_GP_DAY
66 ORA.DATANG.COM@PERDAY READY REPADMIN 2005-12-29 18:08:10 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY REP_GP_DAY ADD_MASTER_DATABASE -1 UNDEFINED REP_GP_DAY
67 ORA.DATANG.COM@PERDAY READY REPADMIN 2005-12-29 18:09:30 MASTERDEF ORA.DATANG.COM@PERDAY RESUME_MASTER_ACTIVITY UNDEFINED REP_GP_DAY
68 ORA.DATANG.COM@PERDAY AWAIT_CALLBACK REPADMIN 2005-12-29 18:09:51 MASTERDEF HLRDBBAK.DATANG.COM@PERDAY RESUME_MASTER_ACTIVITY UNDEFINED REP_GP_DAY

AWAIT_CALLBACK这种状态是不正常的.

AWAIT_CALLBACK状态表示管理请求已经从主体定义站点上正常发出,并且已经被其他的主体站点接收,但是其他的主体站点却没有返回消息表明管理请求是否执行成功。

所以你需要检查你的db link是否正常.
主体站点是否配置正确.

如果没问题,可以使用:
DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN ( gname=>'rep_gp_day', all_sites=>true);
重新提交任务.

在主体站点使用sql命令可以直接向主体定义站点插入数据,从主体定义站点也可以使用sql命令直接向主体站点插入数据,都没有问题,运行DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN 也没问题,但就是不互相更新对方的数据。

在主体站点中的dba_repobject里,没有任何记录。

配置完后,在主体站点中的dba_repobject里,是否应该有记录。如果有,在运行哪个程序包才能有记录呢,我的问题一直没有解决,很急切,热切的盼望着各位好心人的指点,谢谢!!!!

我手头已经没有Oracle8i的环境了.

你的db link正常么?

使用repadmin能否操作远程表?

db link正常,使用repadmin可以操作远程表。

你可以试试看同步复制,出错了就能发现了.

使用同步复制,最后向主体定义站点插入数据时提示:
ERROR at line 1:
ORA-04067: 没有执行,stored
procedure "hawa.hw_test$RP" 不存在
ORA-01085: 延迟 rpc 到 "hawa.hw_test$RP.REP_INSERT" 之前的错误
ORA-02063: preceding 2 lines from HLRDBBAK

>>登陆主体站点,检查复制对象情况:

这一步,你的肯定有问题,复制生成存在问题,没有在主体站点生成复制支持对象.

你说的很对,没有在主体站点生成复制支持对象,登陆主体站点,检查复制对象情况,在dba_repobject 里没有记录,但为什么没有呢?在此之前没有任何异常情况呀。

我现在也遇到了这个错误ORA-04067,建立过程都提示正常的,比较苦闷,现在正在实施一个项目中

以上使用8.1.7.0.0的朋友,我建议你们升级一下.

我看到8.1.7.0.0有一些相关Bug会使得高级复制出现问题,特别是由8.1.5升级上来的.

建议使用9iR2或以上版本.

我的数据库是oracle9i for 2003企业版本的,并且升级到9206,配置好后,在登陆主体站点,检查复制对象情况,在dba_repobject 里没有记录,
使用同步复制,最后向主体定义站点插入数据时提示:
ERROR at line 1:
ORA-04067: 没有执行,stored
procedure "gz.s_cust$RP" 不存在

不知道如何解决

检查dba_repcatlog里面的错误信息!

那8.1.7.0.0版本就不能做高级复制吗?因为项目进行中,能可能在重新购置新的版本软件,有什么办法可以实现在8.1.7.0.0版本下的高级复制呢

我也遇到了ORA-04067的问题,在oracle8i、oracle9i 都不行,我是严格按照上面的步骤进行的,不知道为什么?

ORA-04067错误通常是你的db link有问题或者是job有问题,无法把本地的任务push到主体站点.

所以请确认你的用户权限正确,db link正常,相关初始化参数已经正确设置.

本文开头给出一个文档,请参考.


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com