实时数据集成简介

http://www.oracle.com/technology/global/cn/pub/articles/rittman-odi.html

    Oracle Data Integrator 


实时数据集成简介(查看原始链接可以看到图)

作者:Mark Rittman 

本文介绍了 Oracle Data Integrator,它是一个基于 Java 的中间件,可以使用数据库在 SOA 中执行基于集合的数据集成任务。

现在,复杂的“可热插拔”系统和面向服务的体系结构 (SOA) 得到了广泛应用,这使得将数据合理地整合在一起的难度日益增加。尽管您的主要应用程序数据库在 Oracle 数据库上运行,但是可能还有其他较小的系统在其他供应商提供的数据库和平台上运行。您的应用程序本身可以通过 Web 服务之类的技术进行交互,应用程序和数据可以远程托管,也可以由您在企业数据中心内进行管理。

Oracle Data Integrator 属于 Oracle 融合中间件产品系列,它解决了异构程度日益增加的环境中的数据集成需求。它是一个基于 Java 的应用程序,可以使用数据库来执行基于集合的数据集成任务,也可以将该功能扩展到多种数据库平台以及 Oracle 数据库。此外,通过它,您还可以通过 Web 服务和消息提取并提供转换数据,以及创建在面向服务的体系结构中响应和创建事件的集成过程。

Oracle Data Integrator 产品体系结构
Oracle Data Integrator 是以 Java 图形模块和调度代理访问的模块化信息库为中心进行组织的。图形模块用于设计和构建集成过程,代理用于安排和协调集成任务。当 Oracle Data Integrator 项目投入生产时,数据管理员可以使用基于 Web 的 Metadata Navigator 应用程序来根据信息库中的元数据生成报告。现成的知识模块可以使用特定于平台的代码和工具跨异构平台提取和加载数据。




Oracle Data Integrator 信息库包含一个主信息库(包含有关用户和角色的详细信息)、到数据库和其他数据源的连接、项目版本以及一个或多个工作信息库(包含数据模型的详细信息以及用于集成数据的映射)。这些信息库可以存储在 Oracle 和非 Oracle 关系数据库中,可以使用图形模块进行管理,并可以在运行时由代理进行访问。

有四个图形模块可用来创建和管理 Oracle Data Integrator 项目:

Designer 用于定义数据存储(表、文件、Web 服务等)、接口(数据映射)以及程序包(包括接口在内的几组集成步骤)。
Topology Manager 用于创建和管理到数据源和代理的连接,通常限制为只有管理员可以访问。
Operator 用于查看和管理产品集成作业。
Security Manager 管理用户及其信息库权限。

这些基于 Java 的应用程序可在包括 Microsoft Windows、Macintosh OS X 和 Linux 在内的任何 Java 环境中运行。
声明式设计

一般来说,数据集成任务涉及两个主要的领域:

关于转换哪位数据并将其与其他位相结合的业务规则
关于数据的实际提取、加载等操作方式的技术细节
这种划分意味着,定义业务规则的人通常是机构的技术业务专家或数据专家,而技术细节则往往留给开发人员和 DBA 等技术人员来定义。使用大多数数据集成工具,通常很难以这种方式划分职责,因为它们的数据映射特性在同一个数据映射中混合了业务规则和技术实现细节。而 Oracle Data Integrator 采用了一种不同的方法,像 SQL 一样使用声明式方法来构建数据映射,这在工具中称为“接口”。

创建新的接口时,开发人员或技术业务用户首先定义要集成的数据以及应使用的业务规则。在该步骤中,会将表联接在一起,应用过滤器,并使用 SQL 表达式来转换数据。所使用的特定 SQL 语言由执行代码的数据库平台来决定。

然后,在另一个步骤中,技术人员可以使用特定于数据库的工具和设计方法(例如增量加载、批量加载工具、渐变维度和更改数据捕获)以最有效的方式来提取、组合并集成该数据。

可扩展的知识模块

由于 Oracle Data Integrator 在响应事件的同时从很多不同的数据库平台加载和转换数据并使用基于消息的技术(如 Web 服务),因此用于访问和加载这些不同数据源的技术需要灵活、可扩展而又高效。Oracle Data Integrator 通过知识模块解决了该问题。

