`
itpsh
  • 浏览: 8085 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
最近访客 更多访客>>
社区版块
存档分类
最新评论

用ORACLE的高级复制实现内外网数据同步

阅读更多
用ORACLE的高级复制实现内外网数据同步

本文简要介绍了ORACLE的高级复制功能,并通过一个实际项目,讨论了在内外网的两级DB中如何采用高级复制达到内外网的数据统一,最后给出配置脚本供大家参考。

1、基本概念

ORACLE
ORACLE是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是客户/服务器(CLIENT/SERVER)体系结构的数据库之一。

高级复制
什么是复制?简单地说复制就是在由两个或者多个数据库系统构成的一个分布式数据库环境中拷贝数据的过程。
高级复制,是在组成分布式数据库系统的多个数据库中复制和维护数据库对象的过程。 Oracle 高级复制允许应用程序更新数据库的任何副本,并将这些更改自动传递到其他数据库,同时确保全局事务处理的一致性和数据完整性。
同步复制,复制数据在任何时间在任何复制节点均保持一致。如果复制环境中的任何一个节点的复制数据发生了更新操作,这种变化会立刻反映到其他所有的复制节点。这种技术适用于那些对于实时性要求较高的商业应用中。
异步复制,所有复制节点的数据在一定时间内是不同步的。如果复制环境中的其中的一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点。这些不同的事务间可以间隔几秒,几分种,几小时,也可以是几天之后。复制节点之间的数据临时是不同步的,但传播最终将保证所有复制节点间的数据一致。

2、项目情况

需求描述
这是一个内外网结构的审批系统。
外网有一个WEB(+APPSERVER),一个DB(ORACLE9.2,双网卡),负责接收申报和反馈审批结果。
内网有一个WEB(+APPSERVER),一个DB(ORACLE9.2,双网卡),负责接收申报和反馈审批结果,以及通过审批流程处理来自外网的审批申报。
由上可知,内网功能包括外网功能,不过外网申报需要CA认证,内网则不需要。
根据国家保密有关规定,政务系统的内外网必须物理隔绝,所以外网接收到的申报并不能马上反应到内网,同理,内网的处理结果也不能迅速反馈到外网。

技术选择`
我们选择ORACLE异步手工复制,复制主要完如下功能:
1. 把外网新申报数据复制到内网;
2. 把内网对申报的处理结果反馈到外网。

操作实现
因为正常工作时间,内外网均不能停顿,而内外网又不能物理连通。于是设定在每天晚上18:00至18:15(或其它时段)为维护时段,该时段内外网均停止作业,由系统管理员把与内外网DB相连的所有网线均断开,用一根直连网线把两台DB连接,通过ORACLE提供的操作界面,在外网端手工刷新记录。


3、具体实现步骤

以下是脚本中用到的技术参数,内外网表结构相同,且都有主键。

内网 外网
IP 192.168.0.50 192.168.0.100
SID ORANEI ORAWAI
表 LAWTABLE
REGISTER
USERINFO
……
共68张表 LAWTABLE
REGISTER
共2张表
登录名/密码 HOLEN/HOLEN HOLEN/HOLEN

以下是我们到客户处安装所用的SQL脚本

第一步:配置内网,即MASTER端

CONN SYSTEM/PASSWORD@ORANEI

CREATE USER "HOLEN"  PROFILE "DEFAULT" IDENTIFIED BY "HOLEN" ;
GRANT "CONNECT" TO "HOLEN";
GRANT "DBA" TO "HOLEN";
GRANT "RESOURCE" TO "HOLEN";
--导入内网数据库备份,在dos下到入完成(表LAWTABLE,REGISTER及其他表)

第二步:配置内网,即MASTER端(续)
--需要复制(同步)的表为HOLEN用户下的LAWTABLE,REGISTER

--创建repadmin用户管理复制环境
CREATE USER REPADMIN IDENTIFIED BY REPADMIN;
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;

