执行概要
一般地说,信息共享意味着用户和应用通过利用各种特殊目的的技术从他们的数据库中把信息取出来。新的商业模式需要更统一的方案--- 人们可以自动发现相关信息并可以使之共享。它应具有充分的灵活性以适应商业需求的变化,同时最大程度地降低对特定目的技术的依赖。我们所需要的是能够满足所有信息共享需求的一体化解决方案。
在Oracle9i 数据库第二版中,Oracle引进了一个全新的一体化信息共享功能,Oracle 流(Oracle Streams)。Oracle流通过一个单一的解决方案满足了大部分的数据移动,事物处理传播以及事件管理的需要。它为建立和运转分布式企业和应用,数据仓库,和高可用性解决方案提供了必要的能力。开发人员和数据库管理员可以同时使用Oracle流的所有能力。如果他们的需求发生了变化,他们可以简单地启用Oracle流的一个新功能,而不必放弃现有的功能。
简介
任何数据库管理系统的一个重要功能是在多个数据库和应用间共享信息的功能。传统地说,这意味着用户和应用将利用各种特定的技术从数据库中将信息取出来。今天,新的功效和商业模式需要更全面和自动的解决方案。这种方案必须能自动地决定相关的信息,并把这些信息共享于需要它的群体之间。它也必须是一种能够适应商业需求的变化,同时最大程度地减低对单一目的解决方案依赖的通用解决方案。这种积极地信息共享包括在数据库中捕获和管理事件和事物处理,包括但不限于DML,然后将这些事件传递到其他数据库和应用。信息共享对数据和应用集成,复制,装载数据仓库,高可用性,数据保护以及其他应用是非常重要的。但是,信息共享选择的多样性可能极为丰富。一些解决方案是专门用于不同目的的,它们可能不能与其他的选择相互兼容。IT部门发现没有一种解决方案可以满足所有的需求,并且担心当他们的需求产生变化时会受到他们所采用的解决方案的限制。他们希望能有一种解决方案可以满足信息共享的所有要求。
Oracle9i 数据库提供了大量的信息共享特性,包括高级队列,高级复制,变更数据同期捕获和数据卫士。这些特性提供了具有针对性的交错能力,并且基于不同的底层技术。在Oracle9i 数据库第二版中,Oracle 提供了一套全面的基于信息集成共享特性的Oracle 流。Oracle 流可以使整个应用提升到一个新的层次。最突出的是,Oracle 流可以通过一个单一的解决方案满足大部分数据移动,事物处理传递以及事件管理的要求。当需求产生了变化,Oracle 流将能适应并满足新的需求。
Oracle流概要
Oracle流可以使一个数据库中的数据,事物处理和事件在本数据库内部传递,也可以使它们从一个数据库传递到另一个数据库中。流可以将被发布的信息传递到订阅它的目的地。因此这是一个全新的特性,与传统解决方案相比,它在捕获和管理事件、与其他数据库和应用共享事件等方面提供了更卓越的功能性。它可以使IT部门打破各解决方案之间交互使用的循环。Oracle流为建立和运转分布式企业和应用,数据仓库,和高可用性解决方案提供了必要的能力。开发人员和数据库管理员可以同时使用Oracle流的所有能力。如果他们的要求发生了变化,他们可以简单地启用Oracle流的一个新功能,而不必放弃现有的功能。
Oracle流提供了一系列的元素。通过利用这些元素,用户可以控制哪些信息可以放入流中,流应如何流动或通过哪些途径从一个节点流向另一个节点,当流中的事件流向每个节点时它们发生了哪些变化,以及流如何终止等问题。通过指定作用于流上的元素的配置,用户可以强调出特定的要求。为了简化Oracle流的部署,Oracle提供了为特定市场所特别配置的应用。
Oracle流的架构是非常灵活的。如上图所示,流包含三个基本元素。
捕获
存储
消费
捕获
Oracle流支持捕获事件(数据库变化,和应用生成的信息)并存入存储区域。这些事件可以通过两种方式捕获。对于隐式捕获,服务器在一个源数据库中捕获DML和DDL。显式捕获则允许应用明确地生成事件并将其放入存储区域。
Oracle流的显著特征之一是支持基于日志的变更捕获。从重做日志文件中直接捕获变更可以使源系统的间接费减低到最少。基于日志的捕获使得表的变更可以被存入日志文件,从而可以保证当发生损害或媒体故障时的可恢复性。Oracle9i数据库可以读,分析和解释重复操作信息,这些信息当中可能包括数据库活动历史的信息。Oracle9i 数据库第二版可以挖掘信息并将变更数据传递到捕获过程。数据库提供了辅助的日志记录功能,它可以将附加信息如主键列记录到重做流中,以有助于这些信息的传递。捕获处理首先捕获从重做日志中提取出来的变更数据,将其格式化为逻辑变更记录(LCR)的格式。然后将其放入存储区中以备进一步地使用。捕获处理可以基于定义好的规则智能化地过滤LCR,从而可仅使所需对象的变更被捕获。
Oracle流除支持对存档日志文件的挖掘,还支持对在线重做日志的热挖掘。在热挖掘的情况下,重流在变更数据被写入的同时就被热挖掘,从而减少了捕获的延迟。
用户应用可以显式地将信息表现事件加入到存储区域。这些信息可以作为LCR进行格式化,这将使得它们可以被应用引擎所消费,它们也可以被格式化为可被其他用户应用通过利用显式出列所消费的格式。用户应用也可以将信息加入到队列表中,它可以被应用处理所捕获,并作为LCR在存储区域中发布。
存储
事件一旦被捕获就将被放入存储区域。存储区域是一个队列,它可为存储和管理捕获事件提供服务。数据库表的变更将被格式化为LCR,然后被存储于存储区,直到有订阅者消费它们。LCR存储提供了一个安全的保留场所,并能完成对LCR数据的审核和跟踪。
订阅者检验存储区域的内容,以决定他们是否对表现该事件的信息有兴趣。订阅者可以是一个用户应用,通常是位于另一个系统中的其他存储区域,或缺省应用处理。订阅者可以Oracle 流有选择的评价一系列的规则以决定这些信息是否满足订阅时所制定的基准。如果满足基准,这些信息将被订阅者消费。
如果订阅者是用户应用,该应用将把信息从存储区域提取出来以便于消费该信息。如果订阅者是另一个存储区域,该信息将被传递到该存储区域。如果订阅者是一个缺省应用处理,它也将被提取出来被该应用处理所消费。
传递
存储区域中的事件也可被传递到相同数据库中的其他存储区域,或其他远程数据库中的存储区域。为了简化网络路径和减少WAN通讯量,事件并不需要被发送到所有数据库和应用中去。相反,它们可以被直接传递到位于一个或多个系统中的存储区域中,直到到达订阅它们的系统。并不是所有的需要订阅事件,这样可以为特定系统决定利用哪些事件提高灵活性。一个单一的存储区域可以存储来源于多个数据库的事件,这样可以简化安装和配置。
转换
转换是指一个对象在参与捕获和应用过程中形式的变化,或它所保有的数据的变化等。转换可能包括在特定站点的某个表的特定列中数据类型的变化,只在一个站点的某个表中追加一列,或在特定站点的某个表中包含一个数据子集。
转换可以用PL/SQL 功能表示,它输入源数据类型,并返回该对象的目标数据类型。转换可以在信息入列时被指定,即当信息被插入到存储区域之前就被转换为正确的类型。它也可被指定于传递,这将有助于数据子集向远程站点的传递。最后,它也可被指定于出列或本地应用,这将有助于按照指定站点的方式格式化信息。
消费
存储区域的信息可以被应用引擎所消费,它们所表示的变化将被应用于数据库,或它们将被应用所消费。Oracle流包括一个灵活的应用引擎,它允许使用一个标准的或定制的应用功能。因此数据在需要时可以被转换。对于显式出列的支持允许应用开发人员使用Oracle流通知应用数据的变化,也可以充分利用Oracle流的变化捕获和传递能力。
缺省应用
缺省应用引擎使用DML变化,DDL变化和用户指定的LCR。如果目标数据库是Oracle数据库,应用引擎将在Oracle数据库所在系统的本地运行。
如果目标行已被改变但没有包含所期待的数据值,缺省应用引擎将会检测出这种冲突。如果检测出冲突,将会启动一个解决程序。
应用引擎由一个应用协调器,一个获取受控和一个或多个应用受控组成。获取受控负责组合由Oracle生成的LCR的事务处理。应用协调器执行事务处理从属性和DML层级从属性计划以捕获最大化并行性。
由于应用协调器和应用受控一般位于相同的Oracle事例中,因此在从属性计划中不会有网络往复产生。应用引擎可以激活用户指定功能以采用变化。
用户定义的功能应用
应用引擎可以将LCR传递到用户定义的功能中去。它为处理LCR提供了极大的灵活性。一个典型的用户定义功能是在把LCR所表示的数据应用到本地表之前,预先对数据进行再格式化,例如,映射事务处理的字段格式,对象名和列名等。用户定义功能也可被用于执行行子集,或用来更新在源数据库中没有出现的对象。
显式出列
用户应用可以使LCR或其他信息从接收的存储区域显式出列。这可以使用户应用更有效地访问流存储区域中的数据。流可以向注册的PL/SQL或OCI功能发送通知,为应用提供一个可选方案以获取新的信息。当然,为使存储区域中新订阅的信息可有效利用,应用仍然可以捕获,甚至等待。
网络指向
管理员在指定流的路径上具有很大的灵活性。通过使用存储区域队列的基于规则的发行和订阅能力,他们可以选择哪些变化将被传递到每一个目的数据库中,并能指定达到目的地的路径信息。例如,一个事件可以通过一个并没有实际应用该事件的集线器数据库来传递。
区分起源于不同站点的变化是非常重要的。数