设为首页
加入收藏夹

Oracle Streams
浏览选项:

  执行概要
  一般地说,信息共享意味着用户和应用通过利用各种特殊目的的技术从他们的数据库中把
信息取出来。新的商业模式需要更统一的方案--- 人们可以自动发现相关信息并可以使之共享
。它应具有充分的灵活性以适应商业需求的变化,同时最大程度地降低对特定目的技术的依赖
。我们所需要的是能够满足所有信息共享需求的一体化解决方案。
  在Oracle9i 数据库第二版中,Oracle引进了一个全新的一体化信息共享功能,Oracle
流(Oracle Streams)。Oracle流通过一个单一的解决方案满足了大部分的数据移动,事物处
理传播以及事件管理的需要。它为建立和运转分布式企业和应用,数据仓库,和高可用性解决
方案提供了必要的能力。开发人员和数据库管理员可以同时使用Oracle流的所有能力。如果他
们的需求发生了变化,他们可以简单地启用Oracle流的一个新功能,而不必放弃现有的功能。
  简介
  任何数据库管理系统的一个重要功能是在多个数据库和应用间共享信息的功能。传统地说
,这意味着用户和应用将利用各种特定的技术从数据库中将信息取出来。今天,新的功效和商
业模式需要更全面和自动的解决方案。这种方案必须能自动地决定相关的信息,并把这些信息
共享于需要它的群体之间。它也必须是一种能够适应商业需求的变化,同时最大程度地减低对
单一目的解决方案依赖的通用解决方案。这种积极地信息共享包括在数据库中捕获和管理事件
和事物处理,包括但不限于DML,然后将这些事件传递到其他数据库和应用。信息共享对数据
和应用集成,复制,装载数据仓库,高可用性,数据保护以及其他应用是非常重要的。但是,
信息共享选择的多样性可能极为丰富。一些解决方案是专门用于不同目的的,它们可能不能与
其他的选择相互兼容。IT部门发现没有一种解决方案可以满足所有的需求,并且担心当他们的
需求产生变化时会受到他们所采用的解决方案的限制。他们希望能有一种解决方案可以满足信
  Oracle9i 数据库提供了大量的信息共享特性,包括高级队列,高级复制,变更数据同期
捕获和数据卫士。这些特性提供了具有针对性的交错能力,并且基于不同的底层技术。在
Oracle9i 数据库第二版中,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数据的审核和跟踪。
  订阅者检验存储区域的内容,以决定他们是否对表现该事件的信息有兴趣。订阅者可以是
一个用户应用,通常是位于另一个系统中的其他存储区域,或缺省应用处理。订阅者可以
Oracle 流有选择的评价一系列的规则以决定这些信息是否满足订阅时所制定的基准。如果满
  如果订阅者是用户应用,该应用将把信息从存储区域提取出来以便于消费该信息。如果订
阅者是另一个存储区域,该信息将被传递到该存储区域。如果订阅者是一个缺省应用处理,它
  传递
  存储区域中的事件也可被传递到相同数据库中的其他存储区域,或其他远程数据库中的存
储区域。为了简化网络路径和减少WAN通讯量,事件并不需要被发送到所有数据库和应用中去
。相反,它们可以被直接传递到位于一个或多个系统中的存储区域中,直到到达订阅它们的系
统。并不是所有的需要订阅事件,这样可以为特定系统决定利用哪些事件提高灵活性。一个单
一的存储区域可以存储来源于多个数据库的事件,这样可以简化安装和配置。
  转换
  转换是指一个对象在参与捕获和应用过程中形式的变化,或它所保有的数据的变化等。转
换可能包括在特定站点的某个表的特定列中数据类型的变化,只在一个站点的某个表中追加一
列,或在特定站点的某个表中包含一个数据子集。
  转换可以用PL/SQL 功能表示,它输入源数据类型,并返回该对象的目标数据类型。转换
可以在信息入列时被指定,即当信息被插入到存储区域之前就被转换为正确的类型。它也可被
指定于传递,这将有助于数据子集向远程站点的传递。最后,它也可被指定于出列或本地应用
  消费
  存储区域的信息可以被应用引擎所消费,它们所表示的变化将被应用于数据库,或它们将
