首页 > Linux操作系统 > Linux操作系统 > Oracle Streams
Oracle流可以使一个数据库中的数据,事物处理和事件在本数据库内部传递,也可以使它们从一个数据库传递到另一个数据库中。
Oracle流提供了一系列的元素。通过利用这些元素,用户可以控制哪些信息可以放入流中,流应如何流动或通过哪些途径从一个节点流向另一个节点,当流中的事件流向每个节点时它们发生了哪些变化,以及流如何终止等问题。
流包含三个基本元素:捕获、存储、消费。
捕获
Oracle流支持捕获事件(数据库变化,和应用生成的信息)并存入存储区域。这些事件可以通过两种方式捕获。对于隐式捕获,服务器在一个源数据库中捕获DML和DDL。显式捕获则允许应用明确地生成事件并将其放入存储区域。
Oracle流的显著特征之一是支持基于日志的变更捕获。从重做日志文件中直接捕获变更可以使源系统的间接费减低到最少。基于日志的捕获使得表的变更可以被存入日志文件,从而可以保证当发生损害或媒体故障时的可恢复性。Oracle9i数据库可以读,分析和解释重复操作信息,这些信息当中可能包括数据库活动历史的信息。Oracle9i 数据库第二版可以挖掘信息并将变更数据传递到捕获过程。数据库提供了辅助的日志记录功能,它可以将附加信息如主键列记录到重做流中,以有助于这些信息的传递。捕获处理首先捕获从重做日志中提取出来的变更数据,将其格式化为逻辑变更记录(LCR)的格式。然后将其放入存储区中以备进一步地使用。捕获处理可以基于定义好的规则智能化地过滤LCR,从而可仅使所需对象的变更被捕获。
Oracle流除支持对存档日志文件的挖掘,还支持对在线重做日志的热挖掘。在热挖掘的情况下,重流在变更数据被写入的同时就被热挖掘,从而减少了捕获的延迟。
用户应用可以显式地将信息表现事件加入到存储区域。这些信息可以作为LCR进行格式化,这将使得它们可以被应用引擎所消费,它们也可以被格式化为可被其他用户应用通过利用显式出列所消费的格式。用户应用也可以将信息加入到队列表中,它可以被应用处理所捕获,并作为LCR在存储区域中发布。
存储
事件一旦被捕获就将被放入存储区域。存储区域是一个队列,它可为存储和管理捕获事件提供服务。数据库表的变更将被格式化为LCR,然后被存储于存储区,直到有订阅者消费它们。LCR存储提供了一个安全的保留场所,并能完成对LCR数据的审核和跟踪。
订阅者检验存储区域的内容,以决定他们是否对表现该事件的信息有兴趣。订阅者可以是一个用户应用,通常是位于另一个系统中的其他存储区域,或缺省应用处理。订阅者可以有选择的评价一系列的规则以决定这些信息是否满足订阅时所制定的基准。如果满足基准,这些信息将被订阅者消费。如果订阅者是用户应用,该应用将把信息从存储区域提取出来以便于消费该信息。如果订阅者是另一个存储区域,该信息将被传递到该存储区域。如果订阅者是一个缺省应用处理,它也将被提取出来被该应用处理所消费。
传递
存储区域中的事件也可被传递到相同数据库中的其他存储区域,或其他远程数据库中的存储区域。为了简化网络路径和减少WAN通讯量,事件并不需要被发送到所有数据库和应用中去。相反,它们可以被直接传递到位于一个或多个系统中的存储区域中,直到到达订阅它们的系统。并不是所有的需要订阅事件,这样可以为特定系统决定利用哪些事件提高灵活性。一个单一的存储区域可以存储来源于多个数据库的事件,这样可以简化安装和配置。
转换
转换是指一个对象在参与捕获和应用过程中形式的变化,或它所保有的数据的变化等。转换可能包括在特定站点的某个表的特定列中数据类型的变化,只在一个站点的某个表中追加一列,或在特定站点的某个表中包含一个数据子集。
转换可以用PL/SQL 功能表示,它输入源数据类型,并返回该对象的目标数据类型。转换可以在信息入列时被指定,即当信息被插入到存储区域之前就被转换为正确的类型。它也可被指定于传递,这将有助于数据子集向远程站点的传递。最后,它也可被指定于出列或本地应用,这将有助于按照指定站点的方式格式化信息。
消费
存储区域的信息可以被应用引擎所消费,它们所表示的变化将被应用于数据库,或它们将被应用所消费。Oracle流包括一个灵活的应用引擎,它允许使用一个标准的或定制的应用功能。因此数据在需要时可以被转换。对于显式出列的支持允许应用开发人员使用Oracle流通知应用数据的变化,也可以充分利用Oracle流的变化捕获和传递能力。
缺省应用
缺省应用引擎使用DML变化,DDL变化和用户指定的LCR。如果目标数据库是Oracle数据库,应用引擎将在Oracle数据库所在系统的本地运行。
如果目标行已被改变但没有包含所期待的数据值,缺省应用引擎将会检测出这种冲突。如果检测出冲突,将会启动一个解决程序。
应用引擎由一个应用协调器,一个获取受控和一个或多个应用受控组成。获取受控负责组合由Oracle生成的LCR的事务处理。应用协调器执行事务处理从属性和DML层级从属性计划以捕获最大化并行性 。
由于应用协调器和应用受控一般位于相同的Oracle事例中,因此在从属性计划中不会有网络往复产生。应用引擎可以激活用户指定功能以采用变化。
用户定义的功能应用
应用引擎可以将LCR传递到用户定义的功能中去。它为处理LCR提供了极大的灵活性。一个典型的用户定义功能是在把LCR所表示的数据应用到本地表之前,预先对数据进行再格式化,例如,映射事务处理的字段格式,对象名和列名等。用户定义功能也可被用于执行行子集,或用来更新在源数据库中没有出现的对象。
显式出列
用户应用可以使LCR或其他信息从接收的存储区域显式出列。这可以使用户应用更有效地访问流存储区域中的数据。流可以向注册的PL/SQL或OCI功能发送通知,为应用提供一个可选方案以获取新的信息。当然,为使存储区域中新订阅的信息可有效利用,应用仍然可以捕获,甚至等待。
网络指向
管理员在指定流的路径上具有很大的灵活性。通过使用存储区域队列的基于规则的发行和订阅能力,他们可以选择哪些变化将被传递到每一个目的数据库中,并能指定达到目的地的路径信息。例如,一个事件可以通过一个并没有实际应用该事件的集线器数据库来传递。
区分起源于不同站点的变化是非常重要的。数据库的任何变化都将反映在重做日志中,因此可以通过捕获过程捕获。但是,在某些情况下有必要区分出起源于另一个站点,由应用过程所产生的变化,以防止它们被放在存储区域并被返回起始站点。在另一些情况下,捕获所有变化,包括起源于其他站点的变化将是非常重要的。
子集和迁移
Oracle流应用引擎支持对象的子集,所以一个目标只需在源泉订阅数据的一个子集。我们可以考虑一个典型的的分布式情况,即公司总部的数据库和分支机构数据库。分支机构数据库仅需要与其分支相关的数据。因此,一个分支机构只需订阅影响该分支机构的事务处理。其他分支机构将接收不同的子集。
流也支持数据从一个子集迁移到另一个子集。订阅是基于内容的,当内容变化时,订阅也应变化。因此,这需要从一个子集数据库删除数据,并插入到另一个子集中。如果一个原本坐落于北方地区的客户,被重新划分为南方地区的客户,此时流将自动把它们的信息从北方地区迁移到南方地区。
例化
例化是生成一个将被复制于目标站点的对象的备份,并准备捕获由相应的SCN开始的变化的过程,以保证不会遗漏变化。因为对象的备份是使用输出/输入生成的,系统将记录复制数据的SCN,并开始应用在对象被复制之后提交的任何变化。
支持不同类型
Oracle流是一个开放的信息共享解决方案。每个元素支持行业标准语言和标准。流支持从Oracle到非Oracle系统的捕获和应用。变化可以通过一个透明网关被应用于一个非Oracle系统。流也包含一个API,可允许非Oracle数据源非常简单地提交或接收变化记录,允许双向的不同类型的数据移动。而且,通过信息网关,信息还可以通过其他信息队列系统,如MQ Series和Tibco 等发送或接收。
从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数据库中的变化。应用必须组合及指定事物处理使它们转换为LCR形式。然后,它将使用发布的流OCI或PL/SQL API使LCR入列到目标Oracle数据库的存储区域。
与非oracle信息队列系统的协作
Oracle信息网关为Oracle流与非Oracle信息队列系统,如MQSeries 和 Tibco Rendezvous等提供了相互协作的能力。这使得开发人员可以更容易地捕获Oracle数据库中数据的更新,同时不管它们运行于何种环境或该环境中普遍采用何种通讯技术,都能将这些事件传递到其他的应用中去。信息网关也支持从MQ Series 和Tibco向Oracle流传递信息,允许相同的第三方应用通过MQ Series 和Tibco向内置于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数据卫士成为从实际数据库卸载延迟敏感度查询的良好的解决方案。
从表面上看,数据卫士似乎只是复制的一种特殊情况。但是,流的复制配置和SQL应用模式之间有许多显著的不同。最显著的不同在于捕获变化的地点。将更新尽快地移到远程站点的备用数据库中是非常重要的。这能保证一旦发生故障,事物处理的损失可以减少到最小。如果在远程数据库直接且同期地写重做日志,可以保证在发生故障时不会有任何数据的损失。在备用系统,利用缺省应用引擎可以捕获变化并将其直接应用于备用数据库。因为备用应该是只读的,因此没有必要执行任何冲突监测或解决方案。在ODS情况下,可以向备用数据库追加附加索引和物化视图,为报表生成一个ODS。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7677336/viewspace-207196/ ,如需转载,请注明出处,否则将追究法律责任。