内容


DB2 Express-C:数据库开发者的免费利器

为什么要使用 DB2 Express-C?

DB2 Express-C 基于与 DB2 Universal Database™(UDB) Express Edition V8.2.2 产品一样的核心技术。Linux® 和 Windows® 平台(32 位和 64 位)上的 DB2 Express-C 可以从 IBM 免费 下载。IBM 在 2006 年 1 月 1 日推出了 DB2 Express-C,这是 DB2 Universal Database Express Edition(DB2 Express)的一个版本。它为 C/C++、Java、.NET、PHP 等应用程序的构建和部署提供了一个稳定的数据库环境。

IBM Cloudscape™ 和 Express-C 都可以从 IBM 免费获得,它们都可以用于开发和部署应用程序。因为这两种数据库服务器都基于开放标准,比如 SQL 和 JDBC,所以很容易在它们之间迁移 Java 应用程序和数据库。如果您目前正在使用 Cloudscape 或 Apache Derby,那么可以考虑使用免费的实用程序 Cloudscape Workbench 将数据库迁移到 DB2,并尝试一下新的 DB2 Express-C。虽然与 Cloudscape 相比,DB2 Express-C 的下载包和磁盘占用更大,但是 DB2 提供了更多的工具。它还提供更多的特性,比如全面支持 .NET 应用程序,而且适合 PHP 应用程序。DB2 Express-C 最多可以利用两个 CPU 和 4GB 内存,数据库的规模也不受限制。DB2 可以让一个数据库跨许多磁盘,从而改进可伸缩性和性能。

DB2 Express-C 是一种产品化的数据库服务器,它秉承了 Linux 和 Windows 上持续改进的 DB2 产品的创新技术。自 1995 年起已经可以在 Windows 上使用 DB2,Linux 版本是从 1999 年开始的。如果对 DB2 的历史感兴趣,建议阅读文章 “总览图: IBM DB2 通用数据库和信息管理”(developerWorks,2003 年 1 月)。

您可能会问,“如果数据库服务器需要超过 4GB 的内存和两个以上的 CPU 来支持我的应用程序,那么该怎么办?” 在这种情况下,可以很容易地迁移到 Linux、Windows 或 UNIX® 上的 UDB Enterprise Server Edition(ESE)。DB2 ESE 是一种可靠的大规模数据服务平台,能够支持 TB 级数据量。DB2 ESE 可以可选地添加数据分区功能(Database Partitioning Feature,DPF),从而执行并行数据库操作。从 DB2 Express-C 迁移到其他 DB2 版本是很容易的,因为它们的核心数据库引擎是相同的。

随着 DB2 Express-C 的推出,IBM 还推出了一个新的交互式 论坛,来自 IBM 的 DB2 专家会在这里帮助大家。如果您对这个新的免费数据服务器有什么疑问的话,可以在这里寻求解答。DB2 Express-C 有一套完整的 PDF 格式的手册,还可以在全面的可搜索 Web 站点 DB2 Information Center 上获得这些信息。DB2 Information Center 会不断更新,您还可以下载 DB2 Information Center 的最新版本并将它安装在专用的服务器上,或者获得所有 DB2 UDB 产品手册。注意,DB2 Information Center 是 Linux、UNIX 和 Windows 上所有 DB2 UDB 版本通用的,所以要认识到某些高级特性,比如 Database Partitioning Feature(DPF),不能应用于 DB2 Express-C 环境。

如果打算在 Linux 上使用 DB2 Express-C,那么最好实现检查经过测试的最新的 Linux 发行版。关于 DB2 Linux 版的另一个参考资料是 DB2 Universal Database Version 8.2 for Linux HOWTO。(参见 “参考资料”。)

设置和运行

安装 DB2 Express-C

DB2 Express-C 的最小内存需求是 256MB(不带图形化工具)或 512MB(带图形化工具)。本文使用的机器具有超过 2GB 的内存。对于本文,我下载了 DB2 Express-C for Windows(32位)。这个下载包有 391MB,安装非常简单。将 zip 文件解压之后(在我的系统上解压后的目录并没有大多少,只有 412MB),执行可执行文件 setup。这会启动 DB2 Express Launchpad,如 图 1 所示。这个图形化安装程序询问的问题只有安装 DB2 Express-C 的位置以及 DB2 Administration Server 的用户 id 和密码。我执行的是 typical 安装,这包括开发工具和库。整个安装过程花费的时间小于四分钟。

