作者详述了从 DB2 Version 8 到 DB2 9.5 以来 IBM® DB2® 数据服务器连通性选项的演变历史。此外,了解 DB2 9.5 中每个连通性选项的规范:包括指纹(fingerprint)级、轻量级以及会占用全部内存的选项,伴随此过程还将为您介绍一些技巧。
简介
在已发布的几个 IBM DB2 for Linux®, UNIX®, and Windows® (DB2) 版本中,存在各种各样的 DB2 客户机和驱动程序允许您将应用程序连接到 DB2 数据服务器。从标准部署到轻量级运行时,再到不需要任何工具而仅要求一个连接字符串的最小化运行时,我们的客户机参数选择范围几乎可以满足用户的任何选择。
在过去的几个发行版中,DB2 客户机连通性选项不断演变,试图能够赶上客户机 “在磁盘上” 的参数选择的演变速度。在本文中,我将为您介绍从 DB2 9.5 发行版开始的可用的 DB2 客户机和驱动程序的最新信息,并提供一些影响客户机连通性的选项的发展历程,从而使您更清楚地理解 DB2 9.5。虽然您可能没有使用 DB2 9.5 发行版,但是本文可以帮助您了解如何在未来部署中选择连通性选项,同时介绍了连通性软件的发展方向。
最后一个提示:您应该了解的一点是,从 DB2 9 开始,DB2 产品集的服务器组件在绝大多数情况下只接受完整版本或重要升级(例如 DB2 9.5)的新功能。相比之下,DB2 (客户机或驱动程序)的连通性选项可以继续更新,并且可以接受维护(补丁)、新版本和单点发行版带来的新功能。开发人员设法确保实现向后兼容性。因此,您可以更加灵活地享受到最新的客户端功能带来的好处。例如,从 DB2 9.5 Fix Pack 1 开始,Visual Studio 2008 支持成为了 IBM Database Add-ins for Visual Studio 的一部分。我们之所以能够及时地交付 Visual Studio 2008 支持正是因为有了这种新的客户机交付架构。
|
DB2 客户机连通性简史
DB2 数据服务器的客户机连通性在过去几个发行版中经历了一些变化。虽然名称和特性会让人觉得费解,但是它们确实为数据服务器提供了一系列更加流线化、更加高级、更加灵活的连通性选项。因此我撰写本文的目的就是帮助您更好地理解 DB2 9.5 中的选项。
名称变化
如前文所述,在名称和功能性方面,客户机连通性选项在前面几个 DB2 发行版中经历了一些变动。
在 DB2 8 中,可用的最小型的客户机称为 DB2 Run-Time Client。在 DB2 9 中,这种客户机被重命名为 DB2 Runtime Client(注意,客户机名称的说明性部分把 Run-Time 改成了 Runtime)。在 DB2 9.5 中,这个客户机的名称有一次发生了变化,现在称为 IBM Data Server Runtime Client(我将在后文中解释原因)。在本文中,如果我引用的是 DB2 Run-Time 客户机,那么我指的是客户机代码的 DB2 8 版本。如果我引用 DB2 Runtime Client,那么指的是客户机代码的 DB2 9 版本,类似地,我引用 IBM Data Server Runtime Client 时实际指的是客户机代码的 DB2 9.5 版本。我将在本文中对所有不同的客户机连通性组件使用这种命名规则。
另举一个例子,如果我提及 “IBM DB2 Driver for JDBC and SQLJ”,那么我指的是 DB2 9 附带的内容。如果我提及 “IBM Data Server Driver for JDBC and SQLJ”,那么我指的是 DB2 9.5 中相同的驱动程序(虽然它已进行了一些增强)。
为了便于理解,并且如果您在理解这些变化时感觉有一些困难,那么可以使用下面的表格,它总结了在过去几个发行版中 DB2 客户机连通性选项的命名变化:
图 1. DB2 客户机连通性选项在过去几个 DB2 发行版中的演变
DB2 8 中的客户机
在 DB2 Universal Database Version 8 (DB2 8) 中提供了三种可安装的客户机;分别是 DB2 Administration Server Client、DB2 Application Development Client 和 DB2 Run-Time Client。我不会详细研究每种客户机的各个组件,但是它们的名称可以精确地反映各自的功能和使用意图。
此外,对于轻量级 Java 部署来说,Java Common Client (JCC) 是一个大约 2 MB 的 .JAR 文件,因此可以将它部署到需要基于 SQL Java (SQLJ) 或 Java Database Connectivity (JDBC) 访问 DB2 数据服务器的应用程序。JCC 不需要进行安装或维护。只需将它作为应用程序的一部分包含,或者在系统配置中引用,在系统配置中,只需指定将代码中的一个连接字符串指向驱动程序即可。当使用诸如 JCC 这样的瘦驱动程序时,应该注意它仅仅用于连通性。例如,它不提供 DB2 命令行处理程序(DB2 CLP)或工具。最后,这个驱动程序还包含一个免版权费的重新发布许可(和其他所有轻量级驱动程序一样),允许您无需任何支出即可将 IBM 数据服务器连通性嵌入到应用程序内部。
虽然 DB2 8 连通性选项可以满足客户机的功能性需求,但是,如果您运行的不是 Java 程序,就要安装一个 DB2 Run-Time Client。根据其目标用途,这个 DB2 8 Run-Time Client 将占用比较大的内存资源。这会给移动用户带来一些棘手的部署问题。例如,一个移动员工尝试通过一个较慢的 Internet 连接下载数百兆字节的内容,仅仅是为了将应用程序连接到目标 DB2 数据服务器。而这甚至还没有考虑应用程序的大小。简单地说,对于连通性是惟一需求并且应用程序不是基于 Java 的灵活部署环境来说,并不适合使用 Run-Time Client。
DB2 8.2 发行版针对基于 Windows 的部署引入了 DB2 Run-Time Client Lite。DB2 Run-Time Client Lite 提供了一个基于 Windows 的安装程序;此外,一组 Windows Installer Merge Modules 可供使用,因此可以直接将这个客户机嵌入到应用程序中基于 Windows Installer 的安装程序。但是,这个客户机没有迁移支持,也不能和其他 DB2 客户机并存。
如其名称所示,DB2 Run-Time Client Lite 占用的内存资源要小于 DB2 Run-Time Client,因为它没有附带任何工具,只附带了通过受支持 API 访问数据所需的文件,这些受支持的 API 包括 .NET、JDBC、SQLJ、ODBC、CLI 和 OLE DB。
DB2 8.2 还引入了 db2iprune 命令。这个命令可以修改基于 Windows 的安装映像,使它不包含某些特性。这个实用实用程序有其必要性,因为即使您可以自定义安装一个 DB2 客户机,但是在某些参数发生变化时仍要访问完整的安装映像。例如,假设您正在部署一个 DB2 Application Development 客户机的自定义安装。此外,假设您对安装进行了自定义,不希望安装某些图形工具,但希望安装其他工具。例如,在 DB2 8.2 中,您可能希望安装 DB2 Development Center,而不是 DB2 Client Configuration Assistant (DB2 CCA)。使用自定义安装时您可以指定不安装 DB2 CCA。对于大规模的部署,您通常需要为软件发布软件提供一个响应文件,以便在一组目标工作站上远程安装 DB2 Application Development Client。这些目标工作站可以通过 PUSH(系统软件强制在目标工作站上安装)或 PULL(客户机连接到服务器并请求安装)方法实现安装。不管使用哪种方法,您都需要载入完整的安装映像,其中将包括 DB2 CCA,即使您提供给附带安装(accompanying installation)的响应文件并不希望安装这个组件。这样做是为了防止发生由于用户参数发生变化而破坏的安装。这将引起一些发布问题,因为您不必要地挂载了远远大于其目标应用的映像。简单地说,在执行安装时,安装映像必须是任何用户或响应文件可能安装的所有特性的超集。
用 db2iprune 能够修改安装映像以匹配给定的响应文件,这能使映像中只包含您希望安装的特定组件。即使您使用 DB2 图形化安装程序交互式地运行一个安装,并选择进行自定义安装,从安装映像中剔除的组件也不会再次出现。db2iprune 是一个非常优秀的工具,可以帮助缩减任何 DB2 安装映像的大小(并不仅限于 DB2 客户机。从 DB2 9.5 开始也限于 Windows)。但是在 DB2 客户机安装映像中仍然有一些占用空间的组件不能够通过 db2iprune 删除。这一主题将在以后的文章中探讨。
DB2 8 还支持对 DB2 客户机软件 DB2 Thin-Client 进行特殊安装。虽然该客户机通常并不被认为是主流客户机,但是在某些环境下可以满足您的需求。本文末尾的您听说过瘦客户机吗? 小节将介绍这种客户机。
DB2 9 中的客户机
DB2 9 简化了客户机家族并为 Open Database Connectivity (ODBC) 和 Call Level Interface (CLI) 应用程序添加了一个轻量级驱动程序。具体来讲,DB2 8.2 DB2 Administration Server Client 和 DB2 Application Development Client 合并为一个 DB2 Client。从 DB2 9 开始,需要应用程序开发特性、工具以及与简单的运行时连通性无关的任何内容,客户机都派得上用场。DB2 Runtime Client 保留了它的名称,但为了缩小体积减少了一些组件。如果对 DB2 8.2 的 B2 Run-Time Client Lite 非常熟悉,就完全可以用它适当地定制 DB2 9 的 DB2 Runtime 客户机。
例如,Configuration Assistant (CA) 工具可以图形化地将客户机连接配置到本地和远程数据服务器、可以配置 CLI 设置以及通过任何受支持的 API 测试数据服务器连接,等等。CA 在 DB2 8 中曾是 DB2 Run-Time Client 的一部分(那时称为 Client Configuration Assistant),但是在 DB2 8.2 中把它去掉了。这是为确保客户机名称可以反映其功能而做出的第一步。我认为这样做很有意义,因为运行时(runtime)这个名称表示获得的是一个简单的运行时环境。简单地说,从选项的角度来看,DB2 9 中的客户机结构有些类似于 Java 环境。如果只运行一个 Java 程序,至少需要一个 Java Runtime Environment (JRE)。JRE 通常很小并随 Java 应用程序一起安装。开发一个 Java 应用程序需要借助 Java Developer’s Kit (JDK), 以完全访问应用程序开发所需的丰富特性。
DB2 8.2 提供的 JCC 驱动程序在 DB2 9 中被重命名为 IBM DB2 Driver for JDBC and SQLJ。这个名称有点长,但更准确地反映了这个驱动程序的功能。更重要的是,引入了一种称为 IBM DB2 Driver for ODBC and CLI 的新瘦驱动程序。轻量级驱动程序部署价值主张以前只用于基于 Java 的应用程序,但这一举措将它扩展到使用 ODBC 或 CLI 接口连接远程 DB2 数据服务器的应用程序。
在 DB2 9 中,获得针对 Visual Studio 2005 的 IBM Database Add-ins 的惟一方式是通过基于 Windows 的 DB2 Client 或是服务器映像。
DB2 9.5 中的客户机
DB2 9.5 实现了客户机连通性的又一次演变。您将发现所有的客户机和驱动程序名称中都去掉了前缀 DB2,取代它的是 IBM Data Server。这样做的理由(这也是一个令人兴奋的变化)是从 DB2 9.5 开始,整个 IBM 数据服务器家族(具体指 DB2 for i5/OS、DB2 for z/OS、DB2 for Linux, UNIX, and Windows 和 Informix Dynamic Server [IDS])将使用同一个代码集。这是一次重大的创新,因为它大大减轻了使用多个 IBM 数据服务器家族成员的用户的部署负担。此外,集成的开发环境(IDE)插件也是很通用的,您可以对一组简单的数据访问 API 进行编写,并将应用程序连接到任何一个 IBM 数据服务器家族成员(需要 DB2 Connect 许可才能获取存储在 DB2 for i5/OS 或 DB2 for z/OS 数据服务器上的数据)。
除了降低部署成本以外,新的流线化的 DB2 9.5 客户机基础设施还降低了 IBM 解决方案的总体拥有成本,这是因为使用了通用的 IDE 集成和驱动程序。例如,假设您领导一个 Java 开发人员小组,并且您的企业运行的是 DB2 for z/OS、Informix for AIX 和 DB2 for Windows。从 DB2 9.5 开始,您可以在所有工作站中发布 IBM Data Server Driver for JDBC and SQLJ 并且所有这些工作站可以立即互相连接。此外,可以利用 IBM Data Studio 构建业务逻辑,甚至可以在前面提到的任何一个 IBM 数据服务器中通过单击鼠标来构建 Web 服务。这一切要归功于一组通用的驱动程序、工具集、通用的 SQL API(用于 DB2 数据服务器)、通用的 Web Services 框架、通用的连通性代码等等。这样的例子举不胜数,只是不在本文的范围之内。可以说,DB2 9.5 中的新客户机架构允许 IT 编程人员和部署人员在不同位置之间移动,为 CIO 提供更加灵活的人员安排。一些研究表明,70% 的 IT 预算都与人员成本有关,而只有 30% 与硬件和软件有关,考虑到这一点,您就会发现任何解决方案都会涉及大量的劳动力成本。而 DB2 9.5 中新的客户机基础结构对于降低 IBM 数据服务器解决方案涉及的人员成本起了非常重要的作用。
DB2 9.5 还引入了一种新的瘦驱动程序,称为 IBM Data Server Driver for ODBC, CLI, and .NET。它只能用于 Windows 并专门针对 Windows 客户机设计。它允许实现更轻量级的部署,使基于 Windows 的客户机能够将 .NET 应用程序连接到 DB2 数据服务器。在 DB2 9 中,IBM Data Server Driver for ODBC and CLI 并不支持 .NET 应用程序。因此编写 .NET 应用程序需要部署更大型的 DB2 Runtime Client。新引入的 IBM Data Server Driver for ODBC, CLI, and .NET 可以占用最少的内存实现轻松部署 .NET 应用程序的连通性。可以把它看作是以前在 DB2 9 中使用的 IBM DB2 Driver for ODBC and CLI 的扩展(但在 DB2 9.5 中重新命名)。如果您要连接一个基于 Linux 或基于 UNIX 的客户机,并需要一个瘦驱动程序,那么可以使用 IBM Data Server Driver for ODBC and CLI,因为您显然不会在这些工作站中运行 .NET 应用程序。
|
选择合适的 DB2 9.5 客户机连通性选项
如前所述,DB2 9.5 附带了很多客户机和驱动程序连通性选项。根据您的使用目的选择更适合自己的选项。图 2 展示了我在决定为连通性需求部署哪些 DB2 客户机和驱动程序时使用的决策表,其中考虑到了客户谈到的最常见因素:
图 2. DB2 9.5 客户机连通性选项的选择技巧
IBM Data Server Client
IBM Data Server Client 是可用于 IBM 数据服务器的完整安装的客户机。在 DB2 9.5 中,它充分支持所有受支持的 API。例如,它为 Ruby 提供了驱动程序。在 DB2 9 中,需要通过后安装(post-installation)下载和配置步骤来添加 Ruby 支持。这个客户机还提供了完整的图形化工具。例如,如果安装一个 IBM Data Server Client,您可以获得 Configuration Assistant、IBM Add-ins for Visual Studio、语言支持,等等。
如果您计划使用这个客户机在一个后端 IDS 数据服务器中支持 OLE DB 应用程序,则需注意这个接口不支持这种使用。但是可以使用这个客户机提供的 ODBC 支持弥补这类场景中的缺陷。
简单来讲,如果某个选项可以用于一个 DB2 客户机,那么它就是可用的。DB2 Client 是与 DB2 连通性有关的所有内容的超集。如上图所示,如果需要任何工具支持,则必须安装这种客户机。
IBM Data Server Client 约为 330 MB。您可以使用前面提到的 db2iprune 实用程序自定义这个客户机把它缩减到大约 200 MB。我将在以后的文章中展示如何进一步把它缩小。
IBM Data Server Runtime Client
IBM Data Server Runtime Client 是轻量级客户机部署的最佳选择。它要比它的 DB2 9 伙伴小一些,并且现在和 IBM Data Server Client 一样提供了 IDS 支持。这个客户机没带有任何工具 — 如前所述,它是由 DB2 8 里前身改变而来(从 DB2 8.2 Run-Time 客户机中删除了 CCA。它不再是 DB2 9 Runtime Client 的一部分)。如果您希望使用 Configuration Assistant 来图形化配置 DB2 9.5 中的连接,则无法在此找到这个工具。然而,这个客户机却包含了 DB2 CLP。这个客户机包含了所有 DB2 接口,例如,Ruby 驱动程序、.NET 驱动程序等等。和 IBM Data Server Client 一样,这个客户机并不支持与IDS数据服务器建立OLE DB连接。IBM Data Server Runtime 客户机在安装后大约占 60-70 MB 的磁盘空间。
如果您的内存需求非常紧迫,则不适合使用这种占用空间较大的客户机,但是它提供了针对任何应用程序连通性场景的充分支持。如果您支持使用各种编程语言构建的应用程序,并且不需要任何工具,那么这种客户机是最佳选择。如果支持像 Ruby on Rails 这样的开源应用程序并且不需要工具,该客户机则是惟一的选择,因为驱动程序不会为 Ruby、PHP 这样的开源 API 包含预编译的二进制文件。
IBM Data Server Driver for JDBC and SQLJ
这个驱动程序与 DB2 9 中的驱动程序非常相似,但是进行了一些技术增强和修复(在 pureQuery 环境中也会用到这个驱动程序)。和所有 IBM 数据服务器连通性选项一样,这个驱动程序也支持 IDS 数据服务器。它通过 db2jcc.jar 的单一包的方式交付(如果需要将它连接到 DB2 for i5/OS 或 DB2 for z/OS 数据服务器,则需要一个有效的 DB2 Connect 许可),并且按照 JDBC 3.0 规范进行交付。DB2 9.5 还通过一个称为 db2jcc4.jar 的包支持 JDBC 4.0 规范。
如果您需要对基于 Java 的应用程序使用一个轻量级的、免版权费的可重新发布的驱动程序,并且不需要任何工具,那么这是最佳选择,因为它支持诸如连接集中(connection concentration)、客户机自动重路由等高级特性。由于只占用大约 2MB 的空间,我将驱动程序使用的空间称为一个指纹(fingerprint)。这个驱动程序的使用有多么普遍呢?每分钟有数十亿美元的资金依靠它运作(或者其早先的版本)。
IBM Data Server Driver for ODBC, CLI, and .NET(只针对 Windows)
这个驱动程序按照 DB2 9 的方式交付,除了新添加的 .NET 支持外,还包括针对 ODBC 和 CLI 接口的支持。这是一个非常适合 .NET 应用程序的部署选项,因为您不再需要仅仅为了向 .NET 应用程序提供连通性而使用大量的内存。此外,添加了针对 Ruby、Perl 和 PHP 这类接口的二进制版本,因此无需亲自编译(尽管驱动程序的名称中没有提到),这大大降低了这些应用程序的部署时间(以及部署工作)。
IBM Data Server Driver for ODBC, CLI, and .NET 还提供了一些非常不错的 Windows 增强。例如,附带了一个安装包装器,可以显著增强在 Windows 上的部署特性。
这个驱动程序还提供了一组合并模块,比如 DB2 Runtime Client。我推荐使用这些合并模块进行安装,因为不论是谁开发您的应用程序的安装范例,它都非常适合。如果您不需要 CLP 或其他任何工具,我推荐使用这个驱动程序,因为它不会产生任何实例管理负担。
现在,您应该非常清楚何时适合使用这个驱动程序。然而,需要注意一点,这个驱动程序并不包含对 OLE DB 的支持。我想我需要特别指出这点,应该通常情况下 ODBC 和 OLE DB 支持是互相关联的。如果需要支持一个 OLE DB 应用程序,则至少要安装一个 DB2 Run-Time Client。
注意 :尽管名称有些不符,从 IDS 的角度来看,这个驱动程序只交付面向 .NET、PHP、Perl 和 Ruby 编程接口的支持(它建议客户机继续使用 Informix SDK for C/C++ 应用程序)。这个驱动程序附带了一个免版权费的发布许可。
|
DB2 9.5 的新的 .NET 部署选项远远超越了为应用程序提供运行时环境这一功能。如果您希望部署最轻量级的 .NET 开发环境,您可以下载独立的 IBM Add-ins for Visual Studio(大约 30 MB)和这个驱动程序(大约 10 MB),您将获得一个专门为 .NET 集成了 IBM 数据服务器开发环境的 Visual Studio。记住,如果使用这个方法,IBM Add-ins for Visual Studio 和 IBM Data Server Driver for ODBC, CLI, and .NET必须位于相同的代码级别。例如,如果您计划支持 Visual Studio 2008 IDE,则必须在 Fix Pack 1 级别安装这些组件。如果 Fix Pack 2 对任一个这些组件进行了功能性修改,那么必须确保所有这些组件都处于 Fix Pack 2 级别。
IBM Data Server Driver for ODBC and CLI
这个驱动程序实际上提供了与 IBM Data Server Driver for ODBC, CLI, and .NET 相同的功能、特性和优点,惟一的不同是它绝对不支持 .NET 或提供以 Windows 为中心的部署增强。如果需要支持前面小节中描述的相同场景,那么可以使用这个驱动程序,但是注意不能将它用于 .NET 应用程序。这个驱动程序可从 DB2 9 获得,它还附带了免版权费用的发布许可。
IBM Data Server Add-ins for Visual Studio
IBM Data server Add-ins for Visual Studio 在过去只是为了获得一般可用性而作为基于 Windows 的 DB2 Client 或服务器映像附带(换言之,我在这里不会介绍技术内容)。在 DB2 9 中,这个插件以前被称为 IBM Database Add-ins for Visual Studio 2005。在 DB2 9.5 中,它被重命名以反映可用于 Visual Studio 2005 或 Visual Studio 2008 的插件,因此从插件名称中去掉了版本信息。
在 DB2 9.5 中,虽然 DB2 Client 和服务器映像仍然附带了这个插件,但是现在它可以作为独立下载的映像使用,大概有 30 MB 的大小。
|
您听说过瘦客户机吗?
在 DB2 for Windows 环境中,您可以在工作站中安装一个 IBM Data Server Client 或 DB2 Connect PE,并且使用这些工作站充当企业的 DB2 Thin-Client 或 DB2 Thin-Connect 工作站的代码服务器。
注意 :在讨论这种架构时,我使用 “瘦客户机(Thin-Client)” 这一术语表示一个 DB2 Thin-Client 或一个 DB2 Thin-Connect 工作站。我发现现在瘦(thin)这个词有点被滥用,因为人们经常使用它表示我在本文提到的那些驱动程序。而实际上不应该这样做,我只在讨论驱动程序时使用 driver 这个词,而在讨论这种架构时使用瘦客户机 这个词。
瘦工作站(Thin workstation)可以跨越网络连接从它们各自的代码服务器中加载客户机连通性代码(包括 DB2 Connect PE)。瘦工作站的功能与其他任何客户机类似。架构对于用户是透明的。主要区别是它的代码安装在一个代码服务器上,而不是安装在单独的工作站中。在这种架构中,代码服务器中不会执行任何处理,而只是从其中加载客户机连通性代码。每个瘦工作站只需少量的代码和配置就可以链接到代码服务器。这一点与本地安装的 IBM Data Server Client 或 an IBM Data Server Runtime Client 架构截然不同,后者有时被称为胖客户机(Fat-client)架构。
要在 DB2 for Windows 工作站上安装瘦客户机,需要使用 IBM Data Server Client(显然,需要使用 DB2 Connect PE 映像作为瘦客户机的配置)。完成一些初始 配置 后,这个机器就变成了 DB2 瘦客户机代码服务器。
图 3 展示了一个典型的 DB2 瘦客户机和 DB2 Thin-Connect 环境。红色的箭头表示从相应的代码服务器中加载到 DB2 瘦客户机上的代码。黄色的箭头表示到数据库的连接(或者也可表示一个 DB2 Connect 网关,它将生成到目标数据库的连接)。加载完代码后,所以处理和操作都将在 DB2 瘦客户机或 DB2 Thin-Connect 工作站中本地执行。
图 3. 瘦客户机配置
对这些内容的详细讨论超出了本文的范围。但是,“Installing DB2 Products Across Your Enterprise”(developerWorks,2002 年 2 月)这篇文章讨论了这一选项。当然,在撰写这篇文章的时候客户机名称已经发生了变化。如果您使用这种类型的环境,并且希望这些瘦客户机或工作站能够从各自的代码服务器加载客户机连通性代码,那么需要注意必须始终实现共享。