1、基本概念
ORACLEORACLE是以高级结构化查询语言(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端--版本:2.0
--修订者:陈光 [email protected]
--时间:2003-6-8 15:30                    
--内网作为MASTER    
--创建内网用户HOLENCONN SYSTEM/PASSWORD@ORANEICREATE 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 logsGRANT 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'权限给repadminBEGIN      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;--向复制组中加入表对象LAWTABLEBEGIN   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 KEYEXCLUDING NEW VALUES;--生成复制支持BEGIN      DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(   sname => '"HOLEN"',   oname => '"LAWTABLE"',   type => 'TABLE',   min_communication => TRUE,   generate_80_compatible => FALSE);END;/--向复制组中加入表对象REGISTERBEGIN   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 KEYEXCLUDING NEW VALUES;BEGIN      DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(   sname => '"HOLEN"',   oname => '"REGISTER"',   type => 'TABLE',   min_communication => TRUE,   generate_80_compatible => FALSE);END;/--MASTER端配置完毕