图 1. DB2 Express-C Launchpad
DB2 Express Launchpad
DB2 Express Launchpad

在安装之后,显示一个 First steps 窗口(见 图 2)。现在您可以开始创建第一个 DB2 数据库。DB2 Express-C 提供了一个示例数据库,名称为 SAMPLE。我们将使用 DB2 Express-C 提供的一些工具针对生产环境的级别配置 SAMPLE 数据库,并解决当表增长到一百万行数据时出现的一个性能问题。

图 2. DB2 First steps
DB2 First steps
DB2 First steps

工具

DB2 Express-C 是一个维护成本很低的数据库服务器。它附带一组完整的图形化工具和命令行工具,帮助数据库管理员(DBA)进行管理。最常用的图形化工具是 DB2 Control Center,最常用的命令行工具是 DB2 CLP(Command Line Processor)。这些工具的名称很一般,但是它们的背后有许多先进的特性。

DB2 Express-C 提供的图形化工具可以分成几类,如 图 3 所示。可以在 General Administration Tools 类别中找到 DB2 Control Center。大多数其他图形化工具可以从 DB2 Control Center 中访问。

图 3. DB2 工具
DB2 工具

DB2 Control Center(如 图 4 所示)向 DBA 提供数据库的操作状态。在这个示例中,SAMPLE 数据库的大小是 25MB,还没有备份。还没有配置自动维护。

图 4. DB2 Control Center - 自动化之前的 SAMPLE 数据库
DB2 工具
DB2 工具

可以使用 DB2 图形化工具向导快速学习如何对 DB2 执行常见的管理任务。对于 DB2 Control Center 中的每个对象,可以通过在对象上右击 进行操作。有许多向导(如 图 5 所示)可以帮助 DB2 DBA 执行常见的任务,比如创建备份数据库映像和恢复以前的映像。

图 5. DB2 工具向导
DB2 工具向导
DB2 工具向导

图 6 中,可以看到 SAMPLE 数据库已经增长到 537MB。这个数据库已经配置了自动备份和维护。DB2 Express-C 识别出了一个警告状况,如 图 6 所示。我们现在研究这个状况并快速解决它。

图 6. DB2 Control Center - 自动化之后的 SAMPLE 数据库
自动化之后的 DB2 Control Center
自动化之后的 DB2 Control Center

DB2 的一个独特特性是它能够动态地监视环境,并将异常情况通知 DBA,DBA 应该及时解决这些问题,从而实现理想的环境。在 图 7 中,DB2 探测到 SAMPLE 数据库每小时的锁数量大量增加。DB2 使用数据库对象上的锁来确保事务的一致性。在这个示例中,DB2 在一小时中增加了 1150 个锁。利用分配给 DB2 服务器的内存,DB2 无法维护大量的行锁。通过增加用于锁管理的 DB2 服务器内存,就很容易解决这个问题。纠正措施可以由 DBA 执行,也可以自动执行。从 DB2 Express-C 到更大规模的 DB2 Enterprise Server Edition(ESE)环境都可以利用这种 DB2 状态监视功能。DB2 Express-C 总是为应用程序维护事务的一致性。对每个事务进行日志记录,从而确保数据库中数据的完整性。

图 7. DB2 Health Center - 锁增加
DB2 Health Center
DB2 Health Center

分析场景

数据库应用程序的性能直接影响顾客对解决方案的满意度,实现优化的性能被认为是艺术和科学的结合。DB2 Express-C 提供了非常优秀的工具(包括图形化工具和非图形化工具)来帮助您实现高性能和可靠的应用程序。在这个场景中,我们尝试判断公司中工资最高的部门。为了实现优化的性能,我们将使用 DB2 Express-C 提供的一些工具。

这个场景中使用的工具包括:

  • db2batch
  • Visual Explain
  • Design Advisor
  • Activity Monitor

db2batch 实用程序是对查询的运行时性能进行分析的好工具。在这个场景中,使用以下 SQL 语句执行分析:

SELECT DECIMAL(AVG(salary),12,2) as average_sal, location, deptname 
FROM staff a, org b 
WHERE b.deptnumb=a.dept 
GROUP BY dept,location, deptname 
ORDER BY average_sal DESC

STAFF 表已经增长到一百万条记录以上,因此这个查询花费的时间比以前长了。在 图 8 中显示,这个查询的执行时间是 18 秒(纽约总部办公室是工资最高的部门 —— 这并不意外)。

