`
xuechenyoyo
  • 浏览: 56785 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle10G多台服务器同步复制

 
阅读更多

[应用]Oracle10G多台服务器同步高级复制

【原文】http://mingling123456.blog.163.com/blog/static/106618920077210334379/

需求:公司网站需要在北京网通和上海电信建两台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 by abc123 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 link db.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;

即可;

分享到:
评论

相关推荐

    Oracle10G多台服务器同步高级复制

    本文将详细解析Oracle 10G多台服务器同步高级复制的关键概念、配置步骤以及实现过程,帮助读者深入理解并掌握这一重要技能。 ### Oracle 10G 高级复制概述 Oracle 10G的高级复制(Advanced Replication)是一种...

    oracle10g 文档

    - **体系结构概述**:Oracle 10g 采用了先进的体系结构设计,支持网格计算,能够实现在多台服务器之间的负载均衡,并且可以通过集中管理的方式提高整体系统的可靠性和性能。 - **主要组件**: - **Automatic ...

    oracle 主从同步

    ### Oracle 10g DATAGUARD安装配置与维护 #### 1.1 Linux操作系统的安装和配置 在部署Oracle 10g DATAGUARD之前,需要确保Linux操作系统已经正确安装并配置好所需的环境。这里以Red Hat Enterprise Linux 5 (RHEL5...

    Linux+Oracle11g+ogg11单向复制

    本实验是在两台运行 Oracle11g 的 Linux 服务器上进行的,其数据文件采用了 ASM (Automatic Storage Management) 方式存储。具体的节点配置如下: - **节点1**: IP地址为 asm1192.168.100.80/24, Oracle 服务实例名...

    oracle 11G高可用备份

    RAC允许多台服务器(节点)同时访问同一数据库,如果一台服务器发生故障,其余服务器可以接管工作,保障服务不中断。 3. 真正应用集群(RAC):RAC是Oracle数据库提供的用于实现集群计算的技术,是高可用性解决方案...

    Oracle10G官方文档CHM合集-Database参考手册

    1. **数据库架构**:Oracle 10g采用了一种称为多层客户-服务器架构,包括前端工具、中间件和数据库服务器。数据库服务器包含数据存储、查询处理、并发控制和安全性等核心组件。 2. **表空间与数据文件**:在Oracle ...

    ORACLE 10G 高级复制 参考手册

    Oracle 10G 高级复制是Oracle数据库中一种强大的数据同步和灾难恢复技术,它允许数据在多个数据库之间实时或近实时地进行复制。在Oracle 10G中,高级复制提供了高度灵活和可定制的数据复制解决方案,适用于分布式...

    AIX 5L 安装 ORACLE RAC 10G 官方文档

    RAC 10g指的是Oracle RAC的第10g版本,其中“g”可能是指“grid”,即网格计算。RAC允许多个服务器节点间共享访问同一个数据库,使得数据库服务可以提供更高的容错能力和更佳的负载均衡。 3. Oracle Automatic ...

    Oracle10G卸载教程-重点推荐

    Oracle 10G 卸载教程详解 Oracle Database 10g 数据库系统的卸载与...卸载 Oracle Database 10g 服务器需要逐步卸载 Oracle 集群同步服务、Oracle HTML DB 和 Oracle 数据库及其所有组件,并需要手工删除剩余的内容。

    oracle10g concepts

    1. **网格计算**:Oracle 10g的主打概念之一,它允许将多台计算机连接成一个共享资源池,称为网格,提供高可扩展性和资源利用率。这使得企业可以轻松地管理和扩展其数据库环境。 2. **Real Application Clusters ...

    oracle 10g rac grid,services & clustering

    ### Oracle 10g RAC Grid, Services & Clustering 关键知识点解析 #### 一、Oracle RAC(Real Application Clusters)概述 Oracle RAC 是一种集群数据库技术,旨在为多实例环境提供高可用性和可扩展性解决方案。...

    论文研究-基于Oracle10g的实体化视图复制研究 .pdf

    2. Oracle10g数据库复制功能:Oracle10g是一种数据库管理系统,其复制功能允许多个数据库之间通过局域网、广域网或Internet进行数据的同步和拷贝。Oracle10g数据库复制可以分为局域网复制、广域网复制和远程复制。...

    oracle10g教学课件

    6. **高级复制**:Oracle 10g的复制技术使得数据能够在多个数据库间同步,支持实时数据仓库和灾难恢复场景。 7. **物化视图**:物化视图是预先计算好的查询结果,可以提供快速的数据访问,特别适用于报表和分析应用...

    oracle 10g RAC 虚拟机上安装

    Oracle 10g RAC (Real Application Clusters) 是一种高可用性和可伸缩性的数据库解决方案,允许多个实例同时访问同一数据库,从而提供卓越的性能和故障切换能力。在VMware虚拟机上安装Oracle 10g RAC,可以为测试和...

    Oracle GoldenGate V11.1.1.1.2 for Oracle 11g on Linux x86-64.zip

    总的来说,Oracle GoldenGate V11.1.1.1.2在Oracle 11g数据库的Linux环境中提供了高级别的数据复制服务,通过详细的文档和工具,用户可以轻松地实现数据的实时同步和保护,从而保证业务的连续性和数据的完整性。...

    Oracle10g参考手册

    Oracle10g的复制技术允许数据在不同数据库之间同步,包括Snapshot复制、Logical Standby和GoldenGate。Merge功能则用于合并多个数据源,实现数据集成。 9. Grid Computing架构: Oracle10g引入了Grid ...

    ORACLE数据库复制

    复制技术将数据从一个数据库复制到另一个物理位置的数据库,这样查询和统计操作可以在独立的服务器上进行,减轻主数据库的压力,确保关键业务不受影响。 Oracle提供了三种复制技术:**高级复制(Advanced ...

    Oracle-10g与11g的区别.docx

    Oracle 10g 开始支持网格计算,即多台结点服务器利用高速网络组成一个虚拟的高性能服务器,负载在整个网格中衡(Load Balance),按需增删结点,避免单点故障(Single Point of Failure)。 安装和管理 Oracle 10...

    Oracle 10g New Features

    1. Real Application Clusters (RAC) - Oracle 10g的RAC功能允许多台服务器共享同一数据库实例,增强了高可用性和负载均衡。这意味着当一台服务器出现故障时,工作负载可以无缝地转移到其他节点,确保业务连续性。 ...

Global site tag (gtag.js) - Google Analytics