知识模块是 Oracle Data Integrator 的“插件”,它浓缩了为特定数据源或特定目标加载、转换或集成数据的最佳实践。Oracle Data Integrator 有六种知识模块,如下图所示:




反向工程知识模块用于从源数据库中读取表和其他对象元数据。
日志记录知识模块记录单个表或视图或者一组一致的表或视图中的新数据和更改的数据。
加载知识模块用于从源数据库中有效地提取数据,并包括特定于数据库的适用的批量卸载工具。
检查知识模块用于检测源数据中的错误。
集成知识模块用于有效地将分段存储区中的数据转换为目标表,以便为给定数据库生成优化的本机 SQL。
服务知识模块可以将数据公布为 Web 服务。
知识模块还可以扩展,这样您可以添加 Oracle Data Integrator 当前未提供的功能。例如,采用一组现有的基于 Oracle 的知识模块并将其扩展为包括 Oracle 数据库 10g 中的 Oracle 数据泵功能将是一项相对简单的任务。

数据质量防火墙

如果您是负责加载数据仓库的人,那么不得不解决的一个问题是执行夜间加载的时间段越来越短。如果您的元数据包含大量在加载到数据仓库分段存储区之前无法检测的错误,时间就会变得格外紧张。

Oracle Data Integrator 利用了一种创新方法来解决该问题,即,使用检查知识模块在数据源处充当脏数据的“防火墙”,只允许符合业务规则的数据进入集成流程。要使用该方法有效地确保数据质量,您首先要在源对象上定义一个或多个约束,然后使用检查知识模块来识别不符合这些约束的所有行,并将它们复制到错误表中。




这样,在您以后从这些源对象中提取数据并在接口中使用它们时,可以确保仅加载了符合这些约束的数据,并且您可以单独处理错误表中的脏数据。

支持更改数据捕获

尽可能缩短数据加载时间的另一种有用的方法是,仅加载新的或经过更改的数据。幸运的话,应用程序设计人员会提供指示器和日期来帮助确定新的或经过更改的数据,但是大多数情况下,不会提供该信息,这需要您自己来确定感兴趣的数据。

由于这是一个相当普遍的要求,因此 Oracle Data Integrator 提供了日志记录知识模块来监视源数据库,并将新的和经过更改的记录复制到日志中,然后可以从日志中而非原始的源表中读取这些记录。如果 Oracle 之类的数据库供应商提供更改数据捕获的本机支持,就会使用这些功能;否则,日志记录知识模块会使用触发器之类的技术来捕获数据操作语言 (DML) 活动并使更改可用。在本文的后面部分,您将看到 Oracle Data Integrator 如何提供 Oracle 更改数据捕获功能,以及如何使用它以增量方式将数据库实时加载到其他数据库平台上。

Oracle Data Integrator 与 Oracle Warehouse Builder 比较

这时,Oracle Warehouse Builder 的常规用户可能想知道它与 Oracle Data Integrator 的关系,以及它在其他 Oracle 数据仓库技术产品中的适用情况。我们的回答是,Oracle Data Integrator 是一个工具,是对 Oracle Warehouse Builder 的补充,如果涉及在 Oracle 数据仓库中创建分段层和集成层的工作很重要或者涉及 SOA 或非 Oracle 数据库源,它将尤为有用。

对于构建 Oracle 数据仓库的人来说,Oracle Warehouse Builder 有一组功能强大的特定于 Oracle 的数据仓库功能,例如,支持关系和多维数据结构的建模、与 Oracle Business Intelligence Discoverer 集成、支持加载渐变维度,以及用于理解数据结构和语义的数据分析器。

从源数据的最初准备和集成一直到数据仓库的分段存储区,Oracle Data Integrator 都起着重要作用。




Oracle Data Integrator 可以集成和同步大量不同数据源(包括 Web 服务和基于事件的体系结构)中的数据,并且如上图所示,还可以为特定于 Oracle 数据库的功能(如 Oracle 更改数据捕获)提供方便的图形界面。将数据集成并复制到数据仓库分段存储区后,Oracle Warehouse Builder 会接替后续工作,创建并填充操作数据存储和维度仓库层。