图 8. db2batch - 查询执行
db2batch - 查询执行
db2batch - 查询执行

图 9 显示,在 STAFF 表上会执行昂贵的表扫描,然后根据来自 ORG 和 STAFF 表的数据执行 Hash Join 操作。这些表上没有在执行查询期间 DB2 可用的索引。我们将使用 DB2 Design Advisor,让 DB2 在 ORG 或 STAFF 表上创建适当的新索引,从而改进这个查询的性能。

图 9. Visual explain - 查询分析
Visual explain - 查询分析
Visual explain - 查询分析

图 10 显示来自 DB2 Design Advisor 的反馈。它建议使用 DEPT 和 SALARY 列在 STAFF 表上创建一个索引。Design Advisor 的查询工作负载可以在一个文件中提供,也可以在应用程序执行期间捕获。

图 10. DB2 Design Advisor - 索引建议
DB2 Design Advisor - 索引建议
DB2 Design Advisor - 索引建议

图 11 显示这个索引确实对这个查询的执行有好处。它显示查询的执行时间得到了显著改进,现在只花费了 7 秒

图 11. db2batch - 查询执行的改进
db2batch2 - 查询执行的改进
db2batch2 - 查询执行的改进

图 12 确认查询的访问计划中使用了 STAFF 表上的新索引。执行查询的估计开销也显著降低了。

图 12. Visual explain - 查询计划的改变
Visual explain - 查询计划的改变
Visual explain - 查询计划的改变

最后,我们希望判断在这个查询执行期间使用的系统资源总量。DB2 UDB V8.2 中增加了一个新工具,称为 Activity Monitor。它使用各种 SQL 函数和过程获得性能数据,对系统进行分析。在 图 13 中看到,查询执行了两个排序,花费的时间少于 12 秒。Activity Monitor 还提供许多其他报告,可以用来分析 DB2 Express-C 环境。

图 13. Activity Monitor - 运行时分析
Activity Monitor - 运行时分析
Activity Monitor - 运行时分析

开发人员、开发人员、开发人员

DB2 Express-C 的典型安装提供了开发 C/C++、Java 和 .NET 应用程序所需的驱动程序和接口。如果想为 DB2 开发 PHP 或 Perl 应用程序,也有 PHP 和 Perl 驱动程序可用。这些 PHP 和 Perl 接口由 DB2 团队中的工程师开发和维护。DB2 支持许多种数据库服务器端编程语言,包括存储过程、触发器和函数(表函数和标量函数)。可以使用 C/C++、COBOL、Java(JDBC 或 SQLJ)、.NET(CLR 兼容语言)和 SQL Procedure Language(SQL PL)编写 DB2 存储过程。存储过程语言由开发人员自己选择;但是,最常用的语言是 Java 和 SQL PL。

SQL Procedure Language(SQL PL) 存储过程被认为是本机的,因为它们作为对象存储在 Linux 和 Windows 上的 DB2 数据库中。SQL PL 已经发展成惟一的基于 ANSI SQL 标准的存储过程语言。Linux、UNIX、Windows、iSeries 和 z/OS 上的所有 DB2 数据库服务器都支持 SQL PL。DB2 Express-C 提供了一个非常有用的图形化工具 Development Center,它用于管理 SQL 存储过程的开发、测试和部署,包括 Java 和 SQL PL 过程。在 图 14 中,使用 DB2 Development Center 来构建、测试和部署 SQL PL 过程。这里显示的过程称为 high_rollers,它将在 DB2 Express-C 中存储并执行。因为可以在 DB2 中严密地控制存储过程的执行,所以它提供了一种控制用户对 DB2 进行访问的简便技术。

图 14. Development Center - SQL PL
Development Center - SQL PL
Development Center - SQL PL

Java

为 DB2 开发 Java 应用程序是很容易的,因为每个 DB2 客户机和服务器都提供了兼容 JDBC 3 的(类型 4)驱动程序。实际上,DB2 当前包含两种不同的 JDBC 驱动程序。根据体系结构的不同,原来的驱动程序(db2java.zip)有时候称为 Application(类型 2)和 Network(类型 3)驱动程序。更灵活的新 JDBC 驱动程序(db2jcc.jar)可以用于类型 2 或类型 4 模式,而且最新的 Java 客户机/服务器工业基准测试中已经使用了它,比如针对 DB2 和 WebSphere® Application Server 的 SPECjAppServer 2004(参见 “参考资料”)。DB2 的 JDBC 驱动程序(db2jcc.jar)绑定在 DB2 Run-time 客户机中。如果应用程序是纯 Java 的,那么可以将 db2jcc_license_cu.jardb2jcc.jar 放进 CLASSPATH 中。这些文件位于 <DB2 Installation location>\SQLLIB\java 目录。Java 2 Platform Enterprise Edition(J2EE)服务器(比如 IBM WebSphere Application Server)以及 DB2 数据服务器,提供了一种任务关键的分布式应用程序体系结构,可以支持可伸缩的应用程序。

PHP

PHP(“PHP: Hypertext Preprocessor” 的缩写)是一种被广泛使用的开放源码的通用脚本编程语言,尤其适合进行 Web 开发并可以嵌入 HTML 中。PHP 已经被广泛地用来开发可伸缩 Web 应用程序。DB2 对 PHP 开发人员的支持近来得到了增强,增加了由 IBM 支持的 DB2 PHP 本机扩展(参见 “参考资料”)。PHP 是一种开放源码的脚本编程语言,这推动了数百万 Web 应用程序的开发,而且自 1995 年问世以来 PHP 一直在发展。DB2 PHP 扩展也是开放源码的。如果希望在 Windows 上使用这个扩展,又不愿意对代码进行编译,那么也可以找到必要的 Windows 库(参见 “参考资料”)。

要设置 DB2 环境并运行 PHP,最容易的办法是下载 IBM 和 Zend Technologies 开发的免费的 Zend Core™ for IBM。Zend Core for IBM 是一个 PHP 开发和生产环境,它与 DB2(IBM Cloudscape 数据库服务器)紧密地集成。它为快速开发和部署数据库驱动的应用程序提供了基础。如果需要受到全面支持的 Web 技术组合(包括 PHP 支持和 DB2 支持),也可以从 Zend Technologies 获得 Zend Core for IBM 的支持选项。Zend Core for IBM 内嵌了 Cloudscape 数据库服务器和 DB2 Express 的免费版本,这简化了部署工作。如果以后决定购买完整的 DB2 Express Edition 许可证,也可以获得对绑定的 DB2 Express 产品的支持。在 图 15 中,Zend Core for IBM 管理 Web 控制台显示已经正确地配置了 DB2 PHP 本机扩展。

图 15. Zend Core for IBM
Zend Core for IBM
Zend Core for IBM

.NET

DB2 Express-C 提供了一个 DB2 .NET 1.1 Data Provider 和一组用于 Microsoft Visual Studio .NET 2003 的插件。Visual Studio 中的 IBM explorer 和集成的 DB2 帮助如 图 16 所示。在安装 DB2 Express-C 时,它会检查 Visual Studio .NET 2003 是否存在;如果存在,就将 DB2 特有的功能添加到 Visual Studio 中。这些插件可以减少 .NET 应用程序的开发时间。随着 DB2 UDB v8.2 的发布,增加了 .NET(CLR,Common Language Runtime)存储过程支持。

图 16. 用于 Visual Studio .NET 2003 的 DB2 插件
用于 Visual Studio .NET 2003 的 DB2 插件
用于 Visual Studio .NET 2003 的 DB2 插件

还可以下载免费的用于 Visual Studio 2005 的 DB2 插件 - 开发人员版。这个开发人员版包括一个 DB2 .NET 2.0 Data Provider 和一组用于新发布的 Microsoft Visual Studio 2005 IDE 的插件。

C/C++ 等等

DB2 Express-C 为数据访问提供了两个主要的 C API —— DB2 CLI 和 Embedded SQL。当今最常用的 C/C++ API 是 DB2 Call Level Interface(CLI),它基于 X/Open CLI 标准。这个 API 与许多 Windows 应用程序中使用的 Microsoft ODBC(Open Database Connectivity)API 相似。用于 DB2 数据访问的 Embedded SQL 方式需要使用应用程序预处理器,将所有 SQL 引用转换为 DB2 服务器的本机访问接口。如果在应用程序开发期间 SQL 语句已经定义好了,那么 Embedded SQL 的效果非常好,因为 SQL 是可以检验的,可以在开发期间创建和锁定访问计划,这会改进应用程序性能。但是,SQL 语句常常是动态的,在这种情况下,DB2 CLI API 这样的动态 SQL 访问技术更合适。

DB2 Express-C 为开发人员提供了许多其他选择,包括 COBOL、Perl 和 Python。Perl 驱动程序可以从开放源码 Perl 社区获得,它们由 IBM 维护和支持。SourceForge.net 提供了一个更新的 DB2 Python 驱动程序(参见 “参考资料”)。Perl、PHP 和 Python 驱动程序都需要有效的 DB2 Run-time 客户机(用于部署)和 DB2 Application Development Client(或完整的 DB2 Express-C)安装(用于对应用程序进行编译和构建)。

部署指导

部署数据库应用程序需要注意一些事项,包括:

  1. 安装 DB2 服务器
  2. 安装 DB2 客户机
  3. 部署应用程序本身
  4. 部署数据库

安装 DB2 服务器环境可以使用 DB2 图形化安装程序(Linux 上的 db2setup / Windows 上的 setup)来完成,也可以使用响应文件(Linux 上的 db2setup -R / Windows 上的 setup /U <file-name>)执行自动安装。

DB2 Run-Time Client 提供了直接访问 Linux、UNIX 或 Windows 上的 DB2 所需的所有应用程序编程接口(API)和网络客户机驱动程序。在 Windows 上还有一种更简洁的客户机,称为 DB2 Run-Time Client Lite,它的内存占用更小。DB2 Run-Time Client Lite 还提供 Merge Modules,其他基于 Windows Installer 的安装可以使用 Merge Modules 将连接 DB2 的功能轻松地嵌入 Windows 应用程序中。

部署应用程序超出了本文的范围,但是需要确保应用程序具有所需的 DB2 客户机访问库。部署数据库本身可以使用 DB2 备份映像来完成,或者数据库可以从数据摘要重新构造成加载文件。要确保应用程序依赖的任何对象(比如存储过程、触发器、视图和用户定义函数)被正确地定义并可访问。

操作指导

DB2 Express-C 采用的核心数据库服务器技术与 Linux、UNIX 和 Windows 上的所有 DB2 服务器是一样的,而且 DB2 UDB V8.1 和 V8.2 中引入的许多特性大大简化了 DBA 监视、调整和管理 DB2 服务器操作的任务。DB2 DBA(数据库管理员)往往要管理非常大的 DB2 系统或者分散在大型组织中的许多 DB2 服务器。DB2 Express-C 中的自我管理和自我调整功能可以帮助管理大型企业 DB2 部署,所以使用 DB2 Express-C 数据库服务器时,只需要基本的 DB2 DBA 技能就能够维持很高的应用程序可用性。

关于 Cloudscape

Cloudscape 是一个纯 Java 数据库服务器,很适合作为 Java 应用程序或中小规模 Web 应用程序的嵌入式数据库引擎。Cloudscape V10 是最初由 IBM 于 2004 年发布的免费数据库服务器。同时,启动了使用相同代码基础的 Apache Derby Project,作为 Apache Software Foundation 中的孵化项目。(关于 Apache Derby Project 的更多信息,请参见 “参考资料”)。Cloudscape V10.1 于 2005 年 8 月发布了更新。在新的 Cloudscape 10.1 发布之前,Apache Software Foundation 中的 Derby Project 结束了孵化阶段,现在已经是顶级 Apache DB 项目的一部分。有大量活跃的开发人员和用户参与 Derby Project,许多顾客、研究人员和业务伙伴正在使用这种数据库服务器。Cloudscape V10.1 采用 Derby 10.1 代码基并增加了一些安装程序、驱动程序和工具。IBM 为 Cloudscape V10.1 顾客提供支持。

为合作伙伴提供的参考资料

IBM 虚拟创新中心(如 图 17 所示)专门为 ISV(Independent Software Vendor,独立软件厂商)和其他业务伙伴提供应用程序开发帮助。如果计划在自己的解决方案中采用 DB2 Express Edition V8.2.2,那么应该考虑注册并利用这个程序提供的参考资料。

图 17. IBM 虚拟创新中心 - DB2 Express
IBM 虚拟创新中心 - DB2 Express
IBM 虚拟创新中心 - DB2 Express

结束语

DB2 Express-C 是一种令人兴奋的新型数据服务器,具有独特的特性。请下载免费的 DB2 Express-C,加入不断增长的 DB2 用户社区。


相关主题

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=161504
ArticleTitle=DB2 Express-C:数据库开发者的免费利器
publish-date=02092006