分享
 
 
 

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

王朝oracle·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

本文简要介绍了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端

--版本:2.0

--修订者:陈光 holen@263.net

--时间:2003-6-8 15:30

--内网作为MASTER

--创建内网用户HOLEN

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_REPGROU

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有