现在大家对 Oracle Data Integrator 已经有所了解,本文将重点关注如何在实际的数据集成案例中使用它。

Oracle Data Integrator 使用示例:跨平台实时数据集成

在该案例中,您的任务是从 Oracle 数据库中提取一些订单和客户数据,将其与文件中保存的一些员工数据组合到一起,然后将集成的数据载入 Microsoft SQL Server 2000 数据库。由于订单到达时需要进行分析,因此您希望以尽可能接近实时的速度将它们直接传递到目标数据库,并仅提取新的和经过更改的数据以保持尽可能小的负载。您已经在 Oracle 技术网上了解了 Oracle Data Integrator 的相关信息,并希望使用这一新工具来提取和加载数据。

您首先登录到 Oracle Data Integrator 并启动 Topology Manager,如下图所示。




在 Oracle Data Integrator 中,物理数据库、服务或基于事件的数据源均称为数据服务器。使用 Topology Manager 创建三个新的数据服务器:

一个 Oracle 数据库数据服务器,使用 SYSTEM 用户的凭证设置,映射到数据库上的 ORDERS 和 ORDERS_WORKAREA 模式。ORDERS 模式包含您要提取的订单数据,而 ORDERS_WORKAREA 模式是您专门设置的一个空模式,用来存放 Oracle Data Integrator 创建的工作表。使用 Oracle JDBC 驱动程序建立该连接。
一个文件数据服务器,映射到以逗号分隔的文件(其中包含员工详细信息)。使用 Sunopsis 文件 JDBC 驱动程序建立该连接。
一个 Microsoft SQL Server 数据服务器,映射到名为 ORDERS_DATA_MART 的数据库。使用 Sun JDBC-ODBC 桥接 JDBC 驱动程序建立该连接,或者使用 Microsoft JDBC 驱动程序(可以从 Microsoft Web 站点下载)。
定义数据服务器之后,您可以退出 Topology Manager 并启动 Designer。使用 Designer,您可以创建代表 Oracle、文件以及 Microsoft SQL Server 表和文件的数据模型,这在 Oracle Data Integrator 中称为数据存储。首先创建 Oracle 和 Microsoft SQL Server 模型,然后使用反向功能将表的元数据导入 Oracle Data Integrator 的信息库中,如下图所示。




如果已经定义了所有数据模型,并且已经手动输入源以及目标表和文件的详细信息或对其进行反向工程,Designer 将显示您目前在项目中使用的所有数据存储的列表,如下图所示。




确定基础源表是否未定义主键,您可以使用 Designer 应用程序定义它们,然后让 Oracle Data Integrator 以“虚拟方式”强制执行,因为 Oracle Data Integrator 的很多映射功能都依赖于所定义的约束。

既然已经定义了数据存储,您可以开始设置获取源数据的更改数据捕获过程了。

但是,在此之前,您需要将提供更改数据捕获功能的知识模块导入项目。为此,单击 Designer 应用程序的 Projects 选项卡,右键单击项目,然后选择 Import->Import Knowledge Modules。从列表中选择以下知识模块,它们可提供更改数据捕获功能并将在项目的其他部分中使用。

CKM SQL
IKM SQL 增量更新
JKM Oracle 10g Consistent (LOGMINER)
LKM File to SQL
LKM SQL to SQL
现在,所需的知识模块已经可用,您可以编辑以前创建的 Oracle 模块并选择 Journalizing 选项卡。由于您希望以一致的方式捕获对 ORDERS 和 CUSTOMER 表的更改,因此选择了 Consistent 选项和 JKM Oracle 10g Consistent (LOGMINER) 知识模块。该知识模块(如下图所示)将使用 Oracle 数据库 10g 的 LogMiner 功能捕获新的和经过更改的数据,并使用 Oracle 流以异步方式在队列中传播更改。




该知识模块提供了三个配置选项。您可以选择下列值来配置该模块:

Asynchronous Mode:Yes
Auto-Configuration:Yes
Journal Table Options:default
单击 Apply 保存更改,然后单击 OK 完成配置。现在,您需要将表添加到更改数据捕获集合中。

