您的位置:首页 > 数据库 > Oracle

oracle 配置高级复制环境遇到的问题

2010-04-26 16:20 295 查看
1、在本机69上创建数据库orcl ,global_name=orcl,使用语句

alter database rename global_name to orcl.us.oracle.com 修改数据库的全局数据库名为orcl.us.oracle.com

2、在虚机188上创建数据库viotest,global_name=viotest,使用语句

alter database rename global_name to viotest.us.oracle.com 修改数据库的全局数据库名为viotest.us.oracle.com

3、定义机器A:188 机器B:69

4、按照操作步骤完成后,在机器A上插入数据时报错

ora-04067:没有执行,stored procedure "wcms.Test$pr"不存在

ora-01085:延迟rpc到“wcms.test$rp.rep_insert"之前的错误

ora-02063:紧接着2 lines(源于orcl)

5、在机器A上查看dba_repcatlog

select * from dba_repcatlog 发现表中有记录,且状态为ready和await_callback,其中:

ready:表示请求准备被执行

await_callback:只出现在主体定义站点上,表示正在等待其他的主站点执行请求并且返回结果

6、在机器B上查看dba_repcatlog发现B中记录的装提案均为ready,并且与A中await_callback的记录一一对应。

然后如果长时间处于ready状态,则可以手动执行dbms_repcat.do_deferred_repcat_admin存储过程来执行请求,于是在机器B上执行execute dbms_repcat.do_deferred_repcat_admin(gname=>'mygroup'),然后dba_repcatlog中无记录了,重新在A上执行插入语句,成功。

后来经过分析,发现dbms_repcat.do_deferred_repcat_admin('"MYGROUP"', FALSE);的job的间隔时间是10分钟,就是在配置完后需要隔十分钟才会执行do_deferred_repcat_admin,也就是说如果在十分钟后在A中执行插入语句应该不会出错。

在A上插入数据,在B上查询结果正确,但是在B上插入数据,却出错。报:

ORA-23326: 没有抑制对象组 "PUBLIC"."MYGROUP"

网上查资料,内容如下:

配置完后,状态为 QUIESCED的结点必须变为NORMAL才能DML。否则只能刷新而不能更改,如果发布DML则会收到:

14:51:04 ">repadmin@rt>insert into test_user.account values (11);

insert into test_user.account values (11)

ORA-23326: 没有抑制对象组 "PUBLIC"."REP"

在机器B上查询复制组的状态

select gname,master,status from dba_repgroup;

GNAME MASTER STATUS
------------------------------ ------ ---------
MYGROUP Y QUIESCED

发现状态为quiesced.在机器B上运行作业dbms_repcat.do_deferred_repcat_admin('"MYGROUP"', FALSE);

execute dbms_job.run(2);再查询,状态改为了normal.再插入,一切正常。

上述过程建立的主体组是mygroup,且同步方式为同步。

下面接着在机器A上创建主体组rep_anymusic,将同步方式设为异步。

按照操作步骤完成之后,在A上插入数据,过段时间在B上查询有数据。但是在B上插入数据,在A上等了老久也没有数据,然后在B上手动执行push的作业,结果在A上有数据。怀疑是job的问题,查看各参数后,感觉没有什么问题,不得已将数据库重启,一切正常。

总结:可以在一个数据库上建立不同的主体组,然后设置不同的同步方式(同步和异步),以便适应不同的需要
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: