本文首先简单介绍和数据库复制有关的基本概念,然后探讨Oracle8数据复制技术中的几个重要模型,最后介绍Oracle8的数据复制管理器以及如何利用它来配置和维护复制环境。
在文章的开头,我想首先简单谈一下复制的基本概念,也就是什么是复制?复制简单地说就是在由两个或者多个数据库系统构成的一个分布式数据库环境中拷贝数据的过程。Oracle高级复制,也称为对称复制,第一次是在Oracle 7.1.6版本中出现的,在这之前的Oracle版本中,Oracle数据复制方法仅有只读快照形式的基本复制一种方法。随着Oracle版本的每一次升级,数据复制的功能、管理以及速度等方面都得到了很大的改进和完善。目前,由于对分布式数据环境需求的不断增长,越来越多的应用提出了数据复制的需求。
一、基本概念
1.分布式数据库技术
分布式数据库技术是目前我们经常提及的分布式计算的一个重要组成部分,该技术允许数据在多个服务器端共享。采用分布式数据库技术,一个本地服务器可以存取不同物理地点的远程服务器上的数据;也可以使所有的服务器均可以持有数据的拷贝/复制,这样分布式系统中的所有服务器均可进行本地存取。
设计一个分布式计算解决方案首先需要考虑的问题就是应用的完整性、复杂性、性能和可用性以及响应时间等,同时还需要考虑的是对于不同的应用需求是采用实时存取远程数据还是采用延迟存取远程数据。这对于数据复制来讲就是采取实时更新复制方案还是延迟数据复制方案。
2.同步和异步的概念
同步分发数据库技术是一种实时远程存取和实时更新数据的技术。这种技术可以保证应用的完整性降低了应用的复杂性,但是如果系统存在网络存取速度很慢这样的问题,相应响应时间就会很慢。
异步分发数据库技术是一种延迟远程存取和延迟传播对数据更新的技术。这种技术具有很高的可用性和很短的响应时间。相比同步分发数据库技术就显得复杂一些,为了确保应用的完整性需要仔细考虑和设计。
对于实际的商业问题,必须权衡这两种技术的利弊最终选择最佳的解决方案,有些问题选用同步技术比较适合,也有一些问题采用异步技术是比较好的解决方案,还有一些问题必须综合这两种技术。
3.复制的概念
复制,顾名思义就是将数据库中的数据拷贝到不同物理地点的数据库中以支持分布式应用,它是整个分布式计算解决方案的一个重要组成部分。上面介绍了同步和异步的概念,这里针对复制也存在同步复制和异步复制的问题。
同步复制,复制数据在任何时间在任何复制节点均保持一致。如果复制环境中的任何一个节点的复制数据发生了更新操作,这种变化会立刻反映到其他所有的复制节点。这种技术适用于那些对于实时性要求较高的商业应用中。
异步复制,所有复制节点的数据在一定时间内是不同步的。如果复制环境中的其中的一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点。这些不同的事务间可以间隔几秒,几分种,几小时,也可以是几天之后。复制节点之间的数据临时是不同步的,但传播最终将保证所有复制节点间的数据一致。
4.更新冲突
在异步复制环境中,对于所有应用最关键的就是要确保数据的一致性。我们来看下面这种情况会有什么后果发生呢?在同一时间对同一个表的同一行数据的同一列在两个不同的地点作更新。这种情况就会发生称之为更新冲突的错误。为保证数据的一致性,更新冲突必须被检测到并且处理以确保在不同地点的数据元素保持同样的值。更新冲突可以通过限制"所有权" 到单一节点或者将更新某个特定数据元素的权利限制到某一具体节点的方法来避免。
二、Oracle 8数据复制应用模型(usage models)
为确保实际应用数据的一致性,必须在异步复制应用模型中考虑冲突避免或者冲突检测和消除的方法。例如,对于一个实际商业应用,首先必须在逻辑上了解该商业应用采取的冲突避免方法和在某个节点有那些数据以及这些数据中那些是可更新的,而那些又是不可更新的。在下面的这一部分中,我们首先将详细讨论两种常用的冲突避免方法:主站点所有权模型和动态所有权模型。然后,讨论共享所有权模型以及这种模型引起的冲突检测和处理问题,最后,讨论针对Fail-over的复制配置,这种复制方案同时考虑了冲突避免和冲突检测与消除两种情况。
1.主站点所有权
主站点所有权,异步复制数据被一个单一节点"所有",这些要复制的数据仅能被该节点更新,其他节点向拥有该数据的主节点订阅(subscribe)数据,这意味着他们在本地系统上只能够存取这些复制数据的只读拷贝。下面是一些这样的例子。
(1)决策支持系统(DSS)的联机事务处理数据的卸载。来自一个或者多个OLTP系统的数据可以被卸载到一个独立的局部DSS中,用于只读分析。
(2)中央信息的分发。产品信息,如价格列表等在总部节点上维护,然后将这些信息复制到远程销售办事处的只读产品目录系统中。
(3)远程信息的集中。许多远程节点上的产品目录数据复制到总部节点,这里总部节点只需要有数据只读的权限。
一个主节点拥有一个表的完全所有权,而其他节点只能订阅这个表的只读拷贝。也可以是多个主节点拥有同一个表的截然不同子集或者划分,而另一些节点则订阅这些子集或者划分的只读拷贝。如,一个分布的产品目录系统可以让不同的销售办事处拥有一个表的属于自己的一个"水平"部分,如在客户(CUSTOMERS)表, 订单(ORDERS)表和目录(ITEMS)这些表中含有每个销售办事处为之服务的客户和产品信息。中心总部节点可以通过订阅每个办事处拥有的数据来保持一个完整的所有产品和客户信息的只读拷贝。
2.动态所有权
动态所有权,异步更新将复制数据从一个节点移到另一个节点,而在该过程中,必须保证在同一时刻只有一个特定的节点可以对数据进行更新。一个典型实际应用就是"海关订单处理系统",订单处理的典型步骤是,报关→同意→装运→开单→收单→入帐等。应用模型可以执行其中的任何步骤,但必须保证各个不同模块的同一个数据应该在一个综合数据库中。在该系统中,当且仅当订单的状态表明前一个步骤已经完成时,下一个应用模块才可以执行更新订单数据的操作。例如,"装运"应用模块仅能在"报关"并且得到"同意"后才能被执行。
通过使用动态所有权复制模型,可以将一个系统分布在多个节点和数据库上,也就是说应用模型可以建立在不同的系统上。我们还是来看上面的例子,"报关"和"批准"这两部分可以运行在一个系统上,"装运"在另一个系统上,"开单"和"收单"等又可在一个系统上。在这个分布式系统中,数据可以被复制到不同的节点上,这些节点对复制的数据只要具有只读的权限即可。如,利用复制,"报关"节点可以监视已经报关的订单处理过程。
前面讨论的主节点所有权和动态所有权复制模型具有一个共同的特征:在任何一个给定的时间点,只允许一个节点有更新数据的权利,而其余节点对于复制的数据拷贝仅有只读权限。然而,还存在这样的情况,允许多个节点可以更新同一个数据,在极端情况下可以是在同一时刻,这就是所说的共享所有权。
3.共享所有权
共享所有权使用异步复制,这对于主节点和动态所有权模型来讲存在一些限制。在共享所有权情况下,整个系统可以存在暂时的不一致,同时必须使用冲突检测和消除。共享所有权模型相对于前面两种模型具有一些新的特点。
例如,对于前面我们讨论的那个采用具有水平划分主节点复制方案来的分布式"订单处理系统"的例子。采用共享所有权模型,每个销售办事处都有库表中不同的水平划分,该库表含有每一个办事处为之服务的一些订单信息和与消费者有关的顾客信息。每一个销售办事处只输入与自己有关的顾客订单情况,而不管其余顾客信息。
然而,在实际商业应用中,这个模型不是最佳的选择。例如,这种情况,一个零售集团在一个大城市中可以有好几个商场。顾客可能经常去离他们住的最近的那个商场,但是偶尔也可能到其他商场去购物。这时,如果多家商场执行更新同一个顾客和其订单数据的信息,更新冲突就会发生。所以在这种情况下必须要采用冲突检测和消除方案。
Oracle8高级复制支持同时既考虑冲突避免又考虑冲突检测和消除的复制模型。Oracle8高级复制之所以又称为对称复制,其原因之一就是支持对称复制模型,也就是可以在任何地方更新,即所有的复制节点都可以进行更新处理。为了避免冲突,一种方法就是将应用设计为将更新限制在一些特定的节点。对于共享所有权,Oracle 8提供了自动冲突检测和消除方案。
4.备用数据库(Fail-Over )
异步复制通过将一个主系统数据复制到另一系统,可以起到对主系统的崩溃提供保护的作用,这也就是所说的fail-over系统,如果主系统出现问题,业务依旧可以通过复制数据库进行。
Oracle 8高级复制支持这种fail-over配置。同时,Oracle也针对fail-over提供了另外两个可选的解决方案:Oracle并行服务器和备用数据库配置。用户可以根据吞吐量、可用性、事务损失的可能性和其他一些如数据一致性、方法的局限性等参考指标来权衡选择合适的fail-over方案。
三、Oracle 高级复制配置
Oracle 8高级复制即可支持基于整个表的复制也可支持基于部分表的复制两种复制方案。这两种复制方案主要是通过Oracle的两种复制机制来完成的,即多主复制和可更新快照复制,同时还可以将这两种复制机制结合起来以满足不断变化的业务需求。
1.多主复制
多主复制方案支持全表在各个主节点间的对称复制,允许所有主节点对主表都有更新操作的权利。任何一个主节点上的复制表的更新都会被传播并被直接应用到其他所有主表。一个主节点出现问题,不会对其他主节点之间变化的传播造成影响。
多主复制采用一种称为"延迟远程过程调用(deferred remote procedure calls RPCs)"的机制作为主要的传播和应用变化的机制。各节点之间变化的传播,既可以以基于事件的方式立即传播,也可以在某个特定的时间点,如在网络空闲时(如晚上)传播。在传播变化时,如果其中的一个远端系统没有准备好,传播变化的延迟远程过程调用(RPCs)就会保存在其本地队列中,等到系统准备好以后再执行。
2.可更新快照
Oracle 将最早Oracle 7上的只读快照机制扩展为一种允许快照可更新的对称复制机制。快照更新的传播方式和如何应用到快照主节点采用了和多主复制一样的延迟远程过程调用机制。
对于快照的定义,既可以是包含一个主表的完全拷贝,也可以是为满足基于值的选择标准的主表中行的子集。快照在主节点的刷新是按照一定的时间间隔或用户单独请求进行的。最后一次刷新后主表的任何变化也同样被传播并应用到快照。多个快照的刷新是在一个一致的事务中完成的,这就确保了数据和引用的完整性。
3.混合配置
可以将多主复制和可更新快照复制结合在一起,构成一种新的混合配置,这种配置可以完成对全表或者子表的复制。例如下面这种应用就是一个典型的混合配置方案,一个系统具有两个位于不同地理区域的中心节点,这两个不同的地理区域下面还有一些分支机构,两个中心节点可以彼此看做是自己的备份节点。采用多主复制方法在两个中心站点之间复制数据,同时采用只读或者可更新快照复制方法在每个区域范围中的主节点之间复制全表或者子表。这种配置的一个显著好处就是当其中的一个中心节点发生问题时,这些快照的主节点可以被重新定义到另一个运行良好的中心节点,从而提高了系统的可靠性。
4.其他复制机制
Oracle除了前面讨论的三种复制机制以外,还提供了另外两种复制机制:过程级复制和同步复制。
(1)过程级复制
这种复制方案主要应用在存在大量数据更新以及采取批处理方式操作数据时需要复制数据的情况。例如,下面这个应用,一个以年为单位管理客户订单的公司,对于老的订单数据不再需要在线保存,而需要卸载到某存储介质中。这时,如果在多个节点间复制每一独立的行级变化效率将是非常低的。对于这种情况,可以直接在每个复制节点执行一个过程来直接进行这种更新操作。Oralce8高级复制提供的分布式模式管理功能(将在下面详细讨论)可以非常方便地在多个节点上设置和维护过程级复制的远程过程。
(2)同步复制
一个采用同步复制方案的表发生变化时,Oracle会确保这种变化能够成功地作用在本地表和其他节点的复制表,如果失败则整个事务会被成功回滚。同步复制在网络的稳定性比较高的情况下是可行的,可以保证复制节点之间的复制数据一直保持同步。
四、Oracle 8管理工具
很显然,有效的管理工具对于成功的分布式应用是非常关键的,如果没有能力去操作它,再专业的复制功能也不能发挥很好的作用。Oracle 8高级复制提供了几个功能强大的管理工具,诸如复制目录,分布式模式管理以及其他的一些Oracle 复制管理工具。
1.复制目录
复制目录是一个包含定义复制环境原数据的一个单一综合库。复制目录本身也被复制到多个节点以确保高可用性和授权用户可以简单地实现本地存取管理。
复制目录定义了被复制的数据库对象,复制的节点以及用于复制的机制。数据库对象有需要复制的库表和其他一些相关的对象,如索引,视图,过程,触发器和同义词等等。这些原数据是开放的,用户可以通过标准SQL语句进行检索和查询。
2.分布式模式管理
Oracle 8高级复制的分布式模式管理功能允许在一个控制点就可进行复制环境的定义和改变。对复制环境的任何改变,都将自动复制并且应用这些数据定义语言(DDL)命令到其他复制环境节点,同时也利用数据库触发器和复制相关过程自动生成复制所需要的一些支持对象。
分布式模式管理在一个被称为主定义节点的地方进行控制。它自动将DDL推向其他所有主节点并且也允许快照节点"拉"回并且执行这些DDL命令。由于主定义节点使用并且维护着整个复制目录,该复制目录本身也被复制到其他节点,所以该主定义节点一旦出现问题,就必须用其他节点来代替。分布式模式管理可以通过一个图形用户界面管理工具(GUI)来配置。
3.Oracle复制管理器
Oracle复制管理器是Oracle提供的一个图形界面的复制管理工具,通过该工具可以配置,定时和通过一个节点来管理整个的复制环境。该管理工具可以单独运行也可以在Oracle企业管理器中通过一个applet来激活。
采用Oracle复制管理器,用于复制的对象组可以通过一些鼠标操作非常简单地定义。复制组可以包含表和其他相关的对象,如触发器,存储过程,索引,视图,同义词以及序列等。Oracle除了可以复制每个复制组的全部拷贝以外,还可以选择复制数据的子集。复制组的配置可以在任何时候修改,这种变化将自动应用到其他所有的复制节点。
一旦定义了对象组,可以通过Oracle复制管理器,简单进行拖拉操作,就可自动部署复制组到一个新的节点。这些快照节点既可以是只读的也可以是可更新的。复制节点配置完成以后,用户可以配置定时以使复制环境中的变化传播到其他节点,当然也可以选择采用同步复制。
4.选择冲突解决方案
如果选择采用一种可以在任何地方更新的复制方案,Oracle复制管理器提供了几个内建的冲突解决方案,诸如"最近时间戳"和"站点优先"等来解决潜在的冲突。对于不同的表可以选择不同的方法,甚至可以对一个表中的不同列选择不同的冲突消除方案。用户对于一些特殊的商业需求也可以创建自己的冲突解决方案。
5.实时管理
通过Oracle的复制管理器,复制环境中任何地方发生的错误均可以非常快速和简单地分离出来并且改正。通过一个单一的节点,用户就可以看到每个节点的延迟事务队列,也可以重新定时或者强制立即执行事务。另外,用户也可以利用Oracle企业管理器的事件管理功能来对复制环境进行监视,该事件管理器提供了对多个站点间的复制状态的主动监视功能,另外还提供了可以定义自动改正的选项等。
结论
和Oracle的其他功能不同,Oracle的高级复制不是即插即用的,用户必须深刻理解它们是如何工作的以及各种复制方案的优缺点。深刻理解复制的基本概念可以帮助你设计一个可靠的复制环境。