--分配proxy snapshot administration权限给repadmin,list_of_gnames为null,意味着可以管理所有对象组
BEGIN
  dbms_repcat_admin.register_user_repgroup(
  username =>       'repadmin',
  privilege_type => 'proxy_snapadmin',
  list_of_gnames =>  NULL);
END;
/

--分配'receiver'权限给repadmin
BEGIN
      dbms_repcat_admin.register_user_repgroup(
      username =>       'repadmin',
      privilege_type => 'receiver',
      list_of_gnames =>  NULL);
END;
/

GRANT select any table TO repadmin;

--在ORANEI上建立主体组,主体组名为HOLEN_MASTER,并往主体组中加入一个表
--建立复制主体组
BEGIN
   DBMS_REPCAT.CREATE_MASTER_REPGROUP(
   gname => '"HOLEN_MASTER"',
   qualifier => '',
   group_comment => '');
END;
/

CONNECT REPADMIN/REPADMIN;


--向复制组中加入表对象LAWTABLE
BEGIN
   DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
   gname => '"HOLEN_MASTER"',
   type => 'TABLE',
   oname => '"LAWTABLE"',
   sname => '"HOLEN"',
   copy_rows => TRUE,
   use_existing_object => TRUE);
END;
/

--建立相应的快照日志
CREATE SNAPSHOT LOG
     ON "HOLEN"."LAWTABLE"
TABLESPACE "SYSTEM"
WITH PRIMARY KEY
EXCLUDING NEW VALUES;

--生成复制支持
BEGIN  
   DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(
   sname => '"HOLEN"',
   oname => '"LAWTABLE"',
   type => 'TABLE',
   min_communication => TRUE,
   generate_80_compatible => FALSE);
END;
/

--向复制组中加入表对象REGISTER
BEGIN
   DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
   gname => '"HOLEN_MASTER"',
   type => 'TABLE',
   oname => '"REGISTER"',
   sname => '"HOLEN"',
   copy_rows => TRUE,
   use_existing_object => TRUE);
END;
/

CREATE SNAPSHOT LOG
     ON "HOLEN"."REGISTER"
TABLESPACE "SYSTEM"
WITH PRIMARY KEY
EXCLUDING NEW VALUES;

BEGIN  
   DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(
   sname => '"HOLEN"',
   oname => '"REGISTER"',
   type => 'TABLE',
   min_communication => TRUE,
   generate_80_compatible => FALSE);
END;
/

--MASTER端配置完毕

第三步:配置外网,即SNAPSHOT端
--外网作为SNAPSHOT   
--创建外网用户HOLEN

CONN SYSTEM/PASSWORD@ORAWAI

--创建普通用户
CREATE USER "HOLEN"  PROFILE "DEFAULT" IDENTIFIED BY "HOLEN";  
GRANT "CONNECT" TO "HOLEN";
GRANT "DBA" TO "HOLEN";
GRANT "RESOURCE" TO "HOLEN";

--创建repadmin用户管理快照端复制环境
CREATE USER REPADMIN IDENTIFIED BY REPADMIN;
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;

--授予repadmin用户可以创建快照
GRANT create any snapshot TO REPADMIN;
GRANT alter any snapshot TO REPADMIN;

--在外网建立与内网的链接
--在外网端需要把ORANEI添加到树
CREATE PUBLIC DATABASE LINK ORANEI CONNECT TO REPADMIN IDENTIFIED BY REPADMIN USING ' ORANEI ';

--在外网建立刷新组 HOLEN_REFRESH
BEGIN
   DBMS_REFRESH.MAKE(
   name => '"HOLEN"."HOLEN_REFRESH"',
   list => '',
   next_date => SYSDATE,
   interval => '/*1:Mins*/ sysdate + 1/(60*24)',
   implicit_destroy => FALSE,
   lax => FALSE,
   job => 0,
   rollback_seg => NULL,
   push_deferred_rpc => TRUE,
   refresh_after_errors => TRUE,
   purge_option => NULL,
   parallelism => NULL,
   heap_size => NULL);
END;
/

