« 《Oracle数据库性能优化》一书热销 | Blog首页 | 政策的力量是无穷的 »
Oracle高级复制的创建配置步骤-Step by Step
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2005/06/oraclessoeaeaeo.html
本例涉及两个站点.链接:https://www.eygle.com/archives/2005/06/oraclessoeaeaeo.html
主体定义站点: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 |
在复制组里加入复制对象
对复制对象产生复制支持
添加主体复制节点
登陆主体站点,检查复制对象情况:
在主体定义站点启动复制:
在主体定义站点删除数据测试:
在主体站点观察变化:
至此,同步复制配置完毕。
历史上的今天...
>> 2020-06-27文章:
>> 2012-06-27文章:
>> 2011-06-27文章:
>> 2007-06-27文章:
>> 2006-06-27文章:
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> |
至此,同步复制配置完毕。
历史上的今天...
>> 2020-06-27文章:
>> 2012-06-27文章:
>> 2011-06-27文章:
>> 2007-06-27文章:
>> 2006-06-27文章:
By eygle on 2005-06-27 09:34 | Comments (82) | Advanced | 319 |
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正常,相关初始化参数已经正确设置.
本文开头给出一个文档,请参考.