oracle9i中有没有让两个数据库(结构完全相同)自动同步的工具?如果有,是哪一个工具?
或者有别的办法使两个数据库同步(每段时间同步一次)?

解决方案 »

  1.   

    http://www.ccw.com.cn/htm/app/salon/01_4_19_3.asp
      

  2.   


    用ORACLE的高级复制实现内外网数据同步陈光 [email protected] 2003.10本文简要介绍了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
    表 LAWTABLEREGISTERUSERINFO……共68张表 LAWTABLEREGISTER共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端配置完毕
      

  3.   

    第三步:配置外网,即SNAPSHOT端
    --外网作为SNAPSHOT    --创建外网用户HOLENCONN 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 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;--授予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_REFRESHBEGIN   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;--建立快照LAWTABLECREATE 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;/--建立快照REGISTERCREATE 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;/
    4、后记ORACLE的高级复制功能非常强大,能实现多点间的数据同步、异步复制。
    内外网结构的报送、审批、备案等两(多)级系统日益流行,若内外DB为同类型商业数据库,一般数据库本身都提供复制功能,若内外网为不同类型的数据库,如内网为SQLSERVER,外网为ORACLE,则一般使用“同步机”中间件,在程序中调用即可。
    感谢李鑫为我提供技术解答!
      

  4.   

    Standby/Data Guard
    备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份,可以实现快速切换与灾难性恢复。
    ORACLE从7.3才开始支持standby database。7.3.x-8.0.x需要手工拷贝所有归档日志并手工同步,从ORACLE815开始,开始支持多节点复制,并实现了自动同步,但是这种同步是数据异步模式的,可能引起数据丢失。
    从ORACLE9i开始,备用服务器已经换了一种新的称呼,叫数据保护(DATA GUARD),在这种模式中,开始支持三种不同的数据保护模式,并开始采用LGWR对数据的传送而不是以往的ARCH,并增加了一个新的后台进程叫DMON监控数据的同步,支持多达9个节点的同时复制。从920开始,还开始支持物理与逻辑备用服务器。
    920中的三种数据保护模式分别是:
    1、 MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。
    2、 MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不正常时,自动切换到最大性能模式,主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。
    3、 MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE
    建立备用服务器有如下要求:
    1、 主节点必须运行在归档模式下
    2、 主节点与备用节点最好有相同的OS版本,一般beta号差一点还是可以的
    主节点与备用节点必须有相同的数据库版本和兼容版本4、OS相关HA
    双机容错的目的在于保证数据永不丢失和系统永不停机,采用智能型磁盘阵列柜可保证数据永不丢失,采用双机容错软件可保证系统永不停机。它的基本架构共分两种模式:双机互备援(Dual Active)模式和双机热备份(Hot Standby)模式。
    1.双机互备援(Dual Active)基本简介
      所谓双机热备援就是两台主机均为工作机,在正常情况下,两台工作机均为信息系统提供支持,并互相监视对方的运行情况。当一台主机出现异常时,不能支持信息系统正常运营,另一主机则主动接管(Take Over)异常机的工作,继续主持信息的运营,从而保证信息系统能够不间断的运行,而达到不停机的功能(Non-Stop),但正常运行主机的负载(Loading)会有所增加。此时必须尽快将异常机修复以缩短正常机所接管的工作切换回忆备修复的异常机。
    2.双机热备份(Hot Standby)基本简介
    所谓双机热备份就是一台主机为工作机(Primary Server),另一台主机为备份机(Standy Server),在系统正常情况下,工作机为信息系统提供支持,备份机监视工作机的运行情况(工作机也同时监视备份机是否正常,有时备份机因某种原因出现异常,工作机科尽早同志系统管理员解决,确保下一次切换的可靠性)。当工作机出现异常,不能支持信息系统运营时,备份机主动接管(Take Over)工作机的工作,继续支持信息的运营,从而保证信息系统能够不间断的运行(Non-Stop)。宕工作机经过修复正常后,系统管理员通过管理命令或经由以人工或自动的方式将备份机的工作切换回工作机;也可以激活监视程序,监视备份机的运行情况,此时,原来的备份机就成了工作机,而原来的工作机就成了备份机。