oracle单机扩容双机,oracle高级复制尝试-双机互备

好容易,折腾了两个星期才把高级复制配置成功,还有很多东西不清楚,不管了,作为总结,先把操作过程写下来,给所有人做个范例,特别感谢yangtk等大虾的无私奉献,抗议许多都没有自己尝试就直接转载的同仁,热情可贵,可就是害我在遇到问题baidu的时候付出了不少无用功。好,废话不多说,步骤如下,

1.检查数据库参数:

要求:global_names: TRUE;

Open_links:最小数5;

修改命令:alter system set global_names=true;

查看参数:show parameter global_names;

2.修改listener.ora:

使双机能够互相使用@访问:

如这里,测试双机环境如下,

主机1:shenzhen域名:shenzhen

主机2:beijing域名:beijing;

使得双方可以通过@shenzhen与@beijing互相访问。

3.在主机shenzhen上执行下面脚本:

a)以system用户登录并建立复制管理员rep;

connect system/root@shenzhen;

create user rep identified by rep

default tablespace users

temporary tablespace temp;

b)对复制管理员用户rep授予管理员权限;

Begin

dbms_repcat_admin.grant_admin_any_schema(username=>’rep’);

end;

/

grant comment any table to rep;

grant lock any table to rep;

//注册传播函数;

begin

dbms_defer_sys.register_propagator(username=>’rep’);

end;

/

Grant execute any procedure to rep;

c)增加到beijing节点的公共链路;

Create public database link beijing using ‘beijing’;

d)登录复制管理员用户,建立私有链路;

connect rep/rep@shenzhen

create database link beijing connect to rep identified by rep;

e)每隔1分钟push一次任务将shenzhen节点上的事务推到beijing节点上去执行

Begin

dbms_defer_sys.schedule_push(

destination=>’beijing’,

interval=>’sysdate+1/(60*24)’,

next_date=>sysdate,

stop_on_error=>FALSE,

delay_seconds=>0,

parallelism=>2);

END;

/

f)注册接收者

Begin dbms_repcat_admin.register_user_repgroup(

Username=>’rep’,

Privilege_type=>’receiver’,

List_of_gnames=>NULL

);

end;

/

g)每隔5分钟PURGE一次任务将shenzhen节点上已完成的事务退出队列

Begin dbms_defer_sys.schedule_purge(

next_date=>sysdate,

interval=>’sysdate+5/(60*24)’,

delay_seconds=>0,

rollback_segment=>’’);

end;

/

h)在shenzhen主机上建立nari用户

connect system/root@shenzhen;

create user nari identified by nari default tablespace users temporary tablespace temp;

grant alter session to nari;

grant create cluster to nari;

grant create database link to nari;

grant create sequence to nari;

grant create session to nari;

grant create synonym to nari;

grant create table to nari;

grant create view to nari;

grant create procedure to nari;

grant create trigger to nari;

grant unlimited tablespace to nari;

grant create type to nari;

grant create any snapshot to nari;

grant alter any snapshot to nari;

i)在shenzhen主机上建立NARI下的dept表、tmp表;

connect nari/nari@shenzhen;

create table dept(

deptno number primary key

);

create table tmp(

deptno number primary key

);

commit;

4.在主机beijing上执行下面脚本:

a)以system用户登录并建立复制管理员rep;

connect system/root@beijing;

create user rep identified by rep

default tablespace users

temporary tablespace temp;

b)对复制管理员用户rep授予管理员权限;

Begin

dbms_repcat_admin.grant_admin_any_schema(username=>’rep’);

end;

/

grant comment any table to rep;

grant lock any table to rep;

begin dbms_defer_sys.register_propagator(username=>’rep’);

end;

/

grant execute any procedure to rep;

c)对shenzhen节点建立公共链路;

Create public database link shenzhen using ‘shenzhen’;

d)以复制用户对shenzhen节点建立私有链路;

conn rep/rep@beijing

create database link shenzhen connect to rep identified by rep;

e)每隔1分钟push一次任务将beijing节点上的事务推到shenzhen节点上去执行

Begin

dbms_defer_sys.schedule_push(

destination=>’shenzhen’,

interval=>’sysdate+1/(60*24)’,

next_date=>sysdate,

stop_on_error=>FALSE,

delay_seconds=>0,

parallelism=>2);

END;

/

f)每隔5分钟PURGE一次任务将beijing节点上已完成的事务退出队列

Begin dbms_defer_sys.schedule_purge(

next_date=>sysdate,

interval=>’sysdate+5/(60*24)’,

delay_seconds=>0,

rollback_segment=>’’);

end;

/

