在本系列的第1部分中,我们介绍了DB2 Connect提供的不同编程接口以及实现这些接口的驱动程序。 在最后几节中,我们介绍了DB2 Connect提供的通信基础结构的表面,并了解了该基础结构如何极大地减少了大型机资源的使用,并允许分布式应用程序充分利用大型机平台的优势(例如,轻松管理混合工作负载并提供持续的应用程序可用性)。
您可能还记得一幅如图1所示的图片,它显示了DB2 Connect作为编程接口(实现为JDBC™,SQLJ,ODBC,DB2 CLI,OLE DB,.NET®和嵌入式SQL驱动程序)的组合。 。
图1. DB2 Connect是编程接口和连接基础结构的组合,可为客户端服务器和基于Web的应用程序提供大型机优势

在本系列的第2部分中,我们讨论了作为该通信基础结构一部分的功能之一,即DB2 Connect如何提供对分布式异构数据的统一访问 。
在深入探讨该解决方案的统一访问,分布式以及异构方面的细节之前,我们需要将注意力转向通信基础架构本身。 DB2 Connect以通信服务器的形式提供此通信基础结构,该服务器可以部署在Windows®,Linux®(包括用于zSeries的Linux)和UNIX®服务器上。 使用与构建DB2 UDB数据库服务器相同的代码库来构建此通信服务器,因此,该通信服务器继承了该体系结构中DB2 UDB服务器所具有的所有品质。
实际上,我们在本文中描述的功能要求在DB2 Connect服务器本身上创建数据库(不,您不需要为此提供DB2 Universal Database™(UDB)的副本)。 最初,这似乎与本系列第1部分中的陈述相矛盾,DB2 Connect仅将应用程序连接到DB2 for z / OS和DB2 foriSeries®数据库,而DB2 Connect不管理数据。 要澄清的是,您将在DB2 Connect服务器上创建的数据库将不保存任何数据。 它仅用作单个连接点,以将统一或单个数据库映像传递给应用程序。 然后,DB2 Connect服务器仅将对数据的请求路由到实际管理数据的其他数据库服务器。
尽管在第I部分中您可能了解了确实使DB2 Connect与竞争对手分离的通信管道的某些功能,但您可能已经知道DB2 Connect至少执行了此功能(将应用程序连接至大型机)。 既然您对DB2 Connect的基础体系结构更加熟练,那么现在是时候交付第一部分中令人眼花eye乱的字幕了-我们将从第二部分开始。
在第2部分中,我们将讨论DB2 Connect作为数据访问平台,而不仅仅是在大型机上讨论DB2。 例如,您是否知道您的DB2 Connect工作站能够在同一事务中执行DB2 for z / OS数据库与Windows数据库上的Informix®IDS之间的分布式联接? 它还可以使用对两阶段提交(2PC)的内置支持,在同一提交范围内更新这些数据源。 我们告诉您,您将找到一些简洁的功能! 如果这听起来像联盟,或者听起来更像是WebSphere®Information Integrator(以前称为DB2 Information Integrator),那么您是对的。 实际上,所有DB2 UDB和DB2 Connect服务器都带有WebSphere Information Integrator联合支持,该支持对整个DB2 UDB系列和内置在引擎中的Informix IDS。 诸如WebSphere Information Integrator之类的产品将联合引擎的作用范围扩展到了您的其他关系型(Oracle,Microsoft®SQL Server等),非关系型(ADABAS,VSAM),OLE DB,XML和虚拟化任何其他数据源。企业。
统一访问分布式异构数据源
您可能对统一 , 分布式和异构意味着什么,但可能不知道DB2 Connect如何实现这些概念。 您可能还熟悉IBM WebSphere Information Integrator产品,并且可能认为这些词很好地描述了这些产品。 继续阅读,这些产品之间的相互关系将更加清晰。
统一访问是降低异构环境中开发应用程序复杂性的一种极好的方法。 虽然应用程序程序员总是可以始终与每个单独的数据源建立单独的连接,但在应用程序中具有单个数据库连接要容易得多。 到不同数据源的单独连接需要多个驱动程序(例如,单独的DB2和Informix JDBC驱动程序)。 应用程序中的单独连接不允许您将数据视为由单个数据库管理(例如,应用程序程序员必须从多个数据源中获取数据并执行自己的联接)。 单独的连接还会在应用程序中硬编码位置,并限制数据架构师更改数据位置的能力,以更好地适应不断变化的业务需求。
相反,统一的数据访问机制为应用程序程序员提供了与企业所有数据资产的单点连接。 它允许使用单个API(驱动程序),提供一种可使用SQL风格(您不必担心SQL Server使用money数据类型,而DB2 UDB则不使用),并提取数据位置,以便可以在不影响现有应用程序的情况下进行更改。 最后,它允许程序员将所有数据视为来自单个关系数据库,并且该数据库能够管理数据的联接,排序和过滤,同时确保完整的事务完整性-并且扩展了DB2中的基本功能连接,这些后端数据源不必是关系数据(例如,它可以是VSAM或ADABAS数据源)。
我希望很明显,使用单个数据库比协调对多个数据源的访问要简单得多。 与我们从IBM Information Management获得的方法的不同之处在于,我们不希望您将所有内容都撕掉并粘贴在DB2数据库中,因为那是不现实的。
DB2 Connect通过三种不同的机制之一来实现这种直观的简单访问方法:
- 联合数据库
- 储存程序
- SQL函数
DB2 Connect和联合数据库
DB2 Connect带有产品内置的基本级别的联合数据库功能。 您可能熟悉此功能,因为该功能先前是由IBM DataJoiner产品提供的。 从版本8开始,联邦数据库支持已成为DB2 Connect和DB2 UDB服务器不可或缺的一部分,任何人都可以使用而无需购买额外的产品。 换句话说,在Linux,Windows和UNIX服务器上部署DB2 Connect服务器时,可以创建应用程序可以连接到的联合数据库。 连接到联邦数据库后,请求将路由到真实的数据源-而功能补偿,数据类型转换,高效数据检索的优化等复杂性将为您透明地处理。
DB2 Connect的联合组件包括对Linux,UNIX和Windows的DB2 UDB,VSE / VM的DB2 UDB,z / OS的DB2 UDB,iSeries的DB2 UDB和Informix IDS数据库服务器的读/写支持。
您可以使用DB2 Connect中的联合功能来在这些服务器之间执行分布式请求,如下图2所示:
图2. DB2 Connect的联邦数据库功能