被应用所消费。Oracle流包括一个灵活的应用引擎,它允许使用一个标准的或定制的应用功能
。因此数据在需要时可以被转换。对于显式出列的支持允许应用开发人员使用Oracle流通知应
用数据的变化,也可以充分利用Oracle流的变化捕获和传递能力。
  缺省应用
  缺省应用引擎使用DML变化,DDL变化和用户指定的LCR。如果目标数据库是Oracle数据库
,应用引擎将在Oracle数据库所在系统的本地运行。
  如果目标行已被改变但没有包含所期待的数据值,缺省应用引擎将会检测出这种冲突。如
  应用引擎由一个应用协调器,一个获取受控和一个或多个应用受控组成。获取受控负责组
合由Oracle生成的LCR的事务处理。应用协调器执行事务处理从属性和DML层级从属性计划以
  由于应用协调器和应用受控一般位于相同的Oracle事例中,因此在从属性计划中不会有网
  用户定义的功能应用
  应用引擎可以将LCR传递到用户定义的功能中去。它为处理LCR提供了极大的灵活性。一
个典型的用户定义功能是在把LCR所表示的数据应用到本地表之前,预先对数据进行再格式化
,例如,映射事务处理的字段格式,对象名和列名等。用户定义功能也可被用于执行行子集,
  显式出列
  用户应用可以使LCR或其他信息从接收的存储区域显式出列。这可以使用户应用更有效地
访问流存储区域中的数据。流可以向注册的PL/SQL或OCI功能发送通知,为应用提供一个可选
方案以获取新的信息。当然,为使存储区域中新订阅的信息可有效利用,应用仍然可以捕获,
  网络指向
  管理员在指定流的路径上具有很大的灵活性。通过使用存储区域队列的基于规则的发行和
订阅能力,他们可以选择哪些变化将被传递到每一个目的数据库中,并能指定达到目的地的路
径信息。例如,一个事件可以通过一个并没有实际应用该事件的集线器数据库来传递。
  区分起源于不同站点的变化是非常重要的。数据库的任何变化都将反映在重做日志中,因
此可以通过捕获过程捕获。但是,在某些情况下有必要区分出起源于另一个站点,由应用过程
所产生的变化,以防止它们被放在存储区域并被返回起始站点。在另一些情况下,捕获所有变
化,包括起源于其他站点的变化将是非常重要的。
  子集与迁移
  Oracle流应用引擎支持对象的子集,所以一个目标只需在源泉订阅数据的一个子集。我们
可以考虑一个典型的的分布式情况,即公司总部的数据库和分支机构数据库。分支机构数据库
仅需要与其分支相关的数据。因此,一个分支机构只需订阅影响该分支机构的事务处理。其他
  流也支持数据从一个子集迁移到另一个子集。订阅是基于内容的,当内容变化时,订阅也
应变化。因此,这需要从一个子集数据库删除数据,并插入到另一个子集中。如果一个原本坐
落于北方地区的客户,被重新划分为南方地区的客户,此时流将自动把它们的信息从北方地区
  例化
  例化是生成一个将被复制于目标站点的对象的备份,并准备捕获由相应的SCN开始的变化
的过程,以保证不会遗漏变化。因为对象的备份是使用输出/输入生成的,系统将记录复制数
  支持不同类型
  Oracle流是一个开放的信息共享解决方案。每个元素支持行业标准语言和标准。流支持从
Oracle到非Oracle系统的捕获和应用。变化可以通过一个透明网关被应用于一个非Oracle系统
。流也包含一个API,可允许非Oracle数据源非常简单地提交或接收变化记录,允许双向的不
同类型的数据移动。而且,通过信息网关,信息还可以通过其他信息队列系统,如MQ Series
  从Oracle到非Oracle的捕获/应用
  不同类型的捕获和应用是指在Oracle数据库和非Oracle数据库之间的捕获和应用。在配置
