WEB开发网
开发学院数据库DB2 IBM DB2 Connect简介 阅读

IBM DB2 Connect简介

 2006-08-21 22:09:42 来源:WEB开发网   
核心提示: 使用存储过程来访问数据的这种技术可以在 DB2 家族的所有服务器上使用,然而,IBM DB2 Connect简介(2),这种技术最常用于 DB2 for z/OS 服务器,因为在那里非常需要一种统一的基于 SQL 的访问方式,DB2 Connect 是用于到大型主机数据库的应用程序连接的高度优化的、集成的通信子系
使用存储过程来访问数据的这种技术可以在 DB2 家族的所有服务器上使用。然而,这种技术最常用于 DB2 for z/OS 服务器,因为在那里非常需要一种统一的基于 SQL 的访问方式,来访问非关系大型主机数据(例如 VSAM/IMS 数据库)以及 CICS 和 IMS 事务程序形式的大型库存管理业务逻辑。另一种流行的技术是使用 WebSphere MQSeries® 中的消息队列来创建存储过程,这种存储过程通过消息传递来开始其他系统上的事务或业务逻辑。下面的图 5 展示了 DB2 Connect 之类产品提供的一些功能以及 DB2 家族对存储过程的支持。

图 5. DB2 Connect 借助于存储过程的数据访问功能