例如,以下语句:
SELECT * FROM T1, T2 where T1.C1=T2.C2
可用于从位于不同服务器上不同数据库中的表返回结果。 例如,表T1可以驻留在DB2 UDB z / OS版数据库中,并且可以与表T2联接,该表T2在Windows版Informix IDS上驻留。
此功能允许应用程序开发人员在同一SQL SELECT语句中引用由DB2 UDB系列(和Informix IDS)的多个成员管理的对象-完全不了解查询的分布式性质。 使此功能更强大的原因在于,负责编写此类应用程序的开发人员将这些数据源视为本地DB2表(通过昵称),并使用相同SQL API来访问每个数据源,甚至可以从各自的集成开发环境中访问它们。 (IDE)! 由于它们作为SQL API的一个虚拟数据库以及在集成开发环境中提供,因此无需了解后端数据存储之间的任何差异。
DB2 Connect与WebSphere Information Integrator一起作为联合身份验证服务器
在上一节中,您了解了DB2 Connect如何使用DB2 UDB和基于Informix IDS的数据源构建联合数据库。 与WebSphere Information Integrator结合使用时,DB2 Connect可以提供对其他数据源(例如Oracle,Microsoft SQL Server,Sybase,IMS,VSAM以及整个其他数据源)的透明访问。 当DB2 Connect与WebSphere Information Integrator结合使用时,上图可以增强为如下图3所示:
图3. DB2 Connect的带有WebSphere Information Integrator的联合数据库功能,可以进行更广泛的关系数据库访问

