需求:公司网站需要在北京网通和上海电信建两台Oracle10G服务器,数据必须实时同步,本来准备用物理镜向的RAC,但它对于数据通信占用流太大,而它的主要功能是做为分步式数据备份使用,而现在公司需求是两台数据时实同步,所以选择实时高级复制;
环境:Oracle版本10.2.0.1,安装路径无限制,北京glabol_name为:db.bj.com,上海glabol_name为:sh.bj.com
首先,数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持)
查看是否支持高级手复制
select value from v$option where parameter='Advanced replication';.
一.数据库基本情况
因为上海和北京的网站都运用同一个SID,所以SID为一样,而sevice_name必须为同一域名;
数据库上海 版本oracle 10.2.0.1 数据库名sid:db 服务名:db.sh.com
数据库北京 版本oracle 10.1.0.3 数据库名sid:db 服务名:db.bj.com
主体定义站点上海: db
主体站点上海: db
北京IP:210.44.185.201
上海IP:222.74.85.193
注:主体定义站点指配置复制工作的站点
本例涉及的用户.
复制管理员:repadmin
应用用户:cqm
本例复制的对象:reptest 数据表
本例的先决条件:你需要设置好相应的参数,job_queue_processes需要大于0,global_name=true,并且建立相应的db link.
alter system set global_names=true scope=both;
二.在两个数据库上分别创建应用用户CQM
CREATE USER CQM IDENTIFIED BY CQM DEFAULT TABLESPACE users TEMPORARY TABLESPACE TEMP;
GRANT DBA TO CQM;
三.在两个数据库上分别创建复制管事员用户REPADMIN
--创建repadmin用户管理复制环境
CREATE USER REPADMIN IDENTIFIED BY abc123;
ALTER USER REPADMIN DEFAULT TABLESPACE USERS;
ALTER USER REPADMIN TEMPORARY TABLESPACE TEMP;
GRANT connect, resource TO REPADMIN;
--授予repadmin用户权限可以管理当前站点中任何主体组
EXECUTE dbms_repcat_admin.grant_admin_any_schema('REPADMIN');
--授予repadmin用户权限可以为任何表创建snapshot logs
GRANT comment any table TO REPADMIN;
GRANT lock any table TO REPADMIN;
--指定repadmin用户为propagator,并授予执行任何procedure的权限
EXECUTE dbms_defer_sys.register_propagator('REPADMIN');
GRANT execute any procedure TO REPADMIN;
四.更改两个数据库的全局名称,如果一开始建库时就设好了service_name,这一步就可以不做了
上海:alter database rename global_name to db.sh.com;
北京:alter database rename global_name to db.bj.com;
五.在两个数据库上分别建立数据库链接:紫色为repadmin密码
上海db.sh.com:create public database link db.bj.com connect to REPADMIN identified byabc123
using'(description=(address_list=(address=(protocol=tcp)(host=210.44.185.201)(port=1521)))(connect_data=(sid=db)(server=dedicated)))';
北京db.bj.com:create public database linkdb.sh.com connect to REPADMIN identified by
abc123 using'(description=(address_list=(address=(protocol=tcp)(host=222.74.85.193)(port=1521)))(connect_data=(sid=db)(server=dedicated)))';
六.在两个数据库的应用用户CQM下创建表
在数据库db.sh.com上用户CQM下,当然如果你的cqm用户已有数据表就可不再建表:注意,要进行复制的表必须有主键,高级复制的同步依据就是主键,所以主键为必要条件:
CREATE TABLE TEST(ID NUMBER(10),TIMESTAMP DATE DEFAULT sysdate);
ALTER TABLE TEST ADD(CONSTRAINT TEST_PK PRIMARY KEY(ID));
insert into test(id) values(1);
在数据库db.bj.com上用户CQM下:
CREATE TABLE TEST(ID NUMBER(10),TIMESTAMP DATE DEFAULT sysdate);
ALTER TABLE TEST ADD(CONSTRAINT TEST_PK PRIMARY KEY(ID));
七.在主体定义站点开始操作(数据库db.sh.com)
以REPADMIN登录数据库db
--创建复制组:
execute dbms_repcat.create_master_repgroup('repg');
--在复制组里加入复制对象:
execute dbms_repcat.create_master_repobject(sname=>'cqm',oname=>'test',type=>'table',use_existing_object=>true,gname=>'repg',copy_rows=>false);
--对复制对象产生复制支持:
execute dbms_repcat.generate_replication_support('cqm','test','table');
--添加主体复制节点:
execute dbms_repcat.add_master_database(gname=>'repg',master=>'db.bj.com',use_existing_objects=>true,copy_rows=>false, propagation_mode => 'synchronous');
--在主体定义站点启动复制:
execute dbms_repcat.resume_master_activity('repg',true);
八.至此配置完成
测试
九:注意事项,在建好复制同步后,看两个数据的处理请求(用控制台进去后,点-分配-高级复制-管理中的拓朴图),要请他本身处理请求完成后(设置的同步表越多,请求就越多,请慢慢等待),再测试数据同步,由于太心急,我做前几次时都在它本身处理请求没完成时测试老是测试不成功,直接至重设了好几次;
十:后台设置;
如果想再加入其它表的同步
1.停止服务:execute dbms_repcat.suspend_master_activity(gname=>'repg');
2.添加复制对象:execute dbms_repcat.create_master_repobject(sname=>'cqm',oname=>'test1',type=>'table',use_existing_object=>true,gname=>'repg',copy_rows=>false);
3.为对像生成复制支持:execute dbms_repcat.generate_replication_support('cqm','test1','table');
4.再启动服务:execute dbms_repcat.resume_master_activity('repg',true);
注意,如有多个对像,请重复执行2和3步骤;
相关问题:
数据库同步之后,随之而来的问题就是,如果数据库里每个表都是以自增ID为主键的话(oracle的自增字段为序列+触发器实现),而我们只设置表同步,序列是没有办法进行同步的,而序列是只要查询一次就会自增加1,如果sh数据插入一条不成功,而第二第成功的话,就会形成ID不一致现象,如下所示:
sh bj
表t_a,序列se_a,下一ID:1120 表t_a,序列se_a,下一ID:1120
插入失败:se_a也会+1为1121而数据不成功也就不同步,bj还是1120
第二次插入成功:se_a+1为1122 数据成功同步,bj的se_a+1 为:1121
这样也就形成了北京和上海数据同步而ID不一致,如果你的表中使用了clob字段,这样的话clob字段也会为影响为null,
解决方案为:如果sh为主库,bj为负库,也就是说这个t_a的表只有上海为插入删除操作,北京只是查询,最简单的就是把北京的序列的触发器册除,即可;如果上海和北京都对t_a表都有插入删除操作,也就是双向同步,那就要使上海和北京的ID序列不一样就行,如北京以1开始,而上海以900000001开始,再修改触发器:
原触发器为:select se_a.nextval into:new.id from dual;
修改为:if :new.id is null then
select se_a.nextval into:new.id from dual;
end if;
即可;
相关推荐
操作系统: Red Hat Enterprise Linux Server release 5.3 数据库版本: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit 的oracle同步复制实例
本方案提供了Oracle10g数据库的定期同步,速度快,稳定性高。如有问题请咨询QQ:165310275
oracle11g整个数据库通过dbf文件迁移技术
Oracle 10g应用服务器管理与网格计算
巧用dblink结合oracle快照实现两台服务器的数据同步
Oracle11g uos服务器操作系统
Oracle 白皮书 ADG 同步复制技术.
1、该压缩包包含,创建link的过程,同步库表的sql语句,自动执行的bat脚本。...2、通过link进行连接两台带有oracle11g的数据库之间表同步,包含添加和更新表数据。 3、通过任务计划自动执行bat脚本,定时同步库表。
Oracle10G数据库系统教程02-0003 10 Oracle10G数据库系统教程02-0006 10 Oracle10G数据库系统教程01-0002 11 Oracle10G数据库系统教程01-0003 11 Oracle10G数据库系统教程01-0004 11 Oracle10G数据库系统教程06-0001...
新手入门Oracle 10G服务器安装图解
oracle10G和11G的OCI.dll,主要用于navicat工具;oracle10G和11G的OCI.dll,主要用于navicat工具
Oracle 数据库是一种网络上的数据库, 它在网络上支持多用户, 支持服务器/客户机等部署(或配置) 服务器与客户机是软件概念, 它们与计算机硬件不存在一一对应的关系. 即: 同一台计算机既可以充当服务器又可以充当客户...
ORACLE 10G 数据库 通过STREAM实现数据库双向同步
ORACLE 10G 高级复制 参考手册 数据库容灾备份
oracle,Oracle10g在Oracle10g上的安装与配置
ORACLE跨库向41服务器同步以及同义词 以及问题解决 ,,
advanced replication初步研究 oracle高级复制、同步
Oracle10g服务器在Windows_XP上安装
经典书籍:Oracle.10g应用服务器管理与网格计算 Oracle 10g 是Oracle公司最新推出的面向网格计算的一套商业应用开发与管理软件,主要包括数据库、应用服务器和开发工具三个层次,因此Oracle 10g的关键特点在于对网格...