--在外网建立快照组
BEGIN
   DBMS_REPCAT.CREATE_SNAPSHOT_REPGROUP(
   gname => '"HOLEN_MASTER"',
   master => 'ORANEI.US.ORACLE.COM',
   propagation_mode => 'ASYNCHRONOUS');
END;
/

--建立快照,快照要在表所属的用户下建立,本例要先用HOLEN用户登陆
CONNECT HOLEN/HOLEN;

--建立快照LAWTABLE
CREATE SNAPSHOT "HOLEN"."LAWTABLE" 
REFRESH FAST FOR UPDATE
AS SELECT * FROM "HOLEN"."LAWTABLE"@ ORANEI.US.ORACLE.COM C
/

--将快照加入刷新组
BEGIN  
  DBMS_REFRESH.ADD(
  name => '"HOLEN"."HOLEN_REFRESH"',
  list => '"HOLEN"."LAWTABLE"',
  lax => TRUE);
END;
/

--将快照加入快照组
BEGIN
   DBMS_REPCAT.CREATE_SNAPSHOT_REPOBJECT(
   gname => '"HOLEN_MASTER"',
   sname => '"HOLEN"',
   oname => '"LAWTABLE"',
   type => 'SNAPSHOT',
   min_communication => FALSE);
END;
/

--建立快照REGISTER
CREATE SNAPSHOT "HOLEN"."REGISTER" 
REFRESH FAST FOR UPDATE
AS SELECT * FROM "HOLEN"."REGISTER"@ ORANEI.US.ORACLE.COM C
/

--将快照加入刷新组
BEGIN  
  DBMS_REFRESH.ADD(
  name => '"HOLEN"."HOLEN_REFRESH"',
  list => '"HOLEN"."REGISTER"',
  lax => TRUE);
END;
/

--将快照加入快照组
BEGIN
   DBMS_REPCAT.CREATE_SNAPSHOT_REPOBJECT(
   gname => '"HOLEN_MASTER"',
   sname => '"HOLEN"',
   oname => '"REGISTER"',
   type => 'SNAPSHOT',
   min_communication => FALSE);
END;
/

--外网端(SNAPSHOT)配置完毕

第四步:配置内网
--当外网配置完成后,在内网执行如下语句

BEGIN
   DBMS_REPCAT.RESUME_MASTER_ACTIVITY(
   gname => '"HOLEN_MASTER"');
END;
/
仅供参考
分享到:
评论