实际上,这种情况下功能的完整图片如下所示:
图4. DB2 Connect的WebSphere Information Integrator联合数据库功能可访问任何数据。
您可能想知道,如果您的企业中已经有WebSphere Information Integrator,那么为什么需要DB2 Connect。 首先,WebSphere Information Integrator没有附带对zSeries和基于iSeries的DB2 UDB数据库的许可访问。 简而言之,如果您不试图对这些数据库进行联邦访问,那么就不需要DB2 Connect。 除此之外,正如您在第一部分中了解到的那样,DB2 Connect的通信子系统具有关键特性,这些特性为普通连接提供了更好的可伸缩性,可靠性和可用性。
DB2 Connect在其联合核心中内置了一个智能优化器。 这意味着当您从Oracle数据库中选择大量数据时(如果在此示例中使用的是WebSphere Information Integrator),优化器将了解Oracle数据存储的启发式,索引,基数和一般情况,并可以重写查询更好的访问权限。
长期以来,DB2 UDB一直以其强大的自治功能优化技术而闻名,这些技术可导致快速访问数据:联邦带来的这些好处并没有消失。 相反,它们内置在DB2 Connect的联合优化器中。 因此,由于DB2 Connect充当联邦层,它可以执行谓词下推或分支树消除,以加快数据访问速度。 DB2 Connect将决定将谓词下推到本机存储,还是带回整个结果集并在本地应用它们,是否更有意义。 DB2 Connect甚至可以在这些外部数据源上创建一个温暖的数据高速缓存,这样,根据数据存储的并发特性或业务需求,异构数据库甚至可能不需要参与!
深入研究联合的能力不在本文的讨论范围之内,但是要牢记的最重要的事情是, 一个开发人员可以在自己的IDE中使用一个API,在任何地方都可以访问无数个数据 。 这些特性在当今市场上是无与伦比的,它们代表了对专有API访问或“删除和替换”方法的切实负责的解决方案,但在当今注重成本的环境中却被禁止使用。 最重要的是,DB2 Connect是这些效率的起点,它具有动态选项,可以根据需要添加越来越多的数据源。
存储过程和统一数据访问
与其他竞争数据库供应商的存储过程相比,DB2服务器中的存储过程在功能上有些独特。 可以用与应用程序其余部分几乎相同的方式来编写DB2存储过程中的代码(例如,程序员或应用程序DBA可以使用首选的编程语言-Java,COBOL,.NET或C-和可以调用数据库服务器平台上以该编程语言提供的任何API,例如,程序员可以编写一个存储过程(在COBOL中),以调用CICS事务并将该存储过程部署到DB2 for z / OS。因为调用存储过程的应用程序与存储过程的实现细节完全隔离,所以调用应用程序完全不知道它们对存储过程的执行将导致对CICS资源(对于本示例)的访问,该存储过程甚至是用COBOL(程序员或DBA可能不熟练的语言)编写的。
使用存储过程进行数据访问的技术可以在所有DB2系列服务器上使用。 但是,它在DB2 for z / OS服务器上最流行,只是因为非常需要提供对非关系大型机数据(例如VSAM / IMS数据库)和基于CICS和IMS的大量业务逻辑的基于SQL的统一访问。交易程序。 另一种流行的技术是使用来自WebSphereMQSeries®的消息队列来创建存储过程,该存储过程使用消息传递来启动其他系统上的事务或业务逻辑的处理。 下面的图5显示了诸如DB2 Connect之类的产品提供的一些功能以及DB2家族对存储过程的支持:
图5.通过存储过程的DB2 Connect的数据访问功能。

为非关系大型机数据提供基于统一标准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文档来了解有关CICS和DB2 Connect的更多信息。 还提供了一个类似的用于IMS的存储过程,称为DSNAIMS。
到目前为止,您可能想知道使用存储过程对非DB2数据的这种访问是否适合于只读类型的操作,或者是否可以用于实际事务中。 该问题的答案是对这些数据源的访问是原子的,并且可以通过z / OS资源恢复服务(RRS)设施确保数据完整性。 例如,存储过程可以更新一些DB2 UDB数据,执行CICS事务,并确保如果这些操作中的任何一个失败,整个事务将被回滚。 因此,在使用存储过程更新非DB2数据和执行非DB2事务时,可以确保您具有完整的数据完整性。
还有其他途径可以从Linux,UNIX和Windows系统上运行的应用程序访问大型机数据和事务。 为什么使用DB2 Connect和DB2存储过程是一个常见问题? 以下项目符号总结了我们认为此方法的主要优点:
- DB2 Connect和存储过程解决方案不需要单独的驱动程序或与这些非DB2大型机数据源的单独连接。
- DB2存储过程方法允许通过DB2 Connect集成来自非DB2大型机数据源的数据,而不是将此任务委托给应用程序。 这使应用程序可以获得数据的统一数据视图,因此不必执行自己的联接,过滤,排序等。
- DB2存储过程方法提供了一个良好的管理和控制环境,可用于访问数据-这在大型机世界中是必须的。 仅通过存储过程提供对非DB2数据的访问,并且可以通过简单地授权对存储过程的访问来授权或拒绝个人访问。 大多数大型机商店不太愿意通过IMS的ODBC驱动程序从Microsoft Excel临时访问生产IMS数据库。 此外,存储过程在工作负载托管(WLM)地址空间中运行,可以在其中控制和管理资源消耗。
使用SQL函数提供分布式异构数据的统一视图
大多数程序员都熟悉数据库提供SQL函数,以执行字符串处理,算术和统计计算,甚至计算地图上的位置,以及其他函数。 DB2附带了数百个内置函数。 除此之外,DB2服务器还允许程序员构建自己的功能(称为用户定义功能(UDF)),以增强产品中提供的功能。 由于DB2 Connect服务器实际上是建立在DB2 UDB数据库服务器基础结构上的,因此它也允许客户创建自己的功能。 但是,由于DB2 Connect本身不保留任何数据,因此这些功能通常依赖于从其他数据源访问数据并使这些数据作为联合数据库的一部分可用。 为了简化此类功能的创建,DB2 Connect为四种类型的此类功能提供了内置的加速器:
- 使用OLE DB API连接到数据源的函数
- 连接到文件中存储的XML的函数(DB2外部)
- 连接到行业标准Web服务的功能
- 使用MQSeries消息队列获取数据的函数
所有这些函数都有一个共同点:调用时,每个函数都返回一个看起来像DB2表的结果集(这就是我们称它们为表函数的原因)。 就像任何其他内置函数一样,表函数可以在SQL SELECT语句中使用。 这些功能的另一种流行用法是在视图的定义中实际使用它们,并使应用程序使用该视图,而不是直接使用该功能。
OLE DB是嵌入Windows操作系统中的一项Microsoft技术。 OLE DB的目标(就像之前ODBC的目标一样)是提供对各种关系和非关系数据源的透明访问。 在DB2 Connect的上下文中,自定义编写的UDF可以使用OLE DB接口访问任何数据源,只要有一个OLE DB驱动程序(提供者是专有名称而不是驱动程序-但是很多人使用术语“驱动程序”,所以我们包括了两者都可用)。 幸运的是,大多数数据源(关系和非关系)都有OLE DB提供程序。 例如,Microsoft数据访问组件(MDAC)为流行的数据源(例如Microsoft Access,SQL Server,文本文件,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函数来访问数据。

实际上,要在上图中创建UDF(它将存储在Microsoft Access数据库中的数据作为DB2视图公开),则不需要任何编码! 它是如此简单明了,以至于与DB2 Development Center结合使用时,您只需单击按钮即可。 详细说明不在本文讨论范围之内,但是您可以查看Developer Works以获得更多信息。
OLE DB访问是很棒的(并且是必需的),但是今天的大多数数据实际上并不存在于格式良好的行和列中(当我们过多地谈论关系数据库时,它们有时会丢失)。 尽管非关系数据的范围是无限的,但是至少简短地谈论一下DB2 Connect和两个最受欢迎的数据中位数是很重要的:XML和消息传递队列。
如上所述,DB2 Connect包含内置的XML支持,并且可以访问存储在DB2数据库和文件系统中的XML。 要访问存储在DB2外部的XML数据,可以在DB2 Connect联合数据库中创建UDF。 此函数将从文件中读取XML文档,并将其内容作为结构化数据输出返回。
DB2 Connect服务器上的XML函数可以帮助开发此类UDF。 例如, db2xml.XMLVarcharFromFile , db2xml.XMLCLOBFromFile和db2xml.Content都是可以全部用于将XML数据从文件读取到UDF的内存中的函数。 与OLE DB UDF返回的数据一样,可以通过直接调用UDF或定义使用这些函数实现数据的视图来访问从文件中读取XML的UDF返回的数据-是的,有一个向导可以帮助您也建立这些功能!
可以使用XML Extender for DB2 for z / OS或对SQL API更为广泛的扩展:SQL / XML(SQLx),来实现对存储在DB2 for z / OS中的XML的数据访问。 使用这两种方法中的任何一种,DB2 Connect都可以分解并组成XML,针对DTD或XML Schema文档对其进行验证,使用XSLT引擎对其进行转换,等等。图7显示了使用DB2 Connect内置SQLx函数访问数据的示例。从DB2 UDB z / OS版数据库中获取,并将语句的输出放入XML文件中。
图7.在DB2 Connect中使用XML功能来处理XML数据-有多种方法可以做到这一点。
当您想将数据或业务流程流与其他系统集成时,消息队列是可以与DB2 Connect一起使用的另一个强大工具。 WebSphere MQSeries到目前为止是该领域的市场领导者,DB2 Connect可用于达到这些队列的峰值,向它们写入(表数据或XML数据)或窥视并销毁它们。 此功能是独立的,并且与存储过程部分中所述的大型机上存储过程的读取和写入队列不同。
通过从SQL调用的UDF处理对WebSphere MQSeries的支持。 因此,DB2 Connect为不知道如何编写基于MQSeries的应用程序的开发人员提供了使用这些队列中可用数据作为简单关系表的能力。
例如,要从表中执行简单选择并将该表的内容发布到WebSphere MQSeries消息队列,可以使用以下语句:
SELECT MQSWND(LASTNAME) FROM EMPLOYEE
要将队列的内容插入表中,可以输入以下命令:
INSERT INTO T VALUES(SELECT * FROM TABLE(MQRECEIVALL()) T)
这些操作显示在下面的图8中:
图8.在DB2 Connect中使用WebSphere MQSeries功能来处理数据。

我们对UDF和DB2 Connect技术的讨论以及我们提供的示例都涉及读取数据。 我们展示了如何使用OLE DB接口从XML文件,消息队列,其他数据源中读取数据,等等。 但是,必须指出的一点是,尽管读取似乎是一种更常用的用法,但使用SQL函数也可以将数据写出,尽管使用存储过程进行更新是更自然的编程范例。
结论
在我们关于DB2 Connect的系列的这一部分中,我们希望您已经看到了数据访问平台DB2 Connect服务器的真正功能。 那里有无数的数据源,并且使用DB2 Connect及其相关产品,您可以利用您的投资并有效地访问此数据,而无需重新培训,重新安装,重新设计等等。
到目前为止,我们已经看到DB2 Connect如何成为一个高度优化的集成通信子系统,用于与大型机数据库进行应用程序连接。 除此之外,它还是DB2 z / OS版以外的数据访问平台-您的数据不在关系DB2数据库中!
翻译自: https://www.ibm.com/developerworks/data/library/techarticle/dm-0504zikopoulos/index.html