为此,在 Designer 的模块列表中找到 Oracle 数据服务器,依次右键单击 CUSTOMERS 和 ORDERS 表,然后选择 Changed Data Capture ->Add to CDC。然后,再次编辑模型的 Journalized Tables 选项卡,使用向上和向下箭头键将 ORDERS 表置于 CUSTOMERS 表的上面。

现在,您可以创建从这两个表中捕获更改数据的日志了。为此,再次右键单击该模型,并选择 Changed Data Capture ->Start Journal。单击 OK 在本地执行代码,然后启动 Operator 应用程序检查操作进程。如果一切正常,您将看到一个类似于以下的完成步骤列表。




如果该过程遇到错误,通常是由于您使用了不具有所需权限的用户帐户定义 Oracle 连接。查看您提供的用户详细信息和 Oracle Data Integrator 文档以解决所有问题,然后再继续该练习的其余部分。

接下来,您要向日志中添加一个用户,方法是:返回 Designer 应用程序,右键单击 Oracle 源数据服务器,并选择 Changed Data Capture ->Subscriber->Subscribe。添加一个新用户,并在本地执行代码以确保代码正确执行(某些操作可能会发出警告,因为在前面的步骤中已经创建了所需的表)。该步骤完成后,您已经建立了更改数据捕获过程,可以开始构建接口了。

该项目需要两个接口,第一个接口用于从 Oracle 源数据库中提取现有的数据集,将其与源文件中的数据联合到一起,然后将组合数据载入目标 Microsoft SQL Server 数据库,如下图所示。




注意,目标表中的某些列已经自动映射,但 SALES_PERSON_ID、SALES_PERSON_NAME 和 CUSTOMER_NAME 等其他列最初并未映射,因为映射过程找不到匹配的源列。现在,您将手动映射这些列,使用表达式编辑器输入使用源或目标数据库语法的 SQL 表达式,具体取决于发生转换的位置。

如果单击 Flow 选项卡,您将看到用于加载和集成数据的实际知识模块,如下图所示。




Oracle Data Integrator 已经选择了默认知识模块来实现从任何数据库和文件中提取数据,然后以增量方式载入任何数据库。稍后,您可以将这些知识模块更改为更适合您的特定数据库和版本的模块,但现在请保留这些模块的默认设置。

最后,如下图所示,单击 Control 选项卡,以选择用于处理目标表的约束错误的控制知识模块。选择 CKM SQL Knowledge Module 以处理符合 ISO-92 的数据库中的错误数据。




现在,您可以测试接口了。为此,单击接口对话框右下角的 Execute,然后打开 Operator 应用程序检查接口进度,如下图所示。




由于接口的执行未出现错误,您可以在 Designer 应用程序中导航到目标数据存储并查看加载的数据,如下图所示。




现在,您已经设置了初始负载,下面可以定义通过先前创建的日志表加载新的和经过更改的数据的接口了。

为此,再创建一个接口,但这次,当您添加 CUSTOMERS 和 ORDERS 源表时,单击表明使用日志记录的数据而非数据存储内容的复选框。为一个日志记录表选择该复选框后,系统将自动为一致集合中的所有其他表选中该复选框,如下图所示。




将日志记录表添加到接口后,您可以按照与先前完全相同的方式构建接口的其余部分,唯一的区别是,第二个接口以日志记录的数据而非源表内容作为源数据。

要测试第二个接口,您可以将一些新记录插入 ORDERS 和 CUSTOMERS 表,然后使用 Designer 接口来扩展日志窗口;稍后,您将自动扩展该窗口,并将其作为 Oracle Data Integrator 程序包的一部分进行清除。但现在,右键单击 Oracle 数据模型,并从上下文菜单中选择 Changed Data->Consumption->Extend Window,使新的和经过更改的数据的最新集合可用于第二个接口,如下图所示。




您可以快速检查哪些行在表日志中(右键单击相关的数据存储,选择 Changed Data Capture,然后选择 Journal Data…),也可以执行接口(在编辑器中再次打开它,并单击屏幕右下角的 Execute)。