从Oracle到非Oracle的捕获/应用的Oracle流时,会遇到一些特殊的挑战。
  在从Oracle到非Oracle的环境中传递变化
  为了完成从Oracle源向非Oracle目标的DML变化的捕获和应用,一个Oracle系统将发挥代
理的作用,并完成通常由非Oracle系统完成的步骤。然后Oracle系统将通过一个透明的网关与
非Oracle系统通讯。

  从Oracle到非Oracle的捕获/应用
  当将一个数据库更新传递到非Oracle系统时,在目标站点中将没有存储区域接收变化,也
没有应用引擎使变化出列并应用它们。取而代之,变化将在Oracle数据库本身出列,本地应用
  在从Oracle到非Oracle的环境中例化
  使用Oracle的输出/输入功能对非Oracle系统例化是不可行的。向非Oracle系统的例化可
以通过从本地表的备份中选择数据,并将数据逐行插入到远程表中来完成。
  从非Oracle到Oracle的捕获/应用
  用户需要从非Oracle数据库向Oracle数据库传递变化必须写一个应用。该应用通过从事物
处理日志读取或通过使用触发器捕获发生在非Oracle数据库中的变化。应用必须组合及指定事
物处理使它们转换为LCR形式。然后,它将使用发布的流OCI或PL/SQL API使LCR入列到目标
Oracle数据库的存储区域。

  从非Oracle到Oracle的捕获/应用
  与非Oracle信息队列系统的协作
  Oracle信息网关为Oracle流与非Oracle信息队列系统,如MQ Series 和Tibco Rendezvous
等提供了相互协作的能力。这使得开发人员可以更容易地捕获Oracle数据库中数据的更新,同
时不管它们运行于何种环境或该环境中普遍采用何种通讯技术,都能将这些事件传递到其他的
应用中去。信息网关也支持从MQ Series 和Tibco向Oracle流传递信息,允许相同的第三方应
用通过MQ Series 和Tibco向内置于Oracle流环境中的应用提交事件。
  部署于特定市场
  Oracle流可以满足各种市场对信息共享的需要。为了简化Oracle流在各种不同市场的部署
,Oracle提供了工具和高水平的功能,它更易于利用流为各个市场提供所需的特殊能力。
Oracle高级队列,作为提供信息队列和事件管理能力的集成于数据库的特性,现在被内置于
Oracle流。另外,Oracle9i 数据库所带有的工具可以帮助用户利用Oracle 流建立事件通知
,复制和数据库仓库装载解决方案。而且,为了更好地强调数据保护市场的需求,Oracle提供
Oracle数据卫士(SQL应用模式),这是Oracle流可提供数据保护的一种功能。当然,任何人
都可以使用Oracle流的全部功能,并可以生成跨越多个市场的配置,使应用迈上新的台阶。而
且,许多部署和它们相应的元数据是兼容的。例如,一个被配置为装载数据仓库的系统可以很
容易地被扩展为允许双向复制,而不需要一个完全的再配置。
  Oracle高级队列的信息队列
  Oracle 流的特性之一,Oracle高级队列可以允许用户应用使信息向存储区域入列,将信
息向订阅存储区域传递,通知用户应用信息已准备完毕可用于消费,以及在目标地点使信息出
列。它支持信息队列系统的所有标准功能,包括多消费者队列,发布和订阅,基于内容的路径
,互联网传递,转换,和其他信息子系统的网关。高级队列也支持对用户应用的通知,将推式
的近似实时的优势与拉式的可扩展性与易管理性的优势相结合的特点。

  两个数据库间的信息队列
  Oracle流的高级队列所具有的特性对建立信息队列应用是非常有益的。系统管理员应该在
