分布实现Oracle数据库的实时数据复制

分布实现Oracle数据库的实时数据复制的步骤是这样的:

在具体的实现之前,首先要做好设计与规划。这就需要细致分析具体的业务情况,设计出一套能够满足业务需要的方案。通常在设计过程中,需要确定出要建立的数据库站点,各站点的类型,需要复制的数据对象,以及同步方式、冲突解决方案等内容。

在设计完成之后,就可具体来实现数据复制,数据复制的实现主要包括以下几步:

(1)创建复制站点;
(2)创建组对象;
(3)配置冲突解决方案。

下面我们举一个例子来说明各步具体需要完成的工作。在这个例子中我们采用多主控站点复制方式,设有两个主控站点和两个共享数据表。两个主控站点分别为:处理站点(cl.world)和解释站点(js.wo rld);两个数据表为测区( survey)和测线( line)。

STEP1 创建复制站点:

(1)首先以SYSTEM身份登陆主站点数据库cl.worldCONNECT system/[email protected];
(2)创建用户—复制管理员,并为该用户授权复制管理员负责复制站点的创建和管理,每个复制站点都必须创建复制管理员以下为引用的内容:
 CREATE USER repadmin IDENTIFIED BY repadmin; 
BEGIN 
 DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => ’repadmin’); 
END; 

(3)为本站点指定传播者(传播者负责将本地最新更新的数据传播到其他站点上):
BEGIN 
 DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => ’repadmin’); 
END; 

(4)为本站点指定接收者(接收者负责接收其他站点上的传播者传送过来的数据):
BEGIN 
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( 
 username => ’repadmin’, 
 privilege_type => ’receiver’, 
 list_of_gnames => NULL); 
END; 
(5)确定清除时间:
为了使传送过来事务队列不致过大,需要将成功加载的事务从事物队列里清除掉,这里设定每小时清除一次:
CONNECT repadmin/[email protected] 
BEGIN 
 DBMS_DEFER_SYS.SCHEDULE_PURGE ( 
next_date => SYSDATE, 
interval => ’SYSDATE + 1/24’, 
delay_seconds => 0); 
END; 
在建立好站点cl.world后,以同样的方法创建站点js. world。
(6)创建各主控站点之间的调度链接:
创建各主控站点之间的调度链接需要先在各主控站点间建立数据库链接,之后为每个数据库链接定义调度时间。
首先,在处理站点上建立与解释站点的数据库链接,这里需要先建立一个公用数据库链接,供其他私有数据库链接来使用。

以下为引用的内容:

CONNECT SYSTEM/[email protected] 
CREATE PUBLIC DATABASE LINK js.world USING ’js.world’; 
CONNECT repadmin/[email protected] 
CREATE DATABASE LINK js.world CONNECT TO repadmin 
IDENTIFIED BY repadmin; 

同样,在解释站点上建立与处理站点的数据库链接。

以下为引用的内容:

CONNECT SYSTEM/[email protected] 
CREATE PUBLIC DATABASE LINK cl.world USING ’cl.world’; 
CONNECT repadmin/[email protected] 
CREATE DATABASE LINK cl.world CONNECT TO repadmin 
IDENTIFIED BY repadmin; 

调度链接确定本站点上的事务向其他站点发送的频度,下面的代码为10分钟一次:

以下为引用的内容:

CONNECT repadmin/[email protected] 
BEGIN 
DBMS_DEFER_SYS.SCHEDULE_PUSH ( 
destination => ’js.world’, 
interval => ’SYSDATE + (1/144)’, 
next_date => SYSDATE, 
parallelism => 1, 
execution_seconds => 1500, 
delay_seconds => 1200); 
END; 

在解释站点上做相同的工作STEP2 创建主控组在复制环境中,Oracle用组来管理复制对象。通过将相关的复制对象放在一个组里,从而方便对大量数据对象的管理。

这里我们假设用户模式integr ation 在处理站点和解释站点都已存在,而且表测区(survey )和测线(line)也已经创建。

(1)创建主控组对象 以下为引用的内容:

CONNECT repadmin/[email protected] 
BEGIN 
DBMS_REPCAT.CREATE_MASTER_REPGROUP ( 
gname => ’inte_repg’); 
END; 
  
(2)向主控组中添加数据对象,将测区表survey加入到组inte_repg中以下为引用的内容:

BEGIN 
DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( 
gname => ’inte_repg’, 
type => ’TABLE’, 
oname => ’survey’, 
sname => ’integration’, 
use_existing_object => TRUE, 
copy_rows => FALSE); 
END; 

以同样的方法将测线表line加入到组inte_repg中。 
 

(3)在主控组中添加其他参与复制的站点,数据库之间的同步方式在此指定以下为引用的内容:

BEGIN 
DBMS_REPCAT.ADD_MASTER_DATABASE ( 
gname => ’inte_repg’, 
master => ’js.world’, 
use_existing_objects => TRUE, 
copy_rows => FALSE, 
propagation_mode => ’ASYNCHRONOUS’); 
END; 

(4)如果可能出现冲突,则需要配置冲突解决方案。

(5)为每个对象生成复制支持,以下为引用的内容:

BEGIN 
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( 
sname => ’integration’, 
oname => ’survey’, 
type => ’TABLE’, 
min_communication => TRUE); 
END; 

测线表line也一样。 
 (6)重新开始复制以下为引用的内容:

BEGIN 
DBMS_REPCAT.RESUME_MASTER_ACTIVITY ( 
gname => ’inte_repg’); 
END; 

以同样的方式设置解释站点。设置成功后,数据复制过程就宣告完毕,库中的数据就可进行复制。

猜你喜欢

转载自renshengpan.iteye.com/blog/1844461