由于您已经使用所创建的第一个接口将最初的数据集合载入目标数据中心,现在可以创建一个 Oracle Data Integrator 程序包来执行下列步骤:

检查 ORDERS 和 CUSTOMER 日志记录数据,以查看是否已添加新的或经过更改的数据记录。如果检测到预定义数量的日志记录,运行程序包的其余部分或跳到最后一步,无需加载任何数据。
如果检测到日志记录数据,扩展日志窗口。
执行该接口,以读取日志记录数据,将其与文件联合,并加载目标数据存储。
清除日志窗口。
再次启动该程序包。
创建该程序包然后将其作为 Oracle Data Integrator 案例部署可有效地创建一个实时、连续运行的 ETL 过程。使用 Oracle Data Integrator 的事件检测功能,该程序包将在检测到预先设置的更改数据记录数或经过指定的毫秒数后自行启动。通过为日志记录数据的数量和超时设置相应的阈值,您可以创建一个延迟最小的实时集成过程。

要创建该程序包,导航到 Designer 应用程序的 Projects 选项卡,找到包含您先前定义的接口的文件夹,找到 Packages 项,右键单击该项,然后选择 Insert Package。为该程序包指定一个名称,然后导航到程序包详细信息对话框的 Diagram 选项卡。

使用右侧的工具箱,转至 Event Detection 文件夹并将 OdiWaitForLogData 工具添加到程序包画布中,如下图所示。该工具将定期轮询日志记录数据,如果未找到任何行,该工具将失败,如果在日志中检测到预先设置的行数,该工具将进入程序包的下一个步骤。




您可以将工具属性设置为检查先前定义的更改数据捕获集合,并在发现 3 个日志行或检查开始一分钟后退出。

现在,您可以添加一个扩展日志窗口以读入新数据的步骤。为此,导航到模型列表,并将 Oracle 模型拖放到画布上。选择该模型,查看属性,然后将 Model Type 列表更改为 Journalizing Model,如下图所示。




然后,单击 Extend Window 复选框,以表明该日志步骤将扩展日志窗口。

接下来,将从日志提取数据的接口添加到映射,然后将 Oracle 模型再次添加到程序包中,但这次选择 Purge Window 选项,以便在读取日志后将其清除。最后,将 Utilities 文件夹中的 OdiStartScen 工具添加到工具箱,以便在其完成后再次重启,您还可以添加显示步骤流程的连接器(如下图所示),具体取决于第一个步骤是否检测到日志行。




由于最后的 OdiStartScen 步骤指的是程序包生产版本中的情况,您可以在 Designer 应用程序的 Project 选项卡中找到要使用的程序包,右键单击该程序包,并选择 Generate Scenario。创建了案例之后,您可以编辑 OdiStartScen 步骤的属性,使其引用您刚刚生成的案例名称。将这最后一步添加到程序包之后,您就可以确保它连续运行,并以实时方式将 Oracle 源表中新的和经过更改的数据传播到目标数据库。

总结
Oracle Data Integrator 是 Oracle 融合中间件产品系列的一个新成员,您可以利用它跨众多平台执行面向数据、事件和服务的集成。它对 Oracle Warehouse Builder 进行了补充,并为特定于 Oracle 数据库的功能(例如,批量数据加载和 Oracle 更改数据捕获)提供了图形界面。本文探究了如何使用 Oracle Data Integrator 跨不同的平台创建实时数据集成过程,还探究了集成过程的声明式方法,该方法可让您集中精力定义业务规则,而不用考虑实现细节。

Mark Rittman [http://www.rittmanmead.com/blog] 是一位 Oracle ACE,并且是 Rittman Mead Consulting 的创始人之一,Rittman Mead Consulting 是 Oracle 的专业合作伙伴,总部设在英国,并致力于 Oracle 商务智能和数据仓库。他定期向 OTN 和 OTN 论坛投稿,并且是 Oracle Press 即将在 2008 年出版的《Oracle 商务智能套件开发人员指南》一书的作者之一。

你可能感兴趣的:(数据结构,oracle,sql,应用服务器,SQL Server)