IBM DB2 Connect简介(1)(图五)

    点击查看大图



    提供对非关系大型主机数据的统一的、基于 API 的标准访问模式,这样做的优点数不胜数。这种利用 DB2 存储过程的方法不仅简化了 Windows、Linux 和 UNIX 程序员的工作,而且使他们完全不必知道数据和程序逻辑的性质以及它们的位置。程序员完全没必要接受 CICS、IMS、VSAM 和其他大型主机技术方面的培训 —— 但即使是最基层的程序员(每个人都知道如何调用存储过程)也能以一种良好架构的、可控制的(可控制的这个词很关键)方式来充分利用这些系统。例如,很多应用程序编程人员都擅长 Visual Basic.NET,但是他们可能完全没听说过 CICS。通过使用存储过程的方法,Visual Basic.NET 开发人员同样可以开发一个 CICS 应用程序,而只需使用与访问所有关系数据所用的相同的接口和方法。这可以大大节省应用程序开发的时间和开发人员的成本,因为可以使用更标准化的数据访问 API(例如 JDBC 和 ADO.NET)。

    自然,存储过程本身需要开发和部署。这些存储过程通常是由熟悉这些大型主机技术的大型主机编程人员和 DBA 构建的。为了进一步简化构建存储过程的任务,IBM 提供了 CICS 和 IMS 事务的源代码样本(这些源代码可以不作修改地用于生产)。特别地,对于 CICS,IBM 提供了一个样本存储过程(名为 DSNACICS),它有助于大大简化通过 DB2 Connect 访问分布式应用程序或基于 Web 的应用程序中的 CICS 事务的过程。此外,有一个用户出口(名为 DSNACICX)为 DBA 提供了一种机制来抽象 CICS 接口的知识,并检查或覆盖由这些程序员提供的参数,以便取得更好的控制。

    您可以通过阅读 DB2 Connect documentation 来了解更多关于 CICS 和 DB2 Connect 的知识。其中还提供了用于 IMS 的一个类似的存储过程,即 DSNAIMS 。

    至此,您可能想知道,这种使用存储过程访问非 DB2 数据的方法是否适用于只读类型的操作,或者是否能用于现实中的事务。答案是,对这些数据源的访问是原子性的,通过 z/OS Resource Recovery Service (RRS) 功能可以保证数据完整性。例如,一个存储过程可以更新某些 DB2 UDB 数据,并执行 CICS 事务,如果这些操作中任何一个失败,则整个事务将回滚。因此,在使用存储过程来更新非 DB2 数据和执行非 DB2 事务时,数据完整性是完全有保障的。

    对于运行在 Linux、UNIX 和 Windows 系统上的应用程序,还有其他方法可以访问大型主机数据和事务。为什么使用 DB2 Connect 和 DB2 存储过程,这是一个经常问到的问题。我们认为以下几条是这种方法的主要优点:

    • DB2 Connect 和存储过程解决方案不需要单独的驱动程序或者到这些非 DB2 大型主机数据源的单独连接。
    • 使用 DB2 存储过程的方法由 DB2 来保证非 DB2 大型主机数据源中数据的完整性,而不是将此任务委托给应用程序。这样一来,应用程序看到的就是一个统一的数据视图,而不必执行它自己的连接、过滤、排序等任务。
    • 使用 DB2 存储过程的方法可以提供一种良好管理的、可控制的可用于数据访问的环境 —— 这在大型主机领域中是必需的。对非 DB2 数据的访问完全由存储过程提供,只需通过授权对存储过程的访问,便可以授权或拒绝个人对数据的访问。大多数大型主机运营者都不大愿意接受借助用于 IMS 的 ODBC 驱动程序从 Microsoft Excel 到生产 IMS 数据库之类的即席(ad hoc)访问。此外,存储过程是在 Workload Managed (WLM) 地址空间中运行的,这样可以对资源消耗进行很好的控制和管理。

    使用 SQL 函数提供异构型分布数据的统一视图

    大多数程序员都熟悉数据库提供的 SQL 函数,这些 SQL 函数用于执行字符串处理,进行运算和统计计算,甚至计算地图上的位置。DB2 附带了多达数百个内建函数。除此以外,DB2 服务器还允许程序员创建他们自己的函数 —— s用户定义函数(User Defined Functions, UDF) —— 以补充产品中原有的函数。由于 DB2 Connect 服务器实际上建立在 DB2 UDB 数据库服务器基础之上,因此它也允许客户创建他们自己的函数。然而,因为 DB2 Connect 本身不存放数据,所以这些函数通常需要从其他数据源访问数据,并使这些数据作为联邦数据库的一部分提供出来。为了简化用户定义函数的创建,DB2 Connect 为四种类型的函数提供了内建的加速器:

    1. 用于使用 OLE DB API 连接到数据源的函数
    2. 用于连接到存储在文件中的 xml(标准化越来越近了)(DB2 之外)的函数
    3. 用于连接到业界标准的 Web 服务的函数
    4. 用于通过 MQSeries 消息队列获得数据的函数

    所有这些函数都有一个共同点:当被调用时,每个函数都返回一个结果集,这个结果集看上去像一个 DB2 表(这正是我们将其称作表函数的原因)。就像其他的内建函数一样,表函数也可以在 SQL SELECT 语句中使用。另外,这些函数还常用于定义视图,让应用程序使用视图,而不是直接使用函数。

    OLE DB 是 Microsoft 的一种技术,它被嵌入在 Windows 操作系统中。OLE DB 的目标(就像它之前的 ODBC 的目标)是提供对各种关系和非关系数据源的透明的访问。在 DB2 Connect 的上下文中,只要有可用的 OLE DB 驱动程序(其实更恰当的名称是 provider,但由于很多人使用 driver 这个术语,因此我们在这里同时使用了这两个术语),用户编写的 UDF 便可以使用 OLE DB 接口访问任何数据源。幸运的是,对于大多数数据源(关系的和非关系的),都有可用的 OLE DB 提供程序(provider)。例如, Microsoft Data Access Components (MDAC) 提供了用于 Microsoft Access、sql server(WINDOWS平台上强大的数据库平台)、文本文件和 Excel 电子表格等常见数据源的 OLE DB 驱动程序。如前所述,由于大多数供应商都为他们各自的数据源提供了 OLE DB 驱动程序,因此还有很多其他的拥有 OLE DB 驱动程序的数据源。DB2 Connect 为 DB2 提供了 OLE DB 驱动程序 —— 但通过内建的联邦支持提供了比 OLE DB UDF 更好的访问 DB2 数据源的方案。下面的图 6 提供了使用 OLE DB UDF 访问 OLE DB 数据源的一个例子:

    图 6. 使用 DB2 Connect 中的 OLE DB 函数来访问数据

    IBM DB2 Connect简介(1)(图六)



    实际上,不需要编写任何代码便可以创建前面图中的 UDF(它将存储在 Microsoft Access 数据库中的数据暴露成一个视图)。它是如此的简单,所以一旦和 DB2 Development Center (我们在本系列的应用程序开发部分将会加以阐述)相结合的话,就只需要点几下鼠标了。详细的说明超出了本文的范围 —— 但是您可以查阅 developerWorks 来了解更多信息。

    OLE DB 访问很伟大(也是很必要的),但如今大多数数据并不是规规矩矩地就放在行和列之中(当我们大肆谈论关系数据库时,这一事实有时候竟被遗忘了)。虽然非关系数据的范围过于广泛,但是有必要至少简要地谈谈 DB2 Connect 和两种最流行的数据媒介:xml(标准化越来越近了) 和消息队列。

    如前所述,DB2 Connect 包括内建的 xml(标准化越来越近了) 支持,并且可以访问存储在 DB2 数据库和文件系统中的 xml(标准化越来越近了)。为了访问存储在 DB2 以外的 xml(标准化越来越近了) 数据,您可以在 DB2 Connect 联邦数据库中创建一个 UDF。该函数将从一个文件中读取 xml(标准化越来越近了) 文档,然后以结构化数据输出的形式返回内容。

    DB2 Connect 服务器上的 xml(标准化越来越近了) 函数可以辅助开发那样的 UDF。例如,db2xml(标准化越来越近了).xml(标准化越来越近了)VarcharFromFile、db2xml(标准化越来越近了).xml(标准化越来越近了)CLOBFromFile 和 db2xml(标准化越来越近了).Content 这些函数都可以用于在一个 UDF 中把 xml(标准化越来越近了) 数据从文件读到内存。就像 OLE DB UDF 返回的数据一样,由从文件读 xml(标准化越来越近了) 的 UDF 返回的数据可以通过直接调用这些 UDF 来访问,或者也可以通过定义使用这些函数来实现(materialize)的视图来访问 —— 而且,还有一个向导来帮助创建这些函数!

    对存储在 DB2 for z/OS 中的 xml(标准化越来越近了) 的数据访问可以使用用于 DB2 for z/OS 的 xml(标准化越来越近了) Extender 或更常见的 SQL API 的扩展,即 SQL/xml(标准化越来越近了) (SQLx) 来完成。不管使用哪种方法,DB2 Connect 都可以拆分和组合 xml(标准化越来越近了),根据 DTD 或 xml(标准化越来越近了) Schema 文档验证其合法性,使用 XSLT 引擎对其进行转换,等等。图 7 展示了一个例子,该例子使用 DB2 Connect 内建的 SQLx 函数访问 DB2 UDB for z/OS 数据库中的数据,并将语句的输出放到 xml(标准化越来越近了) 文件。

    图 7. 使用 DB2 Connect 中的 xml(标准化越来越近了) 功能来处理 xml(标准化越来越近了) 数据 - 有多种方法可以做这件事。

    IBM DB2 Connect简介(1)(图七)



    当您想与其他系统集成数据或业务流程时,消息队列是另一个强大的工具,它可以与 DB2 Connect 一起使用。WebSphere MQSeries 目前是这个领域的市场领头羊,而 DB2 Connect 可用于使这些队列的应用达到顶峰,它可以用于写这些队列(表数据或 xml(标准化越来越近了) 数据),或者从中取数据并销毁它们。这种功能是独立的,与在关于存储过程的小节中描述的从大型主机上的存储过程中读和写队列不同。

    对 WebSphere MQSeries 的处理是通过从 SQL 调用的 UDF 来完成。所以 DB2 Connect 使那些不知道如何编写基于 MQSeries 的应用程序的开发人员能够像对待关系表那样处理这些队列中的数据。

    例如,为了执行对一个表的 select 操作并将该表的内容发布到一个 WebSphere MQSeries 消息队列,可以使用以下语句:

    SELECT MQSWND(LASTNAME) FROM EMPLOYEE


    为了将队列中的内容插入到一个表中,可以输入以下命令:

    INSERT INTO T VALUES(SELECT * FROM TABLE(MQRECEIVALL()) T)


    下面的图 8 展示了这些类型的操作:

    图 8. 使用 DB2 Connect 中的 WebSphere MQSeries 功能来处理数据

    IBM DB2 Connect简介(1)(图八)



    我们对 UDF 和 DB2 Connect 技术的讨论,以及给出的一些例子,都与读数据有关。我们展示了如何使用 OLE DB2 接口等来读 xml(标准化越来越近了) 文件、消息队列和其他数据源中的数据。然而,需要指出的是,虽然读操作看上去更常用一点,但 SQL 函数还可以用于写出数据,不过使用存储过程进行更新操作是一种更自然的编程范例。

    结束语

    在这个关于 DB2 Connect 的系列的本部分中,我们希望您清楚地看到 DB2 Connect 服务器是一个多么强大的数据访问平台。如今有非常多的各种各样的数据源,有了 DB2 Connect 及其相关产品,您就可以充分利用您的投资,并有效地访问这些数据,而不必再次做那些培训、安装、架构等工作。

    至此我们已经看到,DB2 Connect 是用于到大型主机数据库的应用程序连接的高度优化的、集成的通信子系统。除此以外,它还是超越 DB2 for z/OS 的一个数据访问平台 —— 您的数据也许不在关系 DB2 数据库中。

    上一页  1 2 

    Tags:IBM DB Connect

    编辑录入:coldstar [复制链接] [打 印]
    赞助商链接