g)注册接收者

Begin dbms_repcat_admin.register_user_repgroup(

Username=>’rep’,

Privilege_type=>’receiver’,

List_of_gnames=>NULL

);

end;

/

h)在beijing主机上建立nari用户

connect system/root@beijing;

create user nari identified by nari default tablespace users temporary tablespace temp;

grant alter session to nari;

grant create cluster to nari;

grant create database link to nari;

grant create sequence to nari;

grant create session to nari;

grant create synonym to nari;

grant create table to nari;

grant create view to nari;

grant create procedure to nari;

grant create trigger to nari;

grant unlimited tablespace to nari;

grant create type to nari;

grant create any snapshot to nari;

grant alter any snapshot to nari;

i)在beijing主机上建立NARI下的dept表、tmp表;

connect nari/nari@beijing;

create table dept(

deptno number primary key

);

create table tmp(

deptno number primary key

);

commit;

5.在主机shenzhen上执行下面脚本:

a)以rep用户登录;

conn rep/rep@shenzhen;

b)建立对称复制组“SCOTT”

Begin dbms_repcat.create_master_repgroup(gname=>’SCOTT’,qualifier=>’’,group_comment=>’’);

End;

/

c)把DEPT\TMP表加入到对称复制组“SCOTT”中

Begin

dbms_repcat.create_master_repobject(gname=>’”SCOTT”’, type=>’TABLE’,

oname=>’DEPT’,sname=>’nari’,use_existing_object=>TRUE,

copy_rows=>TRUE);

End;

/

Begin

dbms_repcat.create_master_repobject(gname=>’”SCOTT”’, type=>’TABLE’,

oname=>’TMP’,sname=>’nari’,use_existing_object=>TRUE,

copy_rows=>TRUE);

End;

/

d)把主数据库“Beijing”加入到对称复制组“SCOTT”中

Begin

Dbms_repcat.add_master_database(gname=>’”SCOTT”’,master=>’beijing’,use_existing_objects=>TRUE, copy_rows=>TRUE, propagation_mode=>’ASYNCHRONOUS’);

End;

/

(ORA-4052查找远程对象SYS.SYS.BEIJING出错)

(ORA-23308:对象nari.DEPT不存在或无效ORA-02055:分布式更新操作失效,要求回退:

遇到该问题后,新建表CC,新建复制组T,所有问题解决;原因在于建表过程,建表时,应使用目前说明的语句,不要使用alter。。。modify语句,不能有NUMBER(2)这样的描述,先不要insert数据进入)

e)生成复制支持表DEPT

Begin dbms_repcat.generate_replication_support(sname=>’nari’,

Oname=>’DEPT’,type=>’TABLE’,min_communication=>TRUE);

End;

/

f)生成复制支持表TMP

Begin dbms_repcat.generate_replication_support(sname=>’nari’,

Oname=>’TMP’,type=>’TABLE’,min_communication=>TRUE);

End;

/

g)启动对称复制组SCOTT

Begin dbms_repcat.resume_master_activity(gname=>’”SCOTT”’);

End;

/

Commit;

执行完后,使用system用户登录系统并查询状态;

Connsystem/root@shenzhen

Select gname,status from sys.dba_repcat ;

如果看到当前复制组的状态为NORMAL表明可以进行DML操作;

同时,如果工作正常的话,应该使用如下命令,看不到log:

Select count(*) from sys.dba_repcatlog;

(如果为quiesced,

Begin dbms_repcat.resume_master_activity(’”SCOTT”’,true);

End;

/

会发现配置主站变成NORMAL,但是另外一个主站仍然为quiesced,该站不能执行启动复制组的操作

可以查询该站的job:

select job,this_date,next_date,what from user_jobs;

使用命令exec dbms_job.run(job_number);

Job_number为该主机的最后一个job号,可以启动相应job,发现相应数据就会被同步;而且执行该操作后,该主机也会从quiesced变成NORMAL

)

特别:

1.如果想停止复制对称组运行:

executedbms_repcat.suspend_master_activity(gname=>’SCOTT’);注意,需要rep用户;

在执行复制使用,

Begin dbms_repcat.resume_master_activity(gname=>’”SCOTT”’);

End;

2.如果想删除复制组:

execute dbms_repcat.drop_master_repgroup(gname => 'SCOTT', drop_contents => false, all_sites => false);

3.在复制组scott_mg里删除数据库对象。execute dbms_repcat.drop_master_repobject ('testuser','dept','table');

4.重新使同步组的状态由停顿(quiesced )改为正常(normal)。execute dbms_repcat.resume_master_activity('scott_mg',false);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值