异地容灾系统和数据仓库中数据同步的设计及其关键技术实现

(整期优先)网络出版时间:2019-10-07
/ 2
摘要:以异地容灾系统和数据仓库需要实时同步生产系统的数据为背景,介绍了一个异地容灾系统和数据仓库中数据同步软件的功能模型;对两个系统中数据同步的设计和体系结构作了介绍,并阐述了该数据同步软件所采用的Oracle高级复制技术。
  关键词:数据同步; 容灾系统; 数据仓库; Oracle高级复制
 
  0引言
  
  尽管人们小心谨慎,各种各样的灾难仍不可避免,如系统硬件故障、网络故障、机房断电甚至火灾、地震,广为人知的“9·11”事件就是触目惊心的例子[1]。这些灾难造成了重要数据的丢失,影响了企业的正常运转[2]。另外,激烈的市场竞争迫使企业高层寻找更为科学、系统、有效的辅助决策技术和整体解决方案来处理日益复杂的公司事务。数据挖掘就成了很好的选择之一,但是数据挖掘需要大量的生产数据,有时甚至是实时的生产数据。如果直接在生产系统上进行数据挖掘,必然会影响到生产的效率,并将严重威胁生产的稳定运行。如何在灾难发生时能够保留生产数据,并启用异地容灾系统及时恢复生产,如何把生产数据及时传递到数据仓库供数据挖掘使用,这些是现代企业需要面对的共同问题。
  近年来为了解决上述问题,许多企业不惜耗费巨资来分别建立异地容灾系统和数据仓库。但遗憾的是,很多系统由于无法及时准确地同步生产数据,不能有效地运行。鉴于此,笔者设计并开发了一套基于Oracle高级复制技术的数据同步软件,实现了将一个数据容量为3TB的Oracle 9i RAC数据库的生产数据及时准确同步到异地容灾系统和数据仓库。该系统不仅将对原生产系统的影响降至最小,还极大地降低了项目费用。
  
  1软件模型
  
  该软件的功能模型图如图1所示。
  (1)初始同步模块
  该模块主要是在表进行初始同步时使用的;它能够根据实际需要生成物化视图及其索引的创建语句,并完成表的初始同步。如果没有特别的要求,则调用普通初始同步子模块进行目的端表的初始同步,创建语句将从源数据库获取;如果有特别的要求,如按指定的分区初始同步或者按照一定的条件进行初始同步,则会根据这些要求调用分区初始同步或条件初始同步子模块生成特定的创建语句来进行目的端表的初始同步。该模块能够批量自动进行表的初始同步,从而大大减少了人工干预,保证了初始同步的准确性和自动化。
  (2)调度模块
  由于源端的数据在时刻变化着,在初始同步模块的基础上需要有一个调度模块将这些不断变化的数据同步到目的端,使目的端与源端始终保持数据一致性。该模块中的增量调度子模块是在表的增量同步过程中使用的,并能根据刷新间隔要求对目的端表进行及时准确的刷新;完全刷新调度子模块是在对表进行重新同步时使用;特殊要求调度模块是给需要做特殊同步的表使用的,如需要暂时停止同步、在每天的固定时间不同步等。
  (3)监控模块
  该模块是为了及时发现同步中断和同步效率低的表。由于其告警方式为短信告警,可以实现任何时间、任何地点的告警,保证了能在第一时间发现同步的中断以及同步效率低下的情况,实现了异常处理的及时性。
  (4)错误处理模块
  该模块主要是处理同步刷新过程中出现的各种错误。通过对捕获的错误进行相应的处理,从而保证同步能够稳定、高效地运行。另外,由于Oracle高级复制技术自身存在一定的缺陷,需要使用该模块来捕获造成数据不准的源头,并进行相应的处理。
  (5)优化模块
  该模块主要是处理同步过程中出现的性能瓶颈,保证能够及时发现性能问题并采取相应的优化手段来加以维护,包括源端优化和目的端优化。
  
  2系统设计和体系结构
  
  数据仓库中同步的数据只要实现小时级别的同步就可以满足要求,但异地容灾的数据库实时性较高,基本上都要求实现分钟级别的同步。现在生产数据库总的数据量约为3 TB,容灾需要同步的数据量比数据仓库要大得多,而且数据仓库需要同步的数据都可以从容灾系统中获取;另外,生产数据库的性能和稳定程度对公司生产有直接的影响。因此在同步过程中,不仅应该尽量减少生产数据库的负担,还应该尽量避免同步过程中的异常情况,如网络故障、同步性能低下等问题[3]。基于以上考虑,笔者设计了如下方案:先将生产数据同步到异地容灾系统后,再以异地容灾系统为数据源同步数据到数据仓库。
  系统的体系结构如图2所示。
  (1)生产系统数据同步到异地容灾系统
  生产系统与异地容灾系统之间是通过百兆网连接的;生产系统的数据库是Oracle 9i RAC,总的数据量大约为3 TB,涉及五千多张表。对这些表进行分析归类,发现容灾系统真正需要实时同步的表大约只有五百张,数据量约为1 TB,只要能够把这五百张表的变更及时准确地进行同步,即可在生产系统发生灾难时,启用异地容灾的营业应急系统。鉴于此,本系统数据库使用Oracle 9i,同步软件实时同步这关键的五百张表的变更。这样大大减少了同步的数据量,也最大限度地减少了生产系统的负担。从同步运行情况看,该同步软件对生产系统的影响可以忽视。 (2)异地容灾系统数据同步到数据仓库

  异地容灾系统与数据仓库之间是通过百兆网连接的;数据仓库需要的生产数据从异地容灾系统数据库获取,因此数据仓库也采用Oracle 9i数据库。数据仓库需要实时同步的表大约为三百张。从同步运行情况看,同步生产数据延时大约为十分钟,能满足数据仓库的要求,并且与生产环境没有任何关系,不会对生产环境造成影响。  该系统结构使系统在各个实现层次上均具有明确的界限和分工,既避免了相互影响,简化了数据同步的难度,又实现了对生产系统的影响达到最小化。该结构使得系统易于维护、扩展性好、安全性好、稳定性好。
  
  3采用的关键技术
  
  同步软件采用的关键技术为Oracle高级复制技术。该技术能将Oracle数据库中的数据同步或异步拷贝到不同的数据库中。将数据复制到复制环境数据库的技术实体叫做物化视图。物化视图可以是只读的、可更新的或可写的[4]。
  该技术在不同Oracle数据库之间进行复制时可以是同步的,也可以是异步的[5]。同步复制,即复制数据在任何时间、任何复制节点均保持一致。如果复制环境中的任何一个节点的复制数据发生了更新操作,这种变化会立刻反映到其他所有的复制节点上。异步复制,即所有复制节点的数据在一定时间内是不同步的。如果复制环境中一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点。这些不同的事务间可以间隔几秒、几分种、几小时,也可以是几天之后。复制节点之间的数据临时是不同步的,但传播最终将保证所有复制节点间的数据一致。
  (1)容灾系统使用异步可写物化视图方案
  启动营业应急系统要求容灾数据库的这些物化视图是可写的,这样才能保证系统的正常运行,但是又不要求这些变更数据同步至生产系统,因为现在的生产系统已经遭到破坏。可写的物化视图允许用户通过在这个可写的物化视图上进行插入、更新和删除行的操作,但是这些操作不会同样地插入、更新和删除主表或主实体化视图上的行。因此容灾数据库中应该使用这种可写的物化视图;同时容灾数据库的表结构、索引、存储结构应该与生产数据库保持一致,使用该同步软件中的普通初始同步方式来完全拷贝生产系统的表和索引定义。容灾系统数据同步流程如图3所示[6]。
  
  当灾难发生时,应该首先停止生产系统到容灾系统的同步软件,然后启动营业应急系统以保证继续营业;同时因为同步延时了几分钟(最长不超过5 min),所以有可能会丢失少量数据。部分丢失的数据需要通过营业补录的方式解决。
  (2)数据仓库是使用异步只读物化视图的方案
  数据仓库只要求对读取生产的数据进行分析,因此数据仓库的这些物化视图是只读的就可以了。只读物化视图提供只读的访问表数据。这个表数据来源于一个主体站点或一个主物化视图站点,因此数据仓库中采用这种只读物化视图。另外,数据仓库在分析时一般需要扫描这些物化视图,需要建立与生产数据库不同的表和索引结构,如对表进行分区、建立数据分析需要的索引等。因此应该使用该同步软件中的分区初始同步和条件初始同步方式来建立合适的物化视图及索引。数据仓库数据同步流程如图4所示。
  
  4结束语
  
  从这次生产数据的及时准确同步到异地容灾和数据仓库的实施过程中,笔者通过摸索解决了同步过程中的性能问题,从而最终解决了Oracle高级复制技术同步的可行性,保证了同步的效率;在实施和维护的过程中,笔者还逐步发现了该技术本身存在的问题并注意加以解决,从而保证了同步的稳定性和准确性。从这次同步实施过程看,任何技术都存在缺陷,但是本文的探索和创意可以弥补这些缺陷。该系统对于很多企业在设计数据仓库和异地容灾系统中数据同步的方案时有一定的推广意义。
  
  参考文献:
  [1]王树鹏,云晓春,余翔湛,等.容灾的理论与关键技术分析[J].计算机工程与应用,2004,40(28):54-58.
  [2]刘迎风,祁明.容灾技术及其应用[J].计算机应用研究,2002,19(6):7-10.
  [3]杨朝红,宫云战,桑伟前,等.基于主从异步复制技术的容灾实时系统研究与实现[J].计算机研究与发展,2003,40(7):1104-1109.
  [4]徐秀华,文必龙,毕硕本. Oracle 9i高级复制技术及其应用[J].计算机应用研究,2003,20(11):107-109.
  [5]苏燕强.Oracle分布式数据库及其应用研究[J].计算机应用与软件,2004,21(8):36-37,121.
  [6]葛卫民,张钢,舒炎泰.基于Oracle高级复制的分布式数据库系统应用研究[J].计算机工程与应用,2003,39(21):186-188,191.