« 《Oracle数据库性能优化》一书热销 | Blog首页 | 政策的力量是无穷的 »
Oracle高级复制的创建配置步骤-Step by Step
作者:eygle |【转载时请务必以超链接形式标明文章原始出处和作者信息及本声明】链接:http://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
|
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>
|
至此,同步复制配置完毕。
-----
这篇 【Oracle高级复制的创建配置步骤-Step by Step】来自 www.eygle.com | CSDN技术网摘| del.icio.us|365Key
By eygle on 2005-06-27 09:34 | Comments (80) | Posted to Advanced | Edit |Pageviews:
留言 (80)
eygle:
你的这个是实时同步的吗?
并且是双向的吗?
Posted by: dai_zhy at July 28, 2005 2:31 PM
是同步复制,双向。
Posted by: eygle at July 28, 2005 3:07 PM
eygle:
这个之前是不是要建立db link呢?
Posted by: dai_zhy at July 28, 2005 10:24 PM
db link肯定是要先建立好的,我这个是给一个朋友做的范例,省略了一些步骤。
Posted by: eygle at July 28, 2005 10:45 PM
eygle;
两个站点都需要repadmin这个用户吗?
Posted by: dai_zhy at July 29, 2005 9:22 AM
参考这里的文章:
http://www.eygle.com/index-download.php
Posted by: eygle at July 29, 2005 9:37 AM
在添加主复制节点是出现如下错误:
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
Posted by: minjiayan at July 29, 2005 6:13 PM
minjiayan,你参考
http://www.eygle.com/index-download.php
不要漏掉需要的步骤,不会出问题的。
Posted by: eygle at July 29, 2005 6:29 PM
我想在增加一个表到复制组里,但是出现了下面的问题:
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呢?
Posted by: dai_zhy at August 1, 2005 9:42 AM
呵呵,谢谢
Posted by: minjiayan at August 1, 2005 9:43 AM
呵呵,谢谢
Posted by: minjiayan at August 1, 2005 9:43 AM
请问,能否建立一个基于多主体表的实体化视图?
Posted by: xzh at September 18, 2005 3:40 PM
eygle;
为什么我在进行到‘登陆主体站点,检查复制对象情况:’这一步时执行select sname,oname,status,gname from dba_repobject where gname='REP_HH';
却是这样的信息:sname:hava oname:hw_test status:error gname:rep_hh
Posted by: qiuleizhen at October 11, 2005 2:26 PM
状态不对啊,你的某个步骤肯定有问题!
Posted by: eygle at October 11, 2005 4:50 PM
谢谢eygle!问题已经解决了,是我在建在主体站点上的那张表没有设置主关键字,对了,再问你一下,如果主体站点是分区表,也可以吗?
Posted by: qiuleizhen at October 12, 2005 12:59 PM
在添加主体复制节点时,报错,错误信息如下:
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
Posted by: ghx at December 15, 2005 2:30 PM
show parameter compatible
比较compatible参数设置!
Posted by: eygle at December 15, 2005 2:33 PM
两个服务器的compatible均为9.2.0.0.0
Posted by: ghx at December 16, 2005 9:51 AM
确认repadmin具有足够权限:
execute dbms_repcat_admin.grant_admin_any_repschema ('REPADMIN')
Posted by: eygle at December 16, 2005 10:55 AM
多谢你的回复,不过好象还是不行,一样的地方一样的错误
Posted by: ghx at December 16, 2005 11:44 AM
那可能是你的什么步骤配置出了问题,仔细检查一下。
Posted by: eygle at December 16, 2005 8:04 PM
把状态改为quiesced
execute dbms_repcat.suspend_master_activity (gname =>'REP_HH')
Posted by: xzh2001 at December 23, 2005 2:27 PM
在登陆主体站点,检查复制对象情况时,dba_repobject表里没有记录,而且两个站点数据发生变化时,没有相互反映出来,为什么?我使用的版本是8.1.7.0.0
Posted by: ljs_888 at December 28, 2005 5:30 PM
在登陆主体站点,检查复制对象情况时,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
Posted by: ljs_888 at December 29, 2005 1:22 PM
检查dba_repcatlog看记录了什么错误.
Posted by: eygle at December 29, 2005 3:42 PM
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
Posted by: ljs_888 at December 29, 2005 4:48 PM
我按照步骤前面都一切顺利,但在登陆主体站点,检查复制对象情况:这一步时有问题了
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,请问该怎么解决?
Posted by: lues at December 29, 2005 5:11 PM
根据您写的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中没有记录,最后分别更新两个数据库的记录时,在对方的数据库中没有任何变化。
Posted by: bjljs at December 29, 2005 5:28 PM
你的数据库什么版本啊?
以上各位朋友请检查一下你的job_queue_processes参数是否>0.
Posted by: eygle at December 29, 2005 5:52 PM
数据库是8.1.7.0.0,而且job_queue_processes设置为10了。
Posted by: bjljs at December 29, 2005 6:30 PM
SELECT ANY DICTIONARY 是9i中引入的.
Oracle8i和9i不同!
Posted by: eygle at December 29, 2005 9:17 PM
那为什么复制不成功呢?难道8.1.7.0.0不能复制吗?
Posted by: bjljs at December 30, 2005 9:19 AM
Oracle8i支持复制,一定是你的配置存在问题.
检查一下日志/dba_repcatlog,看有什么错误.
Posted by: eygle at December 30, 2005 9:55 AM
我是按照您的文档上的要求进行配置的,还需要配置别的什么吗?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
Posted by: bjljs at December 31, 2005 9:51 AM
AWAIT_CALLBACK这种状态是不正常的.
AWAIT_CALLBACK状态表示管理请求已经从主体定义站点上正常发出,并且已经被其他的主体站点接收,但是其他的主体站点却没有返回消息表明管理请求是否执行成功。
所以你需要检查你的db link是否正常.
主体站点是否配置正确.
如果没问题,可以使用:
DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN ( gname=>'rep_gp_day', all_sites=>true);
重新提交任务.
Posted by: eygle at December 31, 2005 9:58 AM
在主体站点使用sql命令可以直接向主体定义站点插入数据,从主体定义站点也可以使用sql命令直接向主体站点插入数据,都没有问题,运行DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN 也没问题,但就是不互相更新对方的数据。
在主体站点中的dba_repobject里,没有任何记录。
Posted by: bjljs at December 31, 2005 3:42 PM
配置完后,在主体站点中的dba_repobject里,是否应该有记录。如果有,在运行哪个程序包才能有记录呢,我的问题一直没有解决,很急切,热切的盼望着各位好心人的指点,谢谢!!!!
Posted by: bjljs at January 5, 2006 2:28 PM
我手头已经没有Oracle8i的环境了.
你的db link正常么?
使用repadmin能否操作远程表?
Posted by: eygle at January 5, 2006 2:41 PM
db link正常,使用repadmin可以操作远程表。
Posted by: bjljs at January 5, 2006 3:43 PM
你可以试试看同步复制,出错了就能发现了.
Posted by: eygle at January 5, 2006 6:47 PM
使用同步复制,最后向主体定义站点插入数据时提示:
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
Posted by: bjljs at January 9, 2006 1:55 PM
>>登陆主体站点,检查复制对象情况:
这一步,你的肯定有问题,复制生成存在问题,没有在主体站点生成复制支持对象.
Posted by: eygle at January 9, 2006 2:33 PM
你说的很对,没有在主体站点生成复制支持对象,登陆主体站点,检查复制对象情况,在dba_repobject 里没有记录,但为什么没有呢?在此之前没有任何异常情况呀。
Posted by: bjljs at January 9, 2006 3:52 PM
我现在也遇到了这个错误ORA-04067,建立过程都提示正常的,比较苦闷,现在正在实施一个项目中
Posted by: ppiao at January 12, 2006 10:32 PM
以上使用8.1.7.0.0的朋友,我建议你们升级一下.
我看到8.1.7.0.0有一些相关Bug会使得高级复制出现问题,特别是由8.1.5升级上来的.
建议使用9iR2或以上版本.
Posted by: eygle at January 12, 2006 11:13 PM
我的数据库是oracle9i for 2003企业版本的,并且升级到9206,配置好后,在登陆主体站点,检查复制对象情况,在dba_repobject 里没有记录,
使用同步复制,最后向主体定义站点插入数据时提示:
ERROR at line 1:
ORA-04067: 没有执行,stored
procedure "gz.s_cust$RP" 不存在
不知道如何解决
Posted by: ppiao at January 14, 2006 1:35 PM
检查dba_repcatlog里面的错误信息!
Posted by: eygle at January 14, 2006 2:35 PM
那8.1.7.0.0版本就不能做高级复制吗?因为项目进行中,能可能在重新购置新的版本软件,有什么办法可以实现在8.1.7.0.0版本下的高级复制呢
Posted by: bjljs at January 16, 2006 9:26 AM
我也遇到了ORA-04067的问题,在oracle8i、oracle9i 都不行,我是严格按照上面的步骤进行的,不知道为什么?
Posted by: renlei at January 16, 2006 9:32 AM
ORA-04067错误通常是你的db link有问题或者是job有问题,无法把本地的任务push到主体站点.
所以请确认你的用户权限正确,db link正常,相关初始化参数已经正确设置.
本文开头给出一个文档,请参考.
Posted by: eygle at January 16, 2006 3:36 PM
请问eygle,在多主复制中一个主站点从复制组中用dbms_repcat.remove_master_databases删除后,可以重新加入到该复制组中去么,如何加?
Posted by: yang at February 22, 2006 3:48 PM
请问如果需要以一个物化视图来实现对多个主体站点得数据复制,并且查询性能较高应该如何来设置和部署呢?希望能够得到您得帮助,最好有个实例
Posted by: Anonymous at February 24, 2006 6:33 PM
我的上个问题已经知道如何解决了,可是又出现一个新问题,请eygle帮帮忙看看
在多主复制中,我在主定义站点执行
execute dbms_repcat.suspend_master_activity(gname => 'rep1');后 ,主定义站点已经是QUIESCING了,可等了很久其他主站点的复制组状态并没有随之改变,依然时normal,请问这是什么(急)?
Posted by: yang at February 28, 2006 12:55 PM
你查看:dba_repcatlog
看这个动作是否没有被传播出去.
Posted by: eygle at February 28, 2006 1:16 PM
好的,解决了,谢谢eygle
我现在在实施一个项目,不知道可否多主复制方式,来实现单向复制,即A台机器做中心只接收数据,B,C机器做源发送数据,在A上不建push任务,B,C上只建到A的push任务,我现在已经搭建好这种环境了,看上去运行的还行,请问eygle,这种方式会不会有什么不妥?另外我偶尔发现B会发送数据给C的情况(不过极少出现),不知为何
Posted by: yang at February 28, 2006 2:40 PM
请问eygle一个紧急的问题
,在多主复制中为什么一个站点的在执行dbms_repcat.do_deferred_repcat_admin('"REP1"', FALSE);job时,一直执行不结束,等了几天还是这样,它不执行任何从主定义站点发来的命令
我用exeucte dbms_defer_sys.delete_tran(deferred_tran_id => '',destination => '');后,它依然不结束,请问这是怎么回事,do_deferred_repcat_admin是具体做什么,十分着急!!!请帮忙,谢谢!
Posted by: yang at March 2, 2006 8:16 PM
Quote from Oracle document:
Whenever you use the Replication Management tool to create an administrative request for a replication group, Oracle automatically inserts a job into the local job queue, if one does not already exist for the group. This job periodically executes the
DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN procedure. Whenever you
synchronously broadcast a request, Oracle attempts to start this job immediately in
order to apply the replicated changes at each master site.
Assuming that Oracle does not encounter any errors,DO_DEFERRED_REPCAT_ADMIN is run whenever a background process is available to execute the job. Oracle automatically determines how often the background process wakes up. You may experience a delay if you do not have enough background processes available to execute the outstanding jobs.
Posted by: eygle at March 2, 2006 8:53 PM
谢谢!
您的意思是说这个站点的oracle后台进程有问题,造成background processes unavailable,所以一直不停执行这个job是吗?那怎么修复这个问题呢?另外我从session里面sql语句,看到它在执行这个job的时候,并没有死掉啊,一直在不停执行一些看不大懂的语句,比如lock table xxx in shared mode;什么的
请eygle多关注一下小弟的这个问题,因为较急,谢谢!
Posted by: yang at March 3, 2006 2:28 PM
你需要看一下Job为什么没有结束
还要看Deffer任务是否有错误或失败.
select * from DEFERROR;
select * from DEFTRAN;
select * from dba_jobs_running;
还有,我怀疑你删除Tran的方法有问题.
Posted by: eygle at March 3, 2006 3:02 PM
select * from DEFERROR; 里面确实有错误,但是是一般的主键冲突、或者not found之类的,这个应该是正常的吧。
select * from DEFTRAN; 里面有未发送出去的事务,原因是我只建立了到中心站点的数据库链,因为我不想它发送给其他站点,自然另外几条事务因为找不到数据库链,因此一直保留在那里。
一般情况下,我用exeucte dbms_defer_sys.delete_tran(deferred_tran_id => '',destination => '');清除滞留的事务后,job就很快执行完毕了,但是这次即使清空了,它还是在不停跑,不知道原因在哪里
另外我想问一下复制里面,可以不一定要将global_names设置为true吗,false也可以的吧
Posted by: yang at March 3, 2006 4:44 PM
select * from DEFERROR; 里面确实有错误,但是是一般的主键冲突、或者not found之类的,这个应该是正常的吧。
select * from DEFTRANDEST; 里面有未发送出去的事务,原因是我只建立了到中心站点的数据库链,因为我不想它发送给其他站点,自然另外几条事务因为找不到数据库链,因此一直保留在那里。
一般情况下,我用exeucte dbms_defer_sys.delete_tran(deferred_tran_id => '',destination => '');清除滞留的事务后,job就很快执行完毕了,但是这次即使清空了,它还是在不停跑,不知道原因在哪里
另外我想请问一下数据复制里面,不一定要将global_names设置为true吗,false也可以的吧
Posted by: yang at March 3, 2006 4:46 PM
理论上global_names要设置为True,但是如果你的DB Link以及域名等设置没有问题,这个不会有实质影响.
如果实在找不到原因,我建议你sql_trace一下相关job进程,看看在执行什么操作.
Posted by: eygle at March 3, 2006 4:50 PM
好的,多谢!
以后还请eygle常常光顾这个帖子,偶以后可能还会遇到些棘手的问题,需要请教 谢啦 :)
Posted by: yang at March 3, 2006 5:11 PM
又冒出一个问题,
我想删除一个非主定义站点的复制组,然后重新把它加进去,为什么会出现这个错误,怎么都删除不掉:
SQL> execute dbms_repcat.drop_master_repgroup(gname => 'rep',all_sites => false);
begin dbms_repcat.drop_master_repgroup(gname => 'rep',all_sites => false); end;
ORA-23313: object group "PUBLIC"."REP" is not mastered at MASTER.DRAGONSOFT.COM.CN
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_REPCAT_UTL4", line 2860
ORA-06512: at "SYS.DBMS_REPCAT_MAS", line 2660
ORA-06512: at "SYS.DBMS_REPCAT", line 635
ORA-06512: at line 1
Posted by: yang at March 3, 2006 5:58 PM
在上面这种情况下,有什么办法可以强制删除非主定义站点上的复制组吗?不然就再也不能使用这个组名称了
Posted by: yang at March 3, 2006 7:46 PM
yang,
遇到一样的问题跟你累似。
1。我不能删除复制组:在主体定义站点上已经删掉了,但在主体站点上的管理请求是:drop_master_repschema,却一直不执行,导致主体站点上的复制组一直不能被删除。我本想删除复制组后再重新建一个的。这是为什么呢〉?
2。主体站点以及主体定义站点上的复制组都删除掉了,可是为什么我在主体站点上编辑跟复制组相关用户下的表数据时,出现ora-23474错误。复制组删掉的话,应该是两个数据库之间没有关系的阿,这是怎么回事呢??
以上所讲的操作都是通过 OEM Console完成的。
该问题请教 yang, and eygle ..
我时刻关注 !!!!
Thanks,
Posted by: kalvin at March 12, 2006 1:32 PM
谢谢啊,终于搞定了,将准备工作不充如下,请指正:(其中ora9fron&ora9back是数据库的名字,请按照自己的实际情况改动)
-- create user scott for test /as sysdba both @ora9fron and @ora9back
CREATE USER scott IDENTIFIED BY tiger;
ALTER USER scott DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
ALTER USER scott TEMPORARY TABLESPACE temp;
GRANT
CREATE SESSION,
CREATE TABLE,
CREATE PROCEDURE,
CREATE SEQUENCE,
CREATE TRIGGER,
CREATE VIEW,
CREATE SYNONYM,
ALTER SESSION,
CREATE MATERIALIZED VIEW,
ALTER ANY MATERIALIZED VIEW,
CREATE DATABASE LINK
TO scott;
-- create table in scott for test /as soctt/tiger both @ora9fron and @ora9back
create table test_rep (num number not null, idname varchar2(100));
alter table test_rep add constraint pk_test_rep primary key (num);
create index ind_test_rep_name on test_rep (idname);
insert into test_rep values (1, 'ytk');
insert into test_rep values (2, 'zhly');
commit;
------------------------------------------------------------------------------------------------------------------------
-- create public database link /as sysdba@ora9fron
drop public database link ora9back;
create public database link ora9back using 'ora9back';
select * from global_name@ora9back;
-- create repadmin /as sysdba@ora9fron
drop user repadmin cascade;
create user repadmin identified by repadmin;
execute dbms_repcat_admin.grant_admin_any_schema(username => 'repadmin');
execute dbms_defer_sys.register_propagator('repadmin');
execute dbms_repcat_admin.register_user_repgroup(username => 'repadmin',privilege_type => 'receiver',list_of_gnames => NULL);
grant execute any procedure to repadmin;
execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
grant comment any table to repadmin;
grant lock any table to repadmin;
grant select any dictionary to repadmin;
grant create session to repadmin;
-- create database link repadmin/repadmin@ora9fron
drop database link ora9back;
create database link ora9back connect to repadmin identified by repadmin;
select * from global_name@ora9back;
-- time schedule create repadmin/repadmin@ora9fron
execute dbms_defer_sys.schedule_push ( destination => 'ora9back', interval => 'sysdate + 2/1440', next_date => sysdate);
-- execute dbms_defer_sys.unschedule_push(dblink => 'ora9back');
execute dbms_defer_sys.schedule_purge ( next_date => sysdate, interval => 'sysdate + 10/1440', delay_seconds => 0, rollback_segment => NULL);
-- execute dbms_defer_sys.unschedule_purge();
-- create public database link /as sysdba@ora9back
drop public database link ora9fron;
create public database link ora9fron using 'ora9fron';
select * from global_name@ora9back;
-- create repadmin /as sysdba@ora9back
drop user repadmin cascade;
create user repadmin identified by repadmin;
execute dbms_repcat_admin.grant_admin_any_schema(username => 'repadmin');
execute dbms_defer_sys.register_propagator('repadmin');
execute dbms_repcat_admin.register_user_repgroup(username => 'repadmin',privilege_type => 'receiver',list_of_gnames => NULL);
grant execute any procedure to repadmin;
execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
grant comment any table to repadmin;
grant lock any table to repadmin;
grant select any dictionary to repadmin;
grant create session to repadmin;
-- create database link repadmin/repadmin@ora9back
drop database link ora9fron;
create database link ora9fron connect to repadmin identified by repadmin;
select * from global_name@ora9back;
-- time schedule create repadmin/repadmin@ora9back
execute dbms_defer_sys.schedule_push ( destination => 'ora9fron', interval => 'sysdate + 5/1440', next_date => sysdate);
-- execute dbms_defer_sys.unschedule_push(dblink => 'ora9fron');
execute dbms_defer_sys.schedule_purge ( next_date => sysdate, interval => 'sysdate + 10/1440', delay_seconds => 0, rollback_segment => NULL);
-- execute dbms_defer_sys.unschedule_purge();
Posted by: zhangych at August 8, 2006 1:21 PM
在添加主体复制节点时,报错,错误信息如下:
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
这是什么原因啊,这个问题已经好久没解决了,请大家帮忙解答一下好吗,谢谢了!
Posted by: eimi at August 11, 2006 9:37 AM
看的好头大啊
Posted by: 数据恢复 at August 11, 2006 3:36 PM
ORA-23375: 特性与数据库版本NEWSIS.US.ORACLE.COM不兼容
这个错误是由于global_name设置问题引起的。请检查global_name值。
Posted by: eygle at September 14, 2006 2:35 PM
不知道eygle 还是否关注这个讨论。
我现在配置完成了多主复制。但是我想知道,最开始的数据初始化工作有没有储存过程支持?
我现在是使用exp imp 的方式来初始化两端的数据。
是否有强制B 表刷新A 表的办法?
非常感谢!
Posted by: ssonu at November 9, 2006 3:05 AM
execute dbms_repcat.create_master_repobject
(sname=>'hawa',oname=>'hw_test',
type=>'table',use_existing_object=>true,gname=>'rep_hh',copy_rows=>false);
这里的use_existing_object 和 copy_rows就是控制这个的。
Posted by: eygle at November 9, 2006 8:35 AM
非常感谢。
不知道您是否有时间可以简单介绍一下应该如何控制么?
我现在master 已经创建完成了,是否把copy_rows 修改成true 就可以了?如果两边的表都有数据,但是不一致,那么在push job 启动的时候就会根据主键规则来同步两边的数据?
待同步结束,我还需要把true 改成false?这样就是增量复制了?
另外还有一个问题就是,这种模式是否支持分区表呢?
再次感谢您的答复。
Posted by: ssonu at November 13, 2006 4:53 PM
刚才查了一下文档。
eygle 版主帮忙看看是否有问题!
BEGIN
DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY (gname => 'xxx');
END;
/
begin
DBMS_REPCAT.DROP_MASTER_REPOBJECT (
sname=>'SCOTT',
oname=>'DEPT',
type=>'TABLE');
end;
/
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
gname => '"xxx"',
type => 'TABLE',
oname => '"DEPT"',
sname => '"SCOTT"',
copy_rows => TRUE,
use_existing_object => TRUE);
END;
/
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => 'SCOTT',
oname => 'SCOTT',
type => 'TABLE',
min_communication => TRUE,
generate_80_compatible => FALSE);
END;
/
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (gname => 'xxx');
END;
/
这个过程中主站是不能允许有数据插入的吧?然后在create 的过程中,副站的数据会被强制清空,然后与主站同步?
Posted by: ssonu at November 13, 2006 5:12 PM
execute dbms_repcat.create_master_repobject
(sname=>'hawa',oname=>'hw_test',
type=>'table',use_existing_object=>true,gname=>'rep_hh',copy_rows=>false);
这是初始化的过程,之后的复制和这个无关,同步还是异步复制需要后续指定,其实你自己测试一下就清楚了。
Posted by: eygle at November 13, 2006 11:28 PM
非常感谢eygle 版主帮助。
不过我的多主复制,再增加复制表后,重新启动复制组。结果发现两边数据库的复制状态不一致。一个为normal 一个为 静默状态。这种问题出现的很奇怪。因为在测试过程中,一直都很正常。希望eygle 版主指点一二。
Posted by: ssonu at November 16, 2006 3:21 AM
你可以看dba_repcatlog里面有没有记录什么错误。
Posted by: eygle at November 16, 2006 8:47 AM
恩,看了dba_repcatlog。里面提示一张带有外键的表,缺少父向关键字。这个错误很奇怪啊。我在跟新的时候,全部选择了copy_rows = true 按道理说 两边数据应该完全一致才对头。
会是这个错误影响的么?
Posted by: ssonu at November 16, 2006 1:59 PM
我想请教一下,原则上在Oracle9i环境下的可不可以对
Oraccle8i中的表建立实体化视图,因为对方系统的数据库是8i,而我们自己用的是9i,现在还自己不能试,非常急切想知道是否可行,请知道的大虾多多指教,先谢谢了!
Posted by: mumufly at December 11, 2006 9:19 AM
有沒有Oracle高級複製的文檔或者教程呢?
Posted by: user at September 29, 2007 5:41 PM