源数据库中生成一个存储区域起到一个队列的作用。应用就可以显式地将信息入列到源数据库
中。应用可以严格地使用类型化队列,在数据库的前期版本中划分了队列的特性,也可以使用
Oracle流中新设的AnyData队列。AnyData队列可用于保存各种不同类型的信息,所以它可以
将不同类型的信息入列于同一存储区域中。订阅应用可以使信息直接从存储区域中出列。如果
是远程应用,存储区域也可以建立在将订阅由源存储区域发布的信息的远程数据库中。因此,
目标应用可以从远程存储区域出列。作为选项,目标应用也可以利用各种标准协议直接从源存
  Oracle流的事件管理
  商务事件是应用或组织间(内部或外部)有价值的通讯。它们需要高度的可靠性,整合性
和安全性。Oracle流的信息队列存储于Oracle数据库,而且在消费之后继续保留。所以高级队
列可以被用作商务事件管理系统。高级队列按照事物处理的方式将所有信息存储于数据库中,
它们可以被自动审查和跟踪。这种审查和跟踪可被用于提取商业运作的智能化。

  高级队列的流事件管理
  将高级队列用作商务事件管理系统的关键因素在于存储区域中的保持力。在信息队列中,
存储区域被生成用于存储商务事件,它可以被应用显式地入列。商务事件可以通过一个能显式
地使事件出列的应用在本地被消费,或它们可以被传递到其他存储区域,然后被应用所消费。
即使信息被消费,所有存储区域也都将保留信息,这为管理商务事件提供了检查跟踪的保证。
  Oracle流的事件通知
  过量的信息使得重要数据的发现变得困难。应用的一个新的级别是被用于监视数据并将相
关数据通知给需要的各方。Oracle流支持事件通知,下层数据库的变化将被捕获,并被传送到
订阅了该变化事件的其他应用或设备上。流包括一个可扩展的精致的规则引擎,它能评价被捕
获的变化,并能将它们传递给相关的订阅者。

  流的事件通知
  为事件通知配置流需要建立捕获过程以捕获感兴趣的事件,它们可以是DML,DDL或隐式入
列信息。这些事件将被发布,并被订阅应用所消费。利用规则可以做到只消费感兴趣的事件。
消费应用也可以采取行动,如电子邮件通知,或通过一个无线网关将信息传输到一个移动电话
  Oracle流的复制
  Oracle流可以有效地捕获系统的变化,并将这些变化复制到一个或多个其他系统当中。捕
获变化可以利用Oracle流的隐式捕获机制完成。变化被传递到一个或多个远程数据库中,它们
被标准应用功能所利用。远程数据库完全开放读/写权限,并不需要与源数据库完全相同的备
份。因为远程数据库可以通过其他途径更新,在变化被利用之前应用机制能够能检测出冲突。
这些冲突也可以通过内置的或定制的解决机制自动解决。复制可以是多相的。对任何远程数据
  如同高级复制一样,Oracle流支持易更新的物化视图或快照,以维护时时的数据备份。它
们可以被定义为包含一个主表的完全备份,或是在主表中被定义的满足一个基于数值选择基准
的某行的子集。

  流的两节点复制
  为复制配置流首先需要指定要复制的对象。表示这些对象DML和DDL变化的事件可以从重做
日志中捕获,并发布于本地存储区域。在存储区域中,它们将被转换为满足目标系统的格式。
这些事件将被传递到一个或多个目标存储区域。这些事件的传递路径是可配置的。目的地的应
用引擎将在目的地的存储区域中订阅这些事件(可以基于内容,并非所有事件都需被消费)。
缺省应用引擎将原封不动地应用这些变化,并监测和选择性地解决可能发生的冲突。应用引擎
也可以把事件传递到用户定义的功能,因而可以按照定制的方式应用变化。
  Oracle流的数据仓库装载
  生成和维护数据仓库的最关键的工作之一是更新现有数据,或从运转数据库中追加新数据
。Oracle流可以捕获实际系统的变化,并将这些变化传递到存储数据库,或直接发送到一个的
数据仓库或运转数据储备区。Oracle流的基于日志捕获消除了从实际系统中的不必要的间接费
。对数据转换和用户定义应用功能的支持,使得当数据被装载时重新格式化数据或更新数据仓
库指定数据字段具有了充分的灵活性。

  装载数据仓库或运转数据储备区
  为装载数据仓库或一个运转数据储备区(ODS)配置流与建立备份相似。事实上运转数据