相关推荐

    基于ORACLE高级复制技术实现内外网一体化设计方法.pdf

    基于ORACLE高级复制技术实现内外网一体化设计方法 本文介绍了青岛市劳动和社会保障局基于ORACLE高级复制技术实现内外网业务受理的一体化电子政务解决方案。该解决方案采用异步复制技术,实现了内外网数据的一致性和...

    mysql-oracle数据同步

    1. **使用ETL工具**:Extract, Transform, Load(ETL)工具如Informatica、Talend或Kettle(Pentaho Data Integration),它们提供图形化界面,可以设置数据抽取规则,实现数据清洗、转换,并加载到目标数据库。...

    oracle高级复制操作过程

    Oracle高级复制是Oracle数据库系统提供的一种复杂的数据同步技术,它允许在不同的数据库之间实时或近实时地复制数据。本教程将详细介绍如何进行Oracle高级复制的配置。 首先,我们需要准备两个运行Oracle数据库的...

    通过Oracle的流复制实现数据库之间的同步

    通过Oracle的流复制实现数据库之间的同步,是一种高效的数据同步机制,尤其在企业级应用中,对于数据一致性和实时性有着极高的要求。Oracle Streams作为Oracle数据库的一项重要特性,自Oracle9i版本开始引入,取代了...

    使用 PDI 和 Oracle CDC 来实现Oracle 数据库向其他数据库的数据同步

    4. 使用 PDI 和 Oracle CDC 实现数据同步 使用 PDI 和 Oracle CDC 可以实现 Oracle 数据库向其他数据库的数据同步。PDI 提供了一个图形化的界面,用于设计和执行数据集成任务。Oracle CDC 提供了实时捕获和发布...

    SpringBoot定时任务实现Oracle和mysql数据同步

    Spring Boot作为Java领域的一个热门微服务框架,提供了强大的定时任务功能,能够帮助我们实现不同数据库间的数据同步,比如Oracle到MySQL。本篇文章将详细讲解如何利用Spring Boot的定时任务特性,结合Java的相关...

    Oracle高级复制技术详解

    Oracle 高级复制技术是Oracle数据库提供的一种强大的数据同步与分布解决方案,主要用于构建分布式数据库环境,以满足跨地域数据共享、高可用性、灾难恢复等需求。这项技术自Oracle 7.1.6版本引入以来,经过多次版本...

    oracle实现数据同步

    ### Oracle 实现数据同步 #### 一、概述 在企业级应用中,为了实现数据的一致性和冗余性,往往需要在多个服务器之间同步数据。Oracle 提供了多种方式进行数据同步,其中一种常用的方法是利用 **dblink** 结合 **...

    Oracle 12.2主从数据同步方法

    Oracle 12.2 主从数据同步方法是为了满足项目客户的需求,实现数据的实时同步。为此,我们在公司内部搭建了相关的测试环境,并总结出了 Oracle 12 数据库主从数据同步方法。 二、测试环境 我们的测试环境包括两个...

    Oracle高级复制数据调研报告

    Oracle高级复制技术是一种用于在分布式数据库环境中同步和管理数据的方法,它允许用户在多个数据库之间复制数据,确保数据的一致性和可用性。本调研报告主要关注Oracle中的高级复制功能,特别是物化视图...

    ORACLE 数据复制技术

    日志捕获:** Oracle通过日志文件记录所有对数据库的更改操作,这些日志可以用来重建这些更改,从而实现数据复制。 **2. 复制代理:** 在源数据库和目标数据库之间建立连接,并负责数据的传输工作。 **3. 数据同步...

    浅谈基于Oracle高级复制实现数据库同步热备.pdf

    综上所述,通过细致规划和配置,基于Oracle高级复制实现数据库同步热备不仅可以提高数据的可用性和可靠性,还能有效应对各种潜在风险。这不仅需要对Oracle数据库的基本操作有所了解,还需要深入理解高级复制机制的...

    Oracle2Oracle数据同步

    在这个场景中,我们关注的是如何在两个不同的Oracle数据库之间实现数据表的同步。 Oracle提供了多种方法来实现数据同步,下面我们将详细探讨这些方法: 1. **GoldenGate**:Oracle GoldenGate 是一个高级的数据...

    oracle高级复制应用实例

    Oracle高级复制是Oracle数据库系统中的一种复杂的数据同步技术,它允许在不同的数据库之间实时或近实时地复制数据。这项技术对于分布式系统、灾难恢复、负载均衡以及数据分发等场景非常有用。以下是对Oracle高级复制...

    oracle高级复制、同步

    Oracle 高级复制 (Advanced Replication) 是一种在多个站点间实现数据共享的技术,主要用于提高数据可用性、性能和减少网络负载等目的。本章节主要介绍了 Advanced Replication 的基本概念、应用场景以及一些关键...

    Oracle高级复制技术

    在实际应用中,根据业务需求和系统架构,可能需要结合使用多种复制模型,例如在某些场景下使用同步复制保证关键数据的一致性,而在其他非关键业务上采用异步复制以提高效率。此外,还需要考虑网络延迟、性能瓶颈、...

    基于oracle高级复制功能的数据库同步研究与应用.pdf

    Oracle高级复制功能是一种强大的技术,它允许在一个分布式系统中,跨多个数据库保持数据的一致性和同步。这种技术在现代企业环境中至关重要,因为它满足了不同地理位置的用户对数据访问的需求,同时保证了数据的安全...

    Python实现Oracle数据库同步

    Python实现两个Oracle数据库同步工作

Global site tag (gtag.js) - Google Analytics