来 羽
(郑州广播电视大学,郑州 450007)
数据复制是指将数据库中的数据拷贝到另外一个或多个不同的物理站点上,从而保持源数据库与目标数据库中指定数据的一致性。
按照数据复制的实时性,数据复制可分为同步数据复制和异步数据复制。同步数据复制是指将本地生产数据以完全同步的方式复制到异地,每一本地 IO交易均需等待远程复制的完成方予以释放。异步数据复制则是指将本地生产数据以后台同步的方式复制到异地,每一本地 IO交易均正常释放,无需等待远程复制的完成。
数据复制通过在多个站点上建立备份,能够提高数据的安全性,同时也提高了数据的可用性,这是因为如果一个站点出现了问题,用户可以选择其他站点继续进行操作,应用系统还可继续运行,从而数据复制提供了容错保护机制。
然而数据复制最基本的功能是提高数据库的性能。它通过将远程数据库中的数据复制到本地,使得应用能够就近访问数据,从而降低网络传输负载,提高效率。而且在数据复制系统中,可以提供多个站点之间的负载平衡,让这几个用户使用这个服务器,另外几个用户可以使用其他的服务器,以避免某些站点负载过重。
物化视图还提供了按子集进行复制,这样各站点就可只复制自己需要的数据,也能减轻网络的传输量。
在具体的实现之前,需要做好设计与规划。这就需要细致分析具体的业务情况,设计出一套能够满足业务需要的方案。通常在设计过程中,需要确定出要建立的数据库站点,各站点的类型,需要复制的数据对象,以及同步方式、冲突解决方案等内容。
在设计完成之后,就可具体来实现数据复制,数据复制的实现主要包括以下几步:
1.创建复制站点;
2.创建组对象;
3.配置冲突解决方案。
下面我们举一个例子来说明各步具体需要完成的工作。在这个例子中我们采用多主控站点复制方式,设有两个主控站点和两个共享数据表。两个主控站点分别为:处理站点(cl.world)和解释站点 (js.wo rld);两个数据表为测区 (survey)和测线 (line)。
STEP1创建复制站点
(1)首先以 SYSTEM身份登陆主站点数据库 cl.world CONNECT system/manager@cl.world。
(2)创建用户 -复制管理员,并为该用户授权复制管理员负责复制站点的创建和管理,每个复制站点都必须创建复制管理员。
(3)为本站点指定传播者
传播者负责将本地最新更新的数据传播到其他站点上:
BEG IN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR(username= >‘repadmin’);
END。
(4)为本站点指定接收者
接收者负责接收其他站点上的传播者传送过来的数据:
BEG IN
username= >‘repadmin’,
privilege_type= >‘receiver’,
list_of_gnames=>NULL;
END。
(5)确定清除时间
为了使传送过来事务队列不致过大,需要将成功加载的事务从事物队列里清除掉,这里设定每小时清除一次。
CONNECT repadmin/repadmin@cl.world
BEG IN
DBMS_DEFER_SYS.SCHEDULE_PURGE(
next_date=>SYSDATE,
interval= >‘SYSDATE+1/24’,
delay_seconds=>0);
END。
(6)创建各主控站点之间的调度链接
创建各主控站点之间的调度链接需要先在各主控站点间建立数据库链接,之后为每个数据库链接定义调度时间。
首先,在处理站点上建立与解释站点的数据库链接,这里需要先建立一个公用数据库链接,供其他私有数据库链接来使用。
同样,在解释站点上建立与处理站点的数据库链接
以下为引用的内容:
CONNECT SYSTEM/MANAGER@js.world
CREATE PUBL IC DATABASEL INK cl.world US ING‘cl.world’;
CONNECT repadmin/repadmin@js.world
CREATE DATABASE L INK cl.world CONNECT TO repadmin
DENTIFIED BY repadmin。
在解释站点上做相同的工作 STEP2创建主控组在复制环境中,Oracle用组来管理复制对象。通过将相关的复制对象放在一个组里,从而方便对大量数据对象的管理。
这里我们假设用户模式 integr ation在处理站点和解释站点都已存在,而且表测区 (survey)和测线 (line)也已经创建。
(1)创建主控组对象
CONNECT repadmin/repadmin@cl.world
BEG IN
DBMS_REPCAT.CREATE_MASTER_REPGROUP(
gname= >‘inte_repg’);
END。
(2)向主控组中添加数据对象,将测区表 survey加入到组inte_repg中
BEG IN
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)在主控组中添加其他参与复制的站点,数据库之间的同步方式在此指定
BEG IN
DBMS_REPCAT.ADD_MASTER_DATABASE(
gname= >‘inte_repg’,
master= >‘js.world’,
use_existing_objects=>TRUE,
copy_rows=>FALSE,
propagation_mode= >‘ASYNCHRONOUS’);
END。
(4)如果可能出现冲突,则需要配置冲突解决方案。冲突解决方案将在后面介绍。
(5)为每个对象生成复制支持
设置成功后,数据复制过程就宣告完毕,库中的数据就可进行复制。
在复制环境中,尽管在数据库和应用程序设计过程中,会尽量避免各站点间冲突的发生,但完全避免冲突的可能性还是比较小的,那么一旦冲突发生,就需要一个按照具体业务规则的冲突解决机制,来使得各站点的数据保持一致。首先需要分析哪些对象容易出现冲突。通常来说,静态的数据变化少,冲突出现的可能性也小;而有些数据变化非常大,冲突出现的可能性也大。确定了冲突易发的对象后,需要确定怎样解决冲突,比如在各站点之间建立优先次序,在数据不一致时,以某个站点上的为准;或以某个站点上最新的修改为准。Oracle提供了多种冲突解决方案,具体包括:针对更新冲突的方案、针对唯一性冲突的方案、针对删除冲突的方案。除了这些方案以外,用户还可以自定义冲突解决方法。每种方案都有自己的适用情况,那么我们需要根据具体的业务来选择合适的冲突解决方案。
[1]王瑛.Oracle数据库基础教程 [M].北京:人民邮电出版社,2008.
[2]刘甫迎,王道学,党晋蓉.数据库原理及应用 [M].北京:清华大学出版社,2004.
[3]格里沃尔德.Oracle高级编程 [M].北京:清华大学出版社,2007.
[4]刘国.数据库技术基础及应用[M].2版.北京:电子工业出版社,2008.