储备区与数据库子集的备份相似。DML可利用隐式基于日志的变化捕获被抽出,并连续地流向
ODS。某些项目将被转换为不同的格式以保证与其他数据储备区的一致性。缺省应用引擎可被
用于装载更新,因为ODS是只读的,因此可能不需要解决冲突。而且,附加索引和物化(常规
)视图可以成为运转数据储备区的一部分。
  数据仓库一般使用专业的提取,翻译和装载(ETL)工具装载。它们通常会生成一个存储
表,并以批量的方式转换和装载数据。因此在装载数据仓库中流的角色是装载存储表。
  Oracle 数据卫士的数据保护
  数据保护的一种解决方案是为实际数据库生成一个本地的和远程的备份。对于人为的失误
或灾难,备份可用于恢复处理。Oracle数据卫士支持SQL应用模式。在这种模式中,数据卫士
使用Oracle流的基础架构生成和维护一个实际数据库的逻辑备用备份。如同复制一样,Oracle
流的基于日志捕获机制被用于捕获以SQL语句表示的变化。这些变化被传递并应用于一个或多
个逻辑备用数据库。备用数据库将完全放开读/写权限,也可能包含一些专业化的索引或其他
数据库对象。因此,当更新被应用时它们可以被查询,使得Oracle数据卫士成为从实际数据库
卸载延迟敏感度查询的良好的解决方案。

  Oracle 数据卫士(SQL 应用模式)
  从表面上看,数据卫士似乎只是复制的一种特殊情况。但是,流的复制配置和SQL应用模
式之间有许多显著的不同。最显著的不同在于捕获变化的地点。将更新尽快地移到远程站点的
备用数据库中是非常重要的。这能保证一旦发生故障,事物处理的损失可以减少到最小。如果
在远程数据库直接且同期地写重做日志,可以保证在发生故障时不会有任何数据的损失。在备
用系统,利用缺省应用引擎可以捕获变化并将其直接应用于备用数据库。因为备用应该是只读
的,因此没有必要执行任何冲突监测或解决方案。在ODS情况下,可以向备用数据库追加附加
  Oracle9i 数据库版本2信息共享特性
  在Oracle流和它的扩展功能基础之上,Oracle9i 数据库版本2还提供了下列信息共享特性
? 高级复制,变更数据捕获,和数据卫士物理备用数据库。这些特性是在数据库的早期版本
中引进的,并被设计用来满足特定市场的需要,如仓库装载,数据保护,和复制。
  在Oracle9i 数据库版本2,Oracle流是提供数据保护,企业复制,信息和商务事件管理的
首选方法。Oracle流几乎可以提供以前高级复制所带有的所有功能。由于高级复制支持某些特
性,而且Oracle流没有提供API,它仍然是Oracle9i数据库兼容性的一个独立特性。而且,同
期变更数据捕获仍将继续存在,为捕获变更作为向下兼容的特性以装载数据仓库。最后,数据
卫士也将继续支持重做应用模式,它通过恢复机制应用重做日志以生成一个物理备用数据库。
该模式并不使用Oracle流。135031506880

  IT部门必须能充分满足他们需求的特性。在许多情况下,这是一个简单的任务,因为
Oracle流和内置于Oracle流中的特性是信息共享的优选特性。下表总结归纳了这些特性。

  结论
  Oracle9i 数据库版本2为在数据库,用户和应用之间共享信息提供了许多非常强大的功能
。在现有的功能,如高级队列,高级复制,和数据卫士等基础之上,Oracle流通过利用共同的
基础架构还可被用于满足大部分需要的信息共享需求。复杂的分布式环境可受益于一个单一的
解决方案,以简化它们的信息共享解决方案。简单的分布式环境可受益于知识,当它们的需要
发生变化时它们可以扩展它们的环境,而不必学习和集成新的产品。开发人员和管理员可以在
工具上花费更少的时间,而把更多的精力用于提供解决方案上。



Copyright © 2004 wanxu.com All Rights Reserved