IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

developerWorks 图书频道: DB2 V9/9.5 高级应用开发,第 1 章

DB2 及应用开发基础

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

管松, 内容管理产品(Content Manager)开发经理, IBM
肖振春, 高级软件工程师, IBM
张建伟, 高级软件工程师, IBM
林光国, 高级软件工程师, IBM
王东明, 高级软件工程师, IBM
闫庆宏, 软件工程师, IBM
李尚强, 高级软件工程师, IBM
王庆法, 高级软件工程师, IBM

2009 年 5 月 11 日

本书详尽地为大家介绍了一系列 DB2 应用开发的方法及丰富的实例。从嵌入式 SQL 应用开发、各种 DB2 调用式接口的应用模式、DB2 服务端的应用开发、XML 层次型数据的应用,至 DB2 性能分析及调整,深入浅出,见解精辟。无论是用于教学还是对于从事 DB2 应用开发的专业人士,本书均是一本不可或缺的工具书。
在此我们推出了本书的 前言、第 1 章和第 4 章供大家在线浏览。更多推荐书籍请访问 developerWorks 图书频道

 图书信息 书名:DB2 V9/9.5 高级应用开发
作者:管松 主编,肖振春 张建伟 林光国 王东明 等编著
出版日期:2009 年 1 月
ISBN:978-7-121-07421-9
购买: 中国互动出版网当当网卓越网

推荐章节:

更多推荐书籍,请访问 developerWorks 图书频道

欢迎您对本书提出宝贵的反馈意见。您可以通过本页面最下方的 建议 栏目为本文打分,并反馈您的建议和意见。

如果您对 developerWorks 图书频道有什么好的建议,欢迎您将建议发给我们

1.1  DB2 简介

在本节中,我们将以 DB2 版本的近期发展历史为主线进行相关的介绍。

1.1.1  DB2 V7

从 DB2 V7 开始,IBM DB2 针对不同的用户,提供了多种级别的产品,如图 1.1 所示。


图 1.1 DB2 V7 各级别产品
DB2 V7 各级别产品

1 .企业版(Enterprise Edition)

该版本通常用于支持大规模的企业级应用程序及大型企业级数据仓库,它提供了最大程度的连接性,并且可以与异构平台上的 DB2 数据库和第三方厂商的数据库产品共享数据资源。

2 .企业扩展版(Enterprise Extended Edition)

该版本通常用于支持超大规模的数据库应用程序,如大型的数据仓库。它通过采用分区内和分区间并行技术,可以使数据库大小达到几个 TB 。此版本可以利用群集技术和大规模并行处理技术提高系统的处理能力和稳定性。

3 .工作组版(Workgroup Edition)

该版本通常用于支持部门级应用程序或者不需要存取驻留在 OS/400、VM/VSE 和 OS/390 平台上的远程数据库的应用程序。

4 .个人版(Personal Edition)

该版本通常被单机用户选用,功能完备但不能响应远程的数据库请求,并且只能运行在 Linux 和 Windows 操作系统上。

5 .卫星版(Satellite Edition)

该版本是专门为移动计算环境设计的,允许移动用户通过个人数字助理(PDA)和掌上电脑等手持设备存取企业中的 DB2 数据源。 DB2 Everyplace 可以执行包括 Palm OS、Linux、Windows CE、Neutrino、PocketPC 和 Symbian 在内的多种操作系统。

1.1.2  DB2 V8

IBM DB2 通用数据库 V8,作为更开放、更智能、更全面的信息管理解决方案,使得数据库管理的技术要求最小化,操作更加简单。

1 .更开放

DB2 V8 作为面向下一代电子商务的关系型数据库,具备高可靠性、高性能及高扩展性,支持 Linux、Windows、AIX、Solaris、HP-UX、OS/400、OS/390 及 Z/OS 等所有主流操作系统,成为电子商务、商业智能、内容管理、企业资源规划和客户关系管理等关键解决方案开发和应用的必然选择。

2 .更智能

DB2 V8 强大的自我调整、自我管理及自我修复功能,能够最大限度地实现自动运行——数据库运行自主运算的第一步,极大地降低了信息管理的复杂性和总拥有成本(TCO),使用户能更专注于主营业务,而不再浪费过多精力于数据库管理。

3 .更全面

DB2 V8 提供单一而综合的架构,配合 IBM 的其他产品,可以为用户提供更加全面、完整的解决方案。如 IBM Content Manager 和 DB2 配合,可以使用户管理、分享、归档及再利用所有类型和不同来源的数据,包括 HTML 和 XML 页面内容、文件映像、电子办公文档和其他丰富的媒体,如数字音频和视频文件等。

另外,基于 IBM 倡导的自主计算技术的 SMART(自行管理和资源调整)技术可使管理员在管理例行任务时花费较少的时间,从而将更多的时间集中到帮助企业获得和保持持久的竞争优势上。行业领先的多维群集数据表功能可以减小 DBA 的索引工作量,同时提供数据群集功能,便于快速查找数据,这就意味着能以更小的代价获得能作出更好决策的相关信息。 DB2 独特的查询重写、优化技术及性能配置功能对用户构建企业级应用提供了底层的核心保证。

为了满足各个层面的市场需求,从 DB2 V8 开始,IBM 还提供了两个新产品,即 DB2 Express 和 WebSphere Information Integrator(即 WSII,是构建在 DB2 之上的一个产品),如图 1.2 所示。


图 1.2 DB2 V8 各级别产品
DB2 V8各级别产品

DB2 Express是 DB2 V8 系列的最新成员。它集 DB2 关系数据库的强大功能和可靠性于一身,简化了打包、安装和部署过程,比较适合于数据库相关技能较少的初级用户。同时,该产品支持多用户,在单机和局域网(LAN)环境中支持本地和远程应用程序。

IBM 在 2006 年 1 月 1 日推出了 DB2 Express-C,这是 DB2 Universal Database Express Edition(DB2 Express)的免费版本。它为 C/C++、Java、.NET 和 PHP 等应用程序的构建和部署提供了稳定的企业级数据库环境。用户完全可以使用它来免费构建自己的商业应用程序,从而在数据库领域,用户有了一个工业级重量产品的新选择。其组成结构如图 1.3 所示。


图 1.3 DB2 Express 组成结构
图1.3  DB2 Express组成结构

在这里,值得一提的是 DB2 中的联邦数据库(Federation Database System)技术,即上面提到的 WSII 。在现代大型企业中,有一种需求越来越强烈,那就是整合企业内部各个部门的不同信息系统,而在企业内部,财务部门使用 DB2,人事部门使用 Oracle,一些特殊应用可能使用 SQL Server 的情况十分常见。针对这样复杂的企业应用和需求,DB2 推出了可以透明访问异构数据库的联邦数据库系统,通过此技术,企业可以不用改动原有的数据库和应用信息系统,并且能够基于原有系统完成新信息应用系统的建设和部署,从而给企业带来巨大的信息整合价值。通过 WSII,可以实现各种主流关系型数据库产品如 Oracle、Sybase、Informix、SQL Server 甚至 MySQL 这样的数据库的透明存取和访问,同时也可以实现像 Excel、Access、简单文本文件和 XML 文件等非关系型数据源的透明存取和访问。 DB2 还可以实现异构数据库之间的透明复制(Federated Replication)。

联邦数据库系统是一个特殊类型的分布式数据库管理系统,它由一个作为联邦数据库运行的 DB2 实例、一个充当联邦数据库的数据库、一个或多个数据源,以及存取数据库和数据源的客户机(用户和应用程序)组成。借助于联邦数据库系统,用户可以实现在一个 SQL 语句中向分布在不同机器上的异构数据库请求所需要的数据并返回正确的 SQL 结果。如图 1.4 所示。


图 1.4 WebSphere Information Integrator 组成结构
图1.4  WebSphere Information Integrator组成结构

1.1.3  DB2 V9

当前,DB2 V9 引入了一种可以管理 pureXML 和关系型数据的混合型引擎。 DB2 V9 中的新技术使用户能够充分利用非关系业务数据(比如 Excel 电子表格中的金融信息或通常存在于纸上或纸处理文档中的重要合同)。利用 DB2 V9 的一个连接语句就可以将这些业务数据与传统的关系数据合并在一个完整的视图中。对电子表格、合同、传真图像或收据的手工搜索可以由一个简单的语句替代。对 XML 数据的标准化访问机制确保了现有的报告工具和接口仍然可以对这些数据进行处理。 pureXML 技术为企业的数据业务提供了具有革新意义的新方法。

目前 DB2 V9 已经发布,它提供了与先前版本不同的体系结构,使客户机应用程序能够通过它们选择的查询语言—— SQL(包括具有 XML 扩展的 SQL,常被称为“ SQL/XML ”)或 XQuery ——同时处理关系型数据结构和 XML 数据结构。如图 1.5 所示,DB2 中的引擎级组件支持这两种语言指定的查询。


图 1.5 DB2 V9 的体系结构

除了延续以前版本的 DB2 数据库管理特性,DB2 V9 还提供了新的查询语言、新的存储及索引技术和支持 XML 数据及其固有层次结构的其他特性:

  • 新的存储技术,可以高效地管理 XML 文档中固有的层次结构。
  • 新的索引技术,可以提高在 XML 文档之间和内部进行搜索的速度。
  • 新的查询语言支持(对于 XQuery)、新的图形化查询构建器(对于 XQuery)和新的查询优化技术。
  • 根据用户提供的模式检验 XML 数据的能力。
  • 新的管理功能,包括对关键数据库工具的扩展。
  • 与流行的应用程序编程接口(API)的集成。

我们将在 1.2 节中详细介绍 DB2 V9 的新特性。





回页首


1.2  DB2 V9 新特性

1.2.1  更多的 XML 的支持

越来越多的公司开始转到 XML 技术,从而帮助他们实现面向服务的体系结构(SOA)、在不同的系统和应用程序之间交换数据并适应快速变化的业务环境。许多领导者正在寻找能高效地共享、搜索和管理公司产生的大量 XML 文档和信息的办法。 DB2 V9 最重要的特性就是提供了对 XML 数据的存储、管理和搜索,其设计目的就是为了帮助用户减少存储和使用 XML 数据所需的时间和工作量,进而减少开发费用并提高业务灵活性。图 1.6 对 DB2 V9 新增的 XML 特性做了简洁明了的概括。


图 1.6 具有 XML 特性的 DB2 对用户的支持
图1.6  具有XML特性的DB2对用户的支持

1 .层次化存储管理

为了高效地管理传统 SQL 数据类型和 XML 数据,DB2 包含两种不同的存储机制——逻辑存储和物理存储。

(1)逻辑存储

XML 文档集合存储在 DB2 表中,这些表包含一个或多个新的 XML 数据类型的列。这使管理员能够使用熟悉的 SQL 数据定义语言(DDL)来创建存储 XML 数据的数据库对象。但是,这个熟悉的接口隐藏了一个事实:DB2 以不同的方式存储 XML 数据。它使用新技术来存储 XML 数据的层次结构,并支持高效地搜索原 XML 数据的所有部分。

(2)物理存储

DB2 采用经过解析的树和节点模型来存储和操作 XML 数据,这种格式可以反映原始 XML 文档的层次结构。如果用户要求 DB2 在进行存储之前针对注册的 XML 模式对 XML 数据进行检验,那么 DB2 将用模式类型信息对 XML 层次结构中的所有节点进行标注;否则,就用默认的类型信息对节点进行标注。

在存储时,DB2 会保留这个文档的内部结构,并将它的标记名和其他信息转换为整数值。这样在节省磁盘空间的同时,也改进了使用导航表达式查询的功能。

最后,DB2 会根据需要自动地跨多个数据库页拆分文档的各个部分(即文档树的节点)。实际上,DB2 可以根据需要对文档层次结构中任何级别上的节点集合(即子树)进行拆分。在这种情况下,DB2 自动地生成和维护一个“区域”索引,这样就可以高效地跟踪整个文档的物理表示。图 1.7 是对上述内容的一个简单示例。


图 1.7 XML 数据的物理存储结构
图1.7  XML数据的物理存储结构

通过这两种不同的存储机制,给定数据类型所用的底层存储机制对于应用程序是透明的。换句话说,应用程序不需要显式地指定要使用的存储机制,也不需要管理存储的物理方面,比如如何将 XML 文档的各个部分拆分到多个数据库页上。系统会自动采用适合目标数据的格式,应用程序自然而然地获得存储和查询数据方面的运行时性能优势。

2 .新的索引技术

除了提供新的 XML 层次化存储管理支持之外,DB2 还提供了新的索引技术来加快 XML 数据的搜索。与关系索引类似,这些新的 XML 索引也是用熟悉的 SQL DDL 语句创建的:CREATE INDEX 。但是,除了指定要建立索引的目标列之外,还要指定“ xmlpattern ”来标识感兴趣的 XML 文档子集。

尽管使用 SQL DDL 语句来创建 XML 索引,但是 XML 数据上的索引与传统 SQL 数据类型列上的索引有两个显著的差异:

  • XML 数据上的索引通常只涉及文档(列)内容的一个子集。与此相反,传统 SQL 数据上的索引总是涉及整个列的内容。
  • 表中的一行可能会产生多个 XML 索引项,因为一个 XML 文档可能包含零个、一个或多个与指定的 xmlpattern 匹配的“节点”。与此相反,非 XML 索引对于表中的每一行只包含一项。

对于某些应用程序,全文搜索是非常重要的。 DB2 V9 扩展了 DB2 的文本搜索功能,使其能够搜索 XML 列中存储的数据。对 CREATE INDEX 语句的扩展使管理员能够创建全文索引,从而帮助改进这种搜索的性能。

3 . SQL 的新特性

为了访问混合型表,IBM 支持对 SQL 的工业标准扩展,即 SQL/XML 。这些扩展允许只用简单的 SELECT 语句来检索 XML 文档或 XML 文档的一部分。除了 SQL/XML 之外,DB2 还支持新的 XML Query(即 XQuery)语言。 XQuery 是一种由 World Wide Web Consortium(W3C)推动的标准,设计它是为了查询 XML 的层次化结构,正如设计 SQL 是为了查询表格数据结构一样。 XQuery 与 SQL 的不同之处在于它能够提供路径表达式,使程序员能够在 XML 的层次化结构中导航。实际上,应用程序可以自由地使用这两种语言的语句,而且一个查询语句可以结合使用 SQL 和 XQuery 。

查询优化方面,DB2 有两个查询语言分析器,一个用于 XQuery,另一个用于 SQL 。它们都生成一种通用的与语言无关的内部查询表示。这意味着用这两种语言编写的查询都会从 DB2 的基于开销的查询优化技术中获益,这包括高效地重写查询操作符,以及选择低开销的数据访问计划。另外,DB2 可以利用新的查询、联结操作符及新的索引处理技术,为涉及 XML 文档的查询提供更好的运行时性能。

4 .管理支持

DB2 新的 XML 支持包括对已有的管理工具的扩展,可以帮助管理员管理和调整数据库。例如,备份和恢复工具(包括用于故障恢复的高可用性数据复制)都支持 XML 列中存储的文档。同样,对 IMPORT 和 EXPORT 的扩展现在可以同时在传统 SQL 数据和 XML 数据上操作。

另外,DB2 的图形化管理工具 DB2 Control Center 使管理员能够浏览包含 XML 数据的表、创建和管理基于 XML 的索引、发出 SQL/XML 和 XQuery 语句,以及执行许多其他管理任务。因为性能常常是关注的重点,因此相应的 DB2 工具也进行了扩展来适应 XML 数据。这些工具包括 DB2 Snapshot Monitor,它提供对某一时刻 DB2 活动的汇总(即“快照”); RUNSTATS,它收集 DB2 数据库中存储的数据的统计信息;以及 EXPLAIN,它报告查询优化器为满足给定请求所选择的访问路径。管理员可以通过研究 EXPLAIN 的输出来判断使用了哪些 XML 索引。

5 .程序语言扩展

如果用户无法方便、可靠地访问数据库中存储的 XML 数据,那么 DB2 新的 XML 支持的意义就不大了。由于认识到了这一点,DB2 V9 对它的各种编程语言接口进行了增强,从而使用户能够轻松地访问 XML 数据。这些增强覆盖 Java(JDBC)、C(嵌入式 SQL 和调用级接口)、COBOL(嵌入式 SQL)、PHP 和 Microsoft 的 .NET 环境(通过 DB2 .NET 数据提供程序)。

1.2.2   更易于维护

DBA 要确保应用程序和数据库的性能和可用性,他们很难花费过多时间研究 XML 和 SOA 这样的新技术。最近的每个 DB2 版本都添加了减少数据库管理所需时间的特性,从而使 DBA 的工作更有效率。

DB2 V9 引入了一种新的内存调整特性,它会自动地设置内存配置参数和缓冲池大小的值。启用这个特性时,内存调整器会在几个内存消费者之间动态地分配可用内存资源,包括排序、包缓存、锁列表区域和缓冲池。在 Windows 和 AIX 平台上,自调整内存特性还可以判断总的数据库内存需求,并动态地调整数据库共享的内存。这个特性使 DB2 能够在工作负载加大时使用更多的物理内存,在数据库内存需求降低时将内存释放给操作系统。

除了简化内存配置之外,新的自调整特性还通过提供一个优化配置来提高性能,它能够对工作负载的显著变化进行动态响应。

1.2.3  更多选择的分区支持

在 Linux、UNIX 和 Windows 上,DB2 引入的新的分区技术可以提高数据仓库的性能并缩短管理时间。新的表分区方法通常称为范围分区,它允许为每个分区定义数据范围,并根据数据范围将数据存储为单独的对象。例如,可以根据表中的一个日期列,按照年和月对表进行分区。这些存储对象可以位于不同的表空间或同一个表空间中,或者是两种情况的组合,如图 1.8 所示。


图 1.8 DB2 V9 范围分区
图1.8  DB2 V9范围分区

表分区使存储对象的行为就像在单独的表中一样,通过使用 ALTER TABLE...ATTACH 语句将现有的表与分区的表合并,可以很容易地实现快速转入(roll-in)。同样,用 ALTER TABLE...DETACH 语句很容易实现转出(roll-out)。查询处理可以利用分割来避免扫描无关的数据,从而为许多数据仓库风格的查询提供更好的查询性能。

表分区常常用来存储供分析的历史数据。例如,典型的保险数据仓库可能保存三年的索赔历史。在将每个月的数据载入仓库中时,最早的一个月的数据可以被存档并从活跃表中删除。新的转入和转出特性简化了这种数据移动过程,减少了管理时间。只扫描适当分区中的数据会提高查询的性能。范围在 CREATE TABLE 语句的 PARTITION BY 子句中指定。这个定义中使用的列称为表分区键列。

表分区可以单独使用,也可以与其他组织方案结合使用。 CREATE TABLE 语句的每个子句包含一个算法来指出应该如何组织数据。以下三个子句说明数据组织的级别,这些级别可以以任何组合形式来使用。

  • DISTRIBUTE BY 跨数据库分区均匀地分布数据。使用这个子句支持查询并行性并跨每个数据库分区进行负载平衡。这个概念称为数据库分区,即 Database Partitioning Feature (DPF)。
  • PARTITION BY 将一个维中具有相似值的行分组在同一个数据分区中。这个概念称为表分区。
  • ORGANIZE BY 将多个维中具有相似值的行分组在同一个表区间中。这个概念称为多维簇(MDC)。

这个语法在子句之间提供了一致性,并为未来的数据组织算法提供了支持。结合使用 CREATE TABLE 语句、DISTRIBUTE BY 和 PARTITION BY 子句使得数据能够跨数据库分区和多个表空间进行分布。

DB2 V9 是第一种同时支持全部三种数据库分区方法的数据服务器,这是数据管理和信息可用性方面的重大改进。

1.2.4  更佳的安全性

随着数据库内部和外部威胁的增大,数据库用户都需要增强对数据库的保护。 DB2 V9 用基于标签的访问控制(LBAC)技术来进一步增强解决安全问题的能力,LBAC 可以在单独的行和列级别上提供读和写的访问控制。

可以调整 LBAC 功能来满足每个公司特定的安全需求。 IBM 建议由公司的一个安全管理员来执行所有的 LBAC 配置。 DB2 V9 创建了一个新的 DB2 安全管理员角色(SECADM),它具有特定的安全特权。

安全管理员通过创建安全策略来配置 LBAC 系统。安全策略用来描述决定访问数据的标准。在创建安全策略之后,安全管理员创建称为安全标签的对象,它们是安全策略的一部分。受安全标签保护的数据称为受保护数据。安全管理员通过向用户授予安全标签来允许用户访问受保护数据。当用户试图访问受保护数据时,将用户的安全标签和受保护数据的安全标签进行比较。如果用户试图读取他们的 LBAC 凭证不允许读的受保护行,DB2 就会提示这些行不存在。这些行不能被选择作为用户 / 程序员运行的任何 SQL 语句的一部分,包括 SELECT、UPDATE 或 DELETE 语句,甚至聚合函数也忽略用户 LBAC 凭证不允许的行。例如,COUNT(*) 函数只返回用户有读访问权的行的数量。

1.2.5  数据库设计

DB2 V9 在数据行压缩方面有了显著的提高,目前 DB2 V9 采用的压缩技术最多可以节省 80% 的存储空间。由于行的大小减小了(这会减少 I/O 并提高缓冲池的命中率),物理 I/O 的数量和缓冲池需求也减少了,最终结果是在存储上花费的预算减少了,因此在某些情况下会提高数据库的性能。

压缩方法是将一个数据行中的重复数据模式映射为更小的符号,由此减小表数据的总大小。这个解决方案使用一种静态的基于词典的压缩算法,逐行进行压缩。

这个新特性除了可用于上述新分区特性优势的表之外,还可用于现有的 DB2 表。

CREATE TABLE 和 ALTER TABLE 语法包含一个新的 COMPRESS NO/YES 子句,用来设置和取消表的行压缩属性。设置 COMPRESS YES,之后执行离线的表 REORG 就会对表中所有可以压缩的行进行压缩。在词典已经存在并设置了 COMPRESS YES 之后,表中插入或载入的所有新行将使用这个词典进行压缩。

压缩词典是通过扫描整个表,根据表值建立的。与此方法不同,其他数据库压缩技术为每一页建立一个压缩词典。通过在表级而不是页级建立压缩词典,可以通过分析整个表来识别模式,而不限于分析单一页。





回页首


1.3  DB2 V9 安装

DB2 为满足不同用户的需求,提供了两种类型的安装方法。

1 . DB2 安装向导

DB2 安装向导是在 Linux 和 Windows 平台上运行的安装程序。它为用户提供了易于使用的界面,以便于安装 DB2 和执行初始设置与配置任务。

2 .响应文件安装

响应文件是包含设置和配置值的文本文件。该文件被传送至 db2setup 程序,安装的过程是根据响应文件中的指定值执行的。

在本节中,我们以 Windows 平台下 DB2 V9 的安装为例,介绍利用 DB2 安装向导进行安装的过程。然后在 1.3.2 节,详细介绍如何利用响应文件来进行 DB2 产品的安装。最后,我们将介绍如何创建一个 DB2 数据库。

1.3.1  DB2 V9 的安装

这里主要以 Windows 平台为例介绍整个安装过程。在安装过程中,安装进程会自动监测系统上使用的通信协议并对 DB2 进行配置,以便 DB2 能够使用这些协议进行网络通信。在安装时,系统会默认创建一个名为 DB2 的实例和 DB2 管理服务器(DAS)。首先,DB2 安装程序将根据操作系统的默认语言类型选择相应语言的安装程序。“欢迎窗口”及“ DB2 产品选择窗口”分别如图 1.9 和 1.10 所示。

我们可以根据 DB2 产品对窗口中提供的产品信息进行选择,本书中,我们安装的是 DB2 企业服务器版。选择了具体的产品后,安装程序会自动引导相应产品的安装向导。如图 1.11 所示,单击“下一步”按钮,进入如图 1.12 所示的许可证协议页面。

图1.13  安装类型选择
图 1.13 安装类型选择
图1.13  安装类型选择

在通过了许可证认证后,我们可以选择 DB2 的安装类型。 DB2 为用户提供了三种安装类型。如图 1.13 所示。


图 1.13 安装类型选择
图1.13  安装类型选择

  • 典型安装:安装最常用的组件,包括所有必需的 DB2 组件、ODBC 支持,以及控制中心等 DB2 工具。
  • 精简安装:只安装必需的 DB2 组件和 ODBC 支持。
  • 定制安装:用户可以选择安装哪些管理工具、应用程序开发工具、复制工具、DB2 客户端等。

DB2 安装向导中,提供了创建响应文件的工具。我们可以将在本次的安装过程中配置的参数等信息保存在响应文件中,用来在另外的机器上用不同的用户 ID 重新创建一个配置相同的 DB2 系统,如图 1.14 所示。


图 1.14 选择响应文件的创建
图1.14  选择响应文件的创建

注:关于响应文件我们将在分布式安装中具体介绍。

DB2 的默认安装路径是在 C:\Program Files\SQLLIB\BIN 目录下,同时安装向导会默认创建一个具有 SYSADM 权限的 db2admin 用户,用于启动或停止实例,如图 1.15 和图 1.16 所示。

图 1.15 DB2 选择安装文件夹 图 1.16 设置用户信息

安装程序会自动创建名为 DB2 的实例。安装程序会根据用户使用的操作系统中安装的通信协议来安装和配置 DB2 实例,用户可以选择想要 DB2 支持其中的那些通信协议,如图 1.17 所示。 DB2 会为每个通信协议的相应参数生成默认值。


图 1.17 配置 DB2 实例
图1.17  配置DB2实例

DB2 任务中心、调度器和信息目录中心都需要使用 DB2 工具目录来存放元数据,使 DB2 数据库系统能够支持作业调度。同时,DAS 能够存储一个联系人列表,在特定事件发生后,DAS 可通过电子邮件等方式通知管理员。管理员列表既可以存储在本地服务器上,也可以作为一个全局联系人列表存储在某台特定的服务器上,如图 1.18 和图 1.19 所示。

图1.18和图1.19

DB2 使用健康监控器监控目前运行的实例内所有 DB 相关数据,对数据库环境的性能进行跟踪,当违背了健康知识器定义的条件时,会有报警信息发送给健康状况联系人。所以,安装程序需要我们提供健康状况联系人的相关情况,当然,这个操作也可以等到安装完成后再进行。同时,我们可以利用操作系统的用户权限管理机制为 DB2 对象启动操作系统的安全管理,DB2 安装程序默认建立的 DB2 管理员组为:DB2ADMNS,DB2 用户组为:DB2USERS,如图 1.20 和图 1.21 所示。

图1.20和图1.21

在汇总信息页面,我们可以查看到利用 DB2 安装向导设置的安装参数信息。在确认无误后,单击“完成”按钮。 DB2 安装向导开始复制文件和创建响应文件。当 DB2 产品成功安装到系统之后,安装向导会列举一些安装后的推荐步骤,单击“完成”按钮退出安装程序,如图 1.22 和图 1.23 所示。

图1.22和图1.23

1.3.2  响应文件安装

与 DB2 安装向导不同,DB2 响应文件的安装无须交互式用户输入。这为 DB2 的大型部署和整合 DB2 与其他应用程序的统一安装提供了便利。响应文件安装是由 DB2 安装向导使用响应文件来执行的。在本小节中,我们同样以 Windows XP 为例,介绍使用响应文件的安装过程。

响应文件是包含安装和配置信息的 ASCII 文本文件,它可以由 DB2 实用程序或手动编辑生成。响应文件指定 DB2 配置参数及要安装的产品组件,同时,也可以用它来设置 DB2 全局变量,实例变量和数据管理器配置。 DB2 响应文件示例如下。

PROD=ENTERPRISE_SERVER_EDITION 
 LIC_AGREEMENT=ACCEPT 
 FILE=C:\Program Files\IBM\SQLLIB\ 
 INSTALL_TYPE=TYPICAL 

 LANG=EN 
 DAS_CONTACT_LIST=LOCAL 

 INSTANCE=DB2 
 DB2.NAME=DB2 
 DEFAULT_INSTANCE=DB2 
 DB2.SVCENAME=db2c_DB2 
 DB2.DB2COMM=TCPIP 
 DB2_OLEDB_GUID={303D86EC-5F65-4491-9B09-A37EF8D9A785} 
 DB2_OLEDB_ADVANCED_PAGE_GUID={5F2F0078-31BF-45C1-8DD4-B06EAD97D334} 
 DB2_OLEDB_CONNECTION_PAGE_GUID={556B4AA8-324E-4B07-9ED6-736A9142CE10} 
 DB2_OLEDB_ENUMERATOR_GUID={9B44217B-8162-4573-94AF-F8C25E5EAEB7} 
 DB2_OLEDB_ERROR_LOOKUP_GUID={75039E98-DF63-4DA2-A7C2-BE15CF5722BC} 
 DB2.PORT_NUMBER=50000 
 DB2.AUTOSTART=YES 
 DB2.USERNAME=db2admin 
 DB2.PASSWORD
=204974526940634522320381446532006292637619845196501353964345364742455503256477693305423 

 ENCRYPTED=DB2.PASSWORD 
 DAS_USERNAME=db2admin 
 DAS_PASSWORD
=048195626633450850436949983623757999560034893015956395966543380336425455452832325351149 

 ENCRYPTED=DAS_PASSWORD 
 DAS_SMTP_SERVER=d23av02.au.ibm.com 
 DB2_EXTSECURITY=YES 
 DB2_USERSGROUP_NAME=DB2USERS 
 DB2_ADMINGROUP_NAME=DB2ADMNS 
 RSP_FILE_NAME=C:\Documents and Settings\Administrator\My Documents\PROD_ESE.rsp 
 DB2_COPY_NAME=DB2COPY1 
 DEFAULT_COPY=YES

响应文件中的主要关键字及其代表的含义如下。

  • PROD:指定想安装的产品(例如:UDB_EXPRESS_EDITION 代表 B2 UDB Express 产品)。
  • FILE:指定 DB2 产品的目标目录(仅对于 Windows)。
  • INSTALL_TYPE:指定安装类型(例如:COMPACT、TYPICAL 、CUSTOM 等)。
    注意:只有当 INSTALL_TYPE 是 CUSTOM 时次关键字有效,否则被忽略。
  • COMP:指定需要安装的组件。
  • LANG:指定需要安装的语言支持。
  • REBOOT:指定当安装完成时是否要重新启动 Windows 系统。
  • KILL_PROCESSES:指定是否安装不经提示就终止当前运行的 DB2 进程(仅对于 Windows)。

下面,我们逐步介绍响应文件的安装过程。

* 创建响应文件

我们可以用以下三种方式创建响应文件。

  • 使用响应文件生成器(Windows)创建响应文件。
  • 使用 DB2 安装向导(Linux 和 Windows)创建响应文件。
  • 手工定制为每个 DB2 产品(Linux 和 Windows)提供的样本响应文件。

1 .使用 DB2 安装向导创建响应文件

DB2 安装向导可以根据要执行的安装配置来创建响应文件。可以使用该响应文件并通过使用相同的设置来执行自动安装,如图 1.24 所示。


图 1.24 选择响应文件的创建
图1.24  选择响应文件的创建

2 .使用 DB2 响应文件生成器创建响应文件

DB2 响应文件生成器实用程序仅在 Windows 平台上可用。在 DB2 产品已经成功安装以后,使用响应文件生成器可以安装和主安装一样的 DB2 组件的响应文件。

DB2 响应文件安装器(db2rspgn)使用语法如图 1.25 所示。


图 1.25 使用响应文件生成器的语法
图1.25  使用响应文件生成器的语法

在默认情况下,db2rspgn 生成本机所安装的 DB2 产品的所有实例的概要文件和响应文件。在响应文件成功创建以后,我们需要手动修改文件以接受许可证协议并输入新系统的用户标识和密码,该响应文件才可以正常地在一台新的机器上使用。

3 .手动创建响应文件

我们可以通过手动编辑文本文件的方式来创建响应文件。使用这种方法创建响应文件,需要对响应文件所涉及的参数定义有全面的认识。通常,我们可以通过在一个已有的响应文件的基础上进行修改来完成响应文件的创建。

* 使用响应文件安装* 使用响应文件安装

首先,我们可以使用 DB2 安装向导在提示符处输入命令 setup.exe,并提供正确的响应文件名,同时还可以指定日志文件的路径和名称等其他选项。

对于响应文件安装,只有带有完整路径的响应文件名是强制的。其具体语法如图 1.26 所示。


图 1.26 使用响应文件安装的语法
图1.26  使用响应文件安装的语法

安装完成后,DB2 安装过程返回一个返回码。我们可以根据对返回码的监视,验证 DB2 产品的安装情况,如表 1.1 所示。

表 1.1 Windows 上响应文件安装的主要返回码

返 回 码描 述
0操作成功完成
1操作返回警告
1603在安装过程中发生致命错误
3010安装成功;但是需要重新引导以完成安装

* 生成安装日志* 生成安装日志

日志文件的路径和名称是 DB2 安装程序的可选参数。如果不指定日志文件的名称和路径,则安装过程中会在默认目录中创建默认的日志文件。

默认文件是 db2.log,在 My Documents\DB2LOG 目录下。 db2.log 文件中有 Windows 当前和历史安装信息。它在 DB2 安装的结尾更新。除了这些日志文件,其他的辅助日志文件和转储或跟踪文件也在默认目录下创建。

1.3.3  创建第一个数据库

每个数据库管理器实例都有一个系统数据库目录文件,为该实例编目的每个数据库都在该文件中有一项记录。发出 CREATE DATABASE 命令时就对数据库进行了隐式编目,也可以用 CATALOG DATABASE 命令对数据库进行显式编目。

本地数据库目录文件存在于每个定义了数据库的驱动器或路径中。每一个可从该位置访问的数据库在该目录中都有一项。

当创建数据库时,会完成以下任务:

  • 设置数据库所需的所有系统目录表;
  • 分配数据库恢复日志;
  • 创建数据库配置文件和默认值集;
  • 将数据库实用程序绑定到数据库。

同时可以使用 CREATE DATABASE 命令创建数据库,可以通过命令参数的方式有选择地指定以下各项:

  • 用于目录分区的数据库分区号;
  • 创建数据库所在的驱动器或路径;
  • 代码集和地域;
  • 排序序列;
  • 默认的扩展块大小;
  • 是否要自动配置数据库;
  • CATALOG、TEMPORARY 和 USERSPACE1 表空间的表空间定义。

CREATE DATABASE 命令创建了三个默认表空间:

  • SYSCATSPACE:用于系统目录表的默认表空间;
  • TEMPSPACE1:用于系统创建的临时表的默认表空间;
  • USERSPACE1:用于用户创建的对象的默认表空间。

不可以删除 SYSCATSPACE 。一旦创建了另一个临时表空间就可以删除 TEMPSPACE1 表空间。一旦创建了另一个用户创建的表空间就可以删除 USERSPACE1 表空间。

要为每个数据库创建并维护一组系统目录表。这些表包含了有关数据库对象(例如表、视图、索引和包)定义的信息和有关用户对这些对象的访问权类型的安全性信息。这些表存储在 SYSCATSPACE 表空间中。其目录结构如图 1.27 所示。


图 1.27 DB2 数据库的系统目录表
图1.27  DB2数据库的系统目录表

图 1.27 是当创建数据库 SAMPLE 时,将会相应创建的一些内容,主要包括 SAMPLE 文件夹和 SQL00001 文件夹,以及它们所包含的子文件夹。根目录 DB2 指的是 DB2 实例的名字,NODE0000 是数据库的分区号(0 表示非分区数据库的数据库)。 SQL00001 是数据库的 ID,从 1 开始,随后只要创建了其他新的数据库,该值就递增。 DB2EVENT 包含了相关数据库事件的信息,比如发生死锁,那么这里可以查看到一些相关的信息。 SQLOGDIR 是该数据库默认的日志存放目录。而 SAMPLE 文件夹将包含与该数据库表空间的健康状况相关的信息。

需要注意的是,v9 的系统目录表结构和 V8 有所不同,请注意区分。





回页首


1.4  DB2 图形工具和数据库对象

1.4.1  DB2 图形工具

IBM 的自治运算策略致力于建立一个能够自管理、自诊断和自治愈的 IT 基础架构。 DB2 提供了一系列的工具来使数据库能够实现自我管理,通过它们,能够使数据库操作在配置、调节和管理方面实现更高程度的自治。下面介绍一些 DB2 中常用的图形化配置、调节及管理的工具。

1 .控制中心

DB2 控制中心(DB2 Control Center)是 DB2 服务器的中心管理工具。通过控制中心展开的对象树,可以查看本地和远程系统中实例和数据库完整的树形结构视图;而内容窗格中,提供了关于选定的某项的更多详细信息,如图 1.28 所示。


图 1.28 DB2 控制中心
图1.28  DB2控制中心

控制中心向用户提供了几乎所有典型的 DB2 管理任务所需要的工具,我们可以使用控制中心方便地调用其他数据库管理工具来进行数据库系统中的管理工作。如:可以管理 DB2 系统、DB2 实例、数据库和数据库对象等;还可以打开其他中心和工具以帮助优化查询、调度作业,并编写和保存脚本,执行数据仓库任务,创建存储过程和用户自定义函数;使用 DB2 命令及监控 DB2 系统的“健康”状况。

控制中心依赖于数据库管理服务器(Database Administration Server,DAS)。 DAS 帮助控制中心调度作业、管理远程数据库服务器上的对象等。

2 .健康中心

DB2 健康中心(DB2 Health Center)是一个服务器端的工具,它可以在没有用户干预的情况下对 DB2 实例的健康状况进行监控,如图 1.29 所示。当使用 DB2 时,监控程序持续跟踪一组健康指示器。如果健康指示器的当前值超出了定义的阈值以后(比如日志空间不足),系统会发出警告信息。警告通知可以通过电子邮件或者传呼系统发送。如果不采用发送通知的方法,用户也可以采用命令脚本或者任务的形式预先定义一组行为,在出现问题后自动执行。


图 1.29 DB2 健康中心
图1.29  DB2健康中心

健康中心的图形界面允许管理员选择数据库对象来查看其详细信息,为当前对象定义警告,以及为解决警告而采用建议的行为。用户可以使用它来监控 DB2 环境的状态,并对它作任何必要的更改。

3 .复制中心

DB2 复制中心(DB2 Replication Center)是一个允许管理员设置和管理数据复制环境的图形工具,如图 1.30 所示。复制中心可以用来管理 DB2 数据库和其他关系数据库(DB2 或非 DB2)之间的复制功能。通过 DB2 复制中心,用户可以定义复制环境,将指定的更改从一个位置应用到另一个位置并使两个位置上的数据同步。同时,可以使用复制中心创建一个预定义集,其定义作为脚本被存储在控制服务器中,它的主要工作都可以通过复制中心完成。

4 .开发中心

DB2 开发中心(DB2 Developer Center)是一个快速的开发环境,如图 1.31 所示。通过开发中心,用户可以创建、构建和部署 DB2 存储过程及用户自定义的函数;同时,可以使用集成的调试器来调试 SQL 存储过程,创建结构化类型等。另外,值得一提的是,在 v9 版本中,有一个新的图形界面工具叫做 Developer Workbench(缩写为 DWB,在 DB2 下一个大的版本 v9.5 中,DWB 将改名为 Data Studio),它基于 Eclipse 技术,功能上完全覆盖 DB2 开发中心的所有功能,并且更加快速易用,将成为 DB2 开发中心的一个升级和替代工具。关于 DWB 更加详细的内容,请参见后面第 7 章的相关内容。


图 1.30 DB2 复制中心
图1.30  DB2复制中心


图 1.31 DB2 开发中心
图1.31  DB2开发中心

5 .命令编辑器

命令编辑器提供了一个交互式的图形化界面来执行 DB2 命令、SQL 语句、MVS 控制台命令,以及使用 SQL 助手(SQL Assist)工具来查看 SQL 语句的存取方案的图形表示,如图 1.32 所示。


图 1.32 DB2 命令编辑器
图1.32  DB2命令编辑器

DB2 命令中心也可以用基于 Web 的方式运行。在这种方式中,任何 Web 浏览器、PDA、移动设备或可以访问因特网的其他普及设备都可以对 DB2 服务器执行命令。这有助于 DBA 与他们的 DB2 系统保持持续的联系。在 Web 方式中,命令中心没有可视化解释(Visual Explain)或 SQL 助手功能部件。

6 .配置助手

DB2 配置助手(DB2 Configuration Assist)可以维护一个数据库列表,应用程序可以连接、管理和控制这些数据库,如图 1.33 所示。

通过配置助手,可以使用现有的数据库、添加新的数据库、绑定应用程序、设置客户机数据库管理器配置参数,以及导入和导出配置概要文件。


图 1.33 DB2 配置助手
图1.33  DB2配置助手

7 .日志

日志工具主要用来实现对全部脚本调用、DB2 消息和 DB2 恢复信息的跟踪。可以使用日志显示有关任务、数据库操作和运作、“控制中心”操作、消息和报警的历史信息,如图 1.34 所示。


图 1.34 DB2 日志
图1.34  DB2日志

DB2 采用预写日志的方式,也就是说对数据库修改操作会首先被写到日志中,然后再对物理数据库实施操作。

1.4.2  DB2 数据库对象

数据库对象是数据库的基本组成部分。 DB2 定义了多种类型的用于存储和表示信息的基本成员和对象,它们可以使用 DDL(数据定义语言)创建、修改和删除;使用 DML(数据操纵语言)进行选择、插入、更新或删除数据库记录,同时,可以使用 DCL(数据控制语言)进行数据对象的存取控制。我们将在本节对这些知识进行简要的介绍。

1 .数据类型

DB2 提供了如下两种大类别的数据类型。

(1)内置数据类型的分类如下。

  • 数字型(Numeric);
  • 字符串型(String);
  • 日期时间型(Datetime);
  • 数据链接型(Datalink)。

(2)用户定义的数据类型分类如下。

  • 用户定义的单值类型;
  • 用户定义的结构化类型;
  • 用户定义的引用类型。

关于上面这些数据类型的详细定义和介绍,可以参看 DB2 帮助中心。这里需要提到的是,诸如图像和音频这样的大型数据对象经常需要存储在数据库中。 DB2 为存储大型数据对象提供了专门的数据类型。这些数据类型被称为大对象(LOB)。

DB2 提供了三种不同的大型对象数据类型。所有这些数据类型都能存储多达 2GB 的数据:CLOB (Character Large Object) - 能包含多达 2GB 的字符数据。 BLOB (Binary Large Object) - 能包含多达 2GB 的二进制数据。这里的二进制数据实质上可以是任何东西(例如图像、音频文件等)。 DBCLOB (Double-Byte Character Large Object)- 能包含多达 2GB 的双字节字符数据。请注意只有当用户所创建的数据库支持双字节数据时,才能使用这种数据类型。这些数据类型均属于 SQL3 数据类型。除非不得已,否则不要移动 LOB 类型的数据。

注意到在 DB2 中 LOB 有一个重要且有趣的特点就是,LOB 的值没有存储在数据库的表中,实际上存储的是描述符,该描述符指向 LOB 的实际位置,真正的 LOB 值存储在表空间里。由于 LOB 对象占用的空间很大,将它们从数据库服务器传送到客户端应用程序需要的开销也会比较大,所以,在应用程序中一般只处理 LOB 数据的一部分,而不是将它们作为一个整体来处理。很多时候也并不需要将整个 LOB 对象的值存储在应用程序内存中,而是通过定位器(LOCATOR)变量引用此值,使用定位器对 LOB 对象进行操作,这样做的好处就是不必检索整个 LOB 对象,从而减少应用程序的存储需求,还可以减少客户端和服务器之间的数据交换,改善应用程序的性能。

2 .模式(Schema)

模式是数据库实体,一个模式表示 DB2 数据库中命名对象的一个集合。大多数数据库对象的命名采用模式名加对象名的两部分命名规则(模式名 . 对象名)。

如果数据库对象的创建者在数据库对象定义中不包括模式名,那么将使用创建者的授权 ID 作为模式名创建对象。如果在一条 SQL 语句中引用一个对象时,没有显式给出模式名,则隐含将语句发出者的授权 ID 作为该对象的模式名。

3 .表

表是数据记录未排序的集合,包含列和行(通常称为记录)。每列都基于一个数据类型。表一旦创建并填入数据,就可以在 DML 语句的 FROM 和 INTO 子句中被引用。有如下三种表类型。

  • 永久表(基表);
  • 临时(说明)表;
  • 临时(派生)表。

永久表是通过 CREATE TABLE 语句创建的,是数据在磁盘上物理存储方式的逻辑表示。

4 .视图

视图允许不同的用户或应用程序以不同的方式查看同一数据。它不仅使数据更易于访问,而且可以利用它限制某些用户查看或更新数据。

对于用户,视图看起来就像表一样。一旦定义了视图,就可以和基表一样使用,使用 DML 语句如 SELECT、INSERT 和 DELETE 来存取。视图可以是可删除的、可更新的、可插入的或是只读的。不同的类别表明了在使用视图时所能允许的 SQL 操作。

除了视图定义外,视图在数据库中不占用空间。当视图中显示的数据被修改后,在后台表中的数据也相应地修改了。视图本身并不存放真正的数据,在数据库中它只有一个定义。在 DB2 数据库中定义的视图的列表存储在系统目录表 SYSIBM.SYSVIEWS 中,对这个表还定义了一个名为 SYSCAT.VIEWS 的视图。系统目录还有一个 SYSCAT.VIEWDEP,对于在数据库中定义的每个视图,它都有一行与从属于该视图的每个视图或表相对应。同样,每个视图在 SYSIBM.SYSTABLES 中都有一个项,在 SYSIBM.SYSCOLUMNS 中有多个项,因为可以像使用表一样使用视图。

5 .索引

用户对数据库最频繁的操作是进行数据查询。一般情况下,数据库在进行查询操作时需要对整个表进行数据搜索。当表中的数据很多时,搜索数据就需要很长的时间。

索引是与单个表相关的物理对象。任何永久表或已声明的临时表都可以定义它们的索引,也可以为单个表定义多个索引,但不可以在视图上建立索引。

索引是根据指定的一列或多列的内容对行进行排序。索引主要用于提高查询效率,但索引也可以用于逻辑数据设计。例如,主键不允许在同一列中输入相同的值,从而保证了没有一行数据是一样的。

索引可以定义为唯一的或非唯一的。非唯一的索引允许重复的键值,唯一的索引只允许列表中出现一个键值。

6 .别名

别名可以用于引用数据库中的表。如果一个应用程序包含有 SQL 语句,这些语句按照别名存取表,那么可以定义代表不同表的别名,而无须修改应用程序。还可以为一个表或别名定义别名。

在一个数据库中,任何时候别名只能有一个定义。但是,相同的别名可以用在不同的数据库中。同时,可为同一个表或视图创建多个别名。

7 .约束

DB2 提供了几种方法来定义能够存储在列中数据的特性,这些特性被称为约束(constraint)或规则(rule),数据库管理器强制一个数据列或一组列遵守这些约束或规则。

DB2 提供三种约束:

  • 唯一性约束,用于确保列中的值是唯一的;
  • 参照完整性约束,用于定义表之间的关系,并确保这些关系持续有效;
  • 表检查约束,用于验证列数据没有违反为列定义的规则。

8 .事务

事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复序列,通常位于应用程序进程中。事务的启动和终止定义了数据库的一致性点;要么将事务中执行的所有 SQL 操作的结果都应用于数据库,要么彻底取消并丢弃已执行的所有 SQL 操作的结果。

在大多数情况下,通过执行 COMMIT 或 ROLLBACK 语句来终止事务。当执行 COMMIT 语句时,从事务启动开始对数据库所作的一切更改就成为永久性的了——即它们是已提交的。当执行 ROLLBACK 语句时,从事务启动开始对数据库所作的一切更改都被撤销,而数据库返回或回滚到事务开始之前所处的状态。不管哪种情况,数据库在事务完成时都保证能回到一致状态。

9 .锁

锁是一种用来将数据资源与单个事务关联起来的机制,其用途是当某个资源与拥有它的事务关联在一起时,控制其他事务如何与该资源交互。如果一个事务尝试访问数据资源的方式与另一个事务所持有的锁不兼容(稍后我们将研究锁兼容性),则该事务必须等待,直到拥有锁的事务终止为止。这被称为锁等待。当锁等待事件发生时,尝试访问数据资源的事务所要做的只是停止执行,直到拥有锁的事务终止且不兼容的锁被释放为止。

任何时候当一个事务在特定数据资源(例如,表或行)上持有锁时,直到持有锁的事务终止并释放它所获取的所有锁之前,其他事务对该资源的访问都可能被拒绝。如果没有某种适当的锁超时检测机制,则事务可能无限期地等待锁的释放。要避免发生此类情况,可以在数据库的配置文件中指定锁超时值(通过 locktimeout 数据库配置参数)。配置完之后,该参数就控制任何事务将等待获取所请求的锁的时间。如果在指定的时间间隔过去之后还未获得想要的锁,则等待的应用程序接收一个错误,并回滚请求该锁的事务。分布式事务应用程序环境特别容易产生此类超时,可以通过使用锁超时避免这种情况的发生。

在大多数情况下,DB2 数据库管理器在需要锁时隐式地获取它们,因此锁在 DB2 数据库管理器的控制之下。除了使用“未提交的读”隔离级别的情况外,事务从不需要显式地请求锁。实际上,唯一有可能被事务显式地锁定的数据库对象是表对象。

1.4.3  DB2 应用开发的数据库对象

1 . DB2 例程

DB2 例程包含了一个特殊任务相关程序处理和数据库逻辑的数据库对象。通过在多个应用程序中重用公共例程,可以有效地减少开发成本同时提高可靠性。例如,特定的业务逻辑可以包含在单独的例程中,如果相应的业务规范有所更改,只会影响到相应的例程,从而使得应用的改变最小化。

例程是在数据库服务器端定义和执行的,这样,应用程序就可以利用更好的服务器端的能力同时减轻客户端的负担。尤其对于复杂的业务逻辑,因为例程只通过网络发送过程调用和最终结果,不需要将所有的中间数据集送回给客户端,所以可以有效地减少客户端和服务器端之间的网络通信量。

DB2 主要有以下三种函数类型的例程。

  • 存储过程(Stored Procedure):包含访问和修改一个或多个表中数据的专门程序段的数据库对象。在一个存储过程中可以包含多个 SQL 语句,还可以包含程序设计语言中的一些操作处理和逻辑处理。它可以被客户端应用程序或其他例程调用,并由服务器端控制它的管理和执行。
  • 函数(Function):用户可以定制的 SQL 扩展。它可以用 select-list 或者 FROM 子句等 SQL 语句调用。有四种类型的函数:aggregate、scalar、row 和 table 。相对于存储过程来说,函数通常包含简单的操作,只需在执行时动态编译即可。
  • 方法(Method):方法为结构类型定义了逻辑行为,这种结构类型包含一个或多个本身是某种数据类型的命名属性。

2 . DB2 SQL 函数

数据库函数是一组输入数据和一组数据结果集之间的关系。在 DB2 中,SQL 语句可以直接调用的函数包括以下几类。

(1)内建函数(Built-in function)

内建函数是由 DB2 自身提供的。它们提供一个单一的结果值并且是定义在 SYSIBM 模式下。主要分为三种类型:

  • 算术函数符和字符串运算符:+、- 、*、/、= 等;
  • 标量函数:substr、length、days、sign 等;
  • 列函数:avg、count、min、max、stdev、sumd 等;
  • 表函数:只能在 SELECT 的 FROM 子句中调用,返回一个含有多行数据的表,类似于常规创建的表。

(2)用户自定义函数(User-defined function)

通过 CREATE FUNCTION 语句创建,并注册到数据库的 SYSCAT.FUNCTION 视图中。用户自定义函数和 SYSIBM 模式毫无关系,DB2 提供了一个类似的模式 SYSFUN 用于此类函数的定义。

DB2 支持用户将自定义的函数注册到数据库引擎中以扩展数据库系统的功能。这些函数的应用程序往往比仅从数据库中存取访问数据的应用程序的性能更好。例如,数据库中可能用美元(U.S)来记录一个产品的价格,但是我们需要一个特殊的应用程序将价格转为由英镑(U.K)表示,那么我们可以用一个函数来完成这个任务:

SELECT unit_price, currency( ‘ UK ’ , unit_price) from produc where product_id= ?

用户自定义函数可以分为两类:有源函数(sourced function)和外部函数(external function)。有源函数是利用一个已有的函数(源函数)创建的函数;而外部函数是指其函数体是由用户采用某种宿主程序涉及语言编写的函数,可以采用 C,C++ 和 JAVA 等语言实现。但是,外部函数只能在其输入参数上进行某些计算或通过参数与外界传递某些数据,不能存取或修改数据库。

3 .游标

(1)什么是游标

游标是一种用于操纵多行 DB2 查询结果集的数据库对象。通常,操作所涉及的行数预先并不知道,所以 DB2 使用游标指定被提取的行。因此我们在以下两种情况下需要游标。

  • 当一个查询返回的结果不止一行时;
  • 当需要更新或删除不止一行的数据,但是需要预先检验数据时。

要使用游标,首先必须声明它(DECLARE),打开它(OPEN),然后使用它从结果集中逐行取出或者更新数据(FETCH),最后关闭它(CLOSE)。

(2)如何使用游标

对游标最基本的支持是由 SQL 语言提供的,我们可以通过 DECLARE CURSOR、OPEN、FETCH 和 CLOSE 语句使用游标。

不同的宿主语言对 SQL 游标接口不同。在静态和动态嵌入式 SQL 编程中,传统的编程语言如 C,C++ 和 COBOL 对游标的声明和使用提供了明确的支持。每次只可以按照同方向操作一行数据。

SQL 过程语言对游标的支持和 C 语言类似,同时,由于对 WITH RETURN 子句的支持,SQL 过程语言可以返回一个结果集给调用它的存储过程。

在 DB2 调用级接口(CLI)中,游标并不是被明确声明的。但是,在 SQLExecute() 或者 SQLExecDirect() 函数被调用时,CLI 会自动地创建游标。 CLI 在游标的支持上增加了一些附加的能力,例如,可以使用游标进行回滚,利用游标一次接收多行的数据,以及游标向前移动多行的能力等。

在 JDBC 中,游标同样也是在 ResultSet 对象创建时,被动态创建的。其附加的能力和 CLI 类似。 SQLJ 中游标的支持本质上来说是 JDBC 和 SQL 的混合体,但是,在 SQLJ 中,游标等价于 iterator 。

DB2 命令行处理器(DB2 CLP)和 DB2 控制中心不允许直接使用游标。然而,这些工具本身就在使用游标,当在 DB2 CLP 中执行一条 SELECT 语句或者在控制中心中访问一张表时,游标会在返回行时被隐式调用。

4 . DB2 提供的 SQL 函数

DB2 提供了大量的 SQL 函数,在本小节中,我们仅举几个例子来看一下 DB2 提供的 SQL 函数是如何使用的。更多的函数及更加详细的信息可以查阅 DB2 帮助中心。

(1)LENGTH 函数

SELECT CompanyName, LENGTH(CompanyName) FROM CUSTOMERS

返回的结果为公司的名称,以及此公司名称的字符长度。

(2)RIGHT 函数

SELECT RIGHT(employeename, 5) FROM AUTHORS

返回的结果为每个作者名字的最右侧的 5 个字节。

(3)COALESCE 函数

SELECT title, COALESCE(price, 0.00) AS price FROM titles;

返回的结果为所有书的名称和价格。如果某本书有书名,但是价格却为 NULL 时,价格将会显示为 0.00 。





回页首


1.5  DB2 常用命令简介

1 . db2level

db2level 返回 DB2 的补丁版本(FixPak)信息,它的输出能反应出当前 DB2 真实的版本信息,如图 1.35 所示。


图 1.35 db2level 命令
图1.35  db2level命令

2 . db2start/db2stop

db2start 用于在单节点或多节点环境中启动当前数据库管理实例的后台进程。在与数据库进行连接、预编译应用程序或绑定程序包到数据库之前,需要先启动 DB2 服务器,如图 1.36 所示。


图 1.36 db2start 命令
图1.36  db2start命令

db2stop 用于停止当前数据库管理器,如图 1.37 所示。


图 1.37 db2stop 命令

3 . db2set

具有 SYSADM 的用户才可以使用 db2set 在 DB2 中设置注册和环境变量。如:db2set DB2COMM=TCPIP 。更多的命令如表 1.2 所示。

表 1.2 DB2 常用命令

实例级

CLP命令描 述
get dbm cfg返回数据库管理器配置设置
get dbm cfg show detail显示数据库管理器参数的当前值和延迟值(从 V8 起)
update dbm cfg using <p> <v>将数据库管理器配置参数 <p> 更新为值 <v>
get instance返回 DB2INSTANCE 环境变量的值
list active databases列出活动的数据库和连接数
list application [show detail]返回关于当前连接的应用程序的信息
force application (h1 [,h2,..,hn])根据句柄号与特定应用程序断开连接
force application all断开所有应用程序与数据库的连接
attach to <node>
user <userid> using <pwd>
以用户 <userid> 通过使用密码 <pwd> 与标识为 <node> 的远程实例连接

数据库级

create database <dbname>创建名为 <dbname> 的数据库
activate database <dbname>显式地激活数据库
deactivate database <dbname>显式地使数据库失效
connect to <dbname> [ [user <userid>] using <pwd>]根据需要,显式地以用户 <userid> 和密码 <pwd> 与数据库 <dbname> 连接
update dbm cfg using <p> <v>将数据库管理器配置参数 <p> 更新为值 <v>
connect reset断开与当前数据库的连接
get db cfg show detail显示数据库配置参数的当前值和延迟值(从 V8 起)
get db cfg for <dbname>返回数据库 <dbname> 的数据库配置设置
update db cfg for <dbname> using <p> <v>将数据库 <dbname> 的数据库配置参数 <p> 更新为值 <v>
list tables[for {user | all | system | schema <schemaname>}][show detail]列出数据库中的表。如果没有指定任何参数,则默认情况是列出当前用户的表
describe table <tablename>显示一个表或视图的列信息
list tablespaces [show detail]显示表空间的标识、名称、类型、内容和状态
list tablespace containers for <tablespace_id> [show detail]显示用 <tablespace_id> 指定的表空间的容器信息
quiesce tablespaces for table <tablename> reset将表空间的状态复位成正常(normal)

连接性方面

catalog [admin] <protocol> node …为协议 <protocol> 在节点目录中创建一项
list [admin] node directory返回节点目录的内容
catalog database <dbname> …为数据库 <dbname> 在数据库目录中创建一项
list database directory [on <path>]返回数据库目录的内容

性能方面

get monitor switches返回会话监控开关的状态
update monitor switches using <monitor> <on|off>为 <monitor> 设置会话监控开关的状态

续表

reset monitor all复位性能监控程序值
get snapshot for dbm返回实例级别的快照
get snapshot for all on <dbname>为数据库 <dbname> 在数据库级别返回所有方面的快照
get snapshot for dynamic sql on <dbname>返回动态 SQL 高速缓存的快照
runstats on table <tbschema>.<tbname>收集表 <tbname> 的统计信息,表名必须是用 <dbschema> 全限定的
reorgchk on table all确定是否需要对表进行重组,这对于对所有表自动执行 runstats 很有用
reorg table <tablename>通过重构行来消除“碎片”数据并压缩信息,对表进行重组

管理方面

load query table <tbname>
[to local-message-file][nosummary | summaryonly] [showdelta]
返回 LOAD 实用程序的进度
backup database <dbname> [to <path>]执行数据库备份
restore database <dbname> [from <path>]执行数据库恢复
get health snapshot for dbm返回实例的正常快照信息(从 V8 起)
get health snapshot for all on <dbname>返回数据库 <dbname> 的所有正常快照(从 V8 起)

管理服务器方面

get admin cfg返回管理服务器的配置设置
update admin cfg using <p> <v>将管理服务器配置参数 <p> 更新为值 <v>

应用程序开发方面

get routine into <filename> from [specific] procedure <routine-name>[hide body]将 SQL 过程抽取成二进制文件
put routine from <filename> [owner <newowner>[use registers]]从二进制文件部署 SQL 过程





回页首


1.6  DB2 应用开发编程方法

DB2 没有自己的程序设计语言,但是,它允许通过多种方式传递 SQL 语句,从而操纵数据,同时,它还提供了一系列的应用程序编程接口来管理和执行数据库操作。我们可以使用多种程序设计语言和第三方开发工具来进行应用程序的开发。

在本节中,我们从基于驱动的 API 编程和嵌入式 SQL 编程两个方面来概括地介绍基于 DB2 的应用程序的开发,更加详细的内容请参见后面相应的章节。值得注意的是,虽然本书是以 DB2 V9 的版本来讲解 DB2 应用程序的开发和相关实践,但是大部分内容对于 DB2 V8 和更早的版本也是同样适用的。

1.6.1  基于驱动的 API 编程

虽然大多数的数据库厂商都支持嵌入式 SQL 的数据库访问,但是如果想使用相同的源代码在不同的数据库系统中配置嵌入式 SQL 应用,还需要做一些额外的工作。程序必须用不同数据库厂商的预编译器重新进行预编译,数据访问计划也必须根据不同的目标数据库生成并绑定。为了提高应用程序的便捷性,我们将在本节中介绍基于驱动的解决方案。

基于驱动的解决方案的核心是驱动管理器(driver manager)。驱动管理器提供了一系列符合工业标准的应用编程接口(APIs)来访问数据源。因为驱动遵守统一的标准,所以应用程序可以轻松地使用正确的驱动程序来访问不同厂商的数据源。

1 . JDBC 和 SQLJ

DB2 为多种不同类型的 Java 程序提供支持,包括 applet、应用程序、jsp/servlet/j2ee 和高级 DB2 服务器端特性。存取和操纵 DB2 数据库的 Java 程序能够使用 Java JDBC API 或 Java 嵌入式 SQL(SQLJ)标准。这些都是与厂商无关的 SQL 接口,它们使应用程序能够通过标准化的 Java 方法存取数据。

JDBC 是一种调用动态 SQL 访问关系型数据库的标准 API,并拥有一套强有力的面向对象接口。其基本访问过程为:JDBC 将动态 SQL 语句传递给 DB2 提供的 JDBC 驱动,DB2 通过 JDBC API 执行 SQL 语句,并将结果返回到 Java 代码中。 JDBC 和 DB2 CLI 类似,使用动态 SQL,因此不需要预编译或绑定 JDBC 程序。

而 SQLJ 程序是将 SQL 语句嵌入到 Java 源代码中,其中包含的是静态 SQL 语句,所以要完成和预编译及绑定类似的步骤。在编译 SQLJ 源文件之前,必须用 SQLJ 翻译器将其翻译成本机的 Java 源代码。翻译结束后,必须使用 DB2 为 Java 提供的 Java 配置文件定制器(db2profc)创建 DB2 程序包。 SQLJ 底层是使用 JDBC 驱动程序实现的。

在 Java 类应用程序的开发中,可以通过表 1.3 的比较,选择合适的方法进行开发。

表 1.3 JDBC 与 SQLJ 的对比

JDBC SQLJ
通过 API 调用执行 SQL嵌入式 SQL
动态 SQL静态 SQL
不需要预编译需要通过预编译创建程序包
代码相对较多程序所需代码少,易于调试
在编译时对传入的 SQL 的值不进行检查编译时进行语义检查和语法检查
对传出的 SQL 的值不进行检查对查询结果和返回值提供强类型检查
SQL 语句隐藏在程序中嵌入的 SQL 语句与独立的 SQL 语句一样
对执行前不确定的数据对象有利由于静态 SQL 的限制,不利于处理执行前不确定的对象

在本书的第 2 章将会详细介绍 DB2 对 JDBC 访问的支持。

2 . OLE DB 和 ADO.NET

OLE DB 是 Microsoft 的数据访问模型。它由一系列访问异构数据源的统一数据访问接口组成,其中包括关系型数据源和非关系型数据源。 OLE DB 由 OLE DB 的提供者和 OLE DB 的消费者组成。 DB2 支持这两种角色。 IBM OLE DB 通常将 DB2 设置成 OLE DB 提供者。这样,本地的驱动就可以从 OLE 接口中读取 DB2 的数据了。

DB2 服务器也可以作为 OLE DB 消费者来访问 OLE DB 的相关数据源,例如数据表格。当然,DB2 服务器也可以作为 OLE 提供者为 OLE DB 消费者提供数据,如图 1.38 所示。


图 1.38 OLE 提供者与消费者之间的关系
图1.38  OLE提供者与消费者之间的关系

ADO.NET 是微软提供的一个全新的数据访问模型。它包含了它的前身(ADO)的最佳特征。它支持传统数据库访问,并融合了对 XML 等类型数据的高度支持。 .NET 应用程序可以通过三种不同的方法访问 DB2 数据库,如图 1.39 所示。


图 1.39 ADO.NET 访问 DB2 数据库

3 . CLI 和 ODBC

DB2 调用级接口(CLI)是由 IBM 提供的一种 SQL 编程接口。它使用 DB2 提供的 C/C++ 应用程序编程接口(API),将 SQL 语句作为参数传递给数据库来进行存取数据库的操作。

我们可以像嵌入式动态 SQL 一样,使用 DB2 CLI 进行动态的 SQL 应用程序的开发。在这两种情况下,SQL 语句都是在运行的时候动态准备和执行的。但是,嵌入式动态 SQL 需要预编译,而在 DB2 CLI 中,SQL 语句通过直接的 API 调用执行,因此 CLI 程序不需要预编译;而且,CLI 应用程序使用 DB2 提供的公共包,因此也不需要单独的绑定程序模块。我们只需编译应用程序并将其绑定到 DB2 CLI 驱动库即可。

DB2 CLI 是基于微软的 ODBC 和 X/Open 标准的。在 ODBC 的环境中,应用程序通过 ODBC 驱动管理器访问数据库服务器,ODBC 管理器为应用程序动态地加载访问数据库必要的驱动。 ODBC 还提供了多种级别的函数支持。

要使用 DB2 CLI 来开发应用程序,我们需要有 DB2 应用程序开发的客户端。它包括了编译和连接 CLI 应用所有必须的头文件和库文件。另一方面,开发一个 ODBC 应用也需要微软的 ODBC 开发软件包。

我们可以通过图 1.40 比较一下 DB2 CLI 和 ODBC 环境。


图 1.40 DB2 CLI 和 ODBC 环境的对比
图1.40  DB2 CLI和ODBC环境的对比

1.6.2  嵌入式 SQL 编程

DB2 为用户提供了多种编程方法。其中一个最直接的方法就是采用嵌入式 SQL 编程。这种编程方法之所以直接就是因为访问 DB2 的 SQL 语句会被直接的写到程序中。程序可以用 C/C++、FORTRAN、COBOL 和 Java(SQLJ)等程序设计语言来编写。其所使用的程序设计语言也被称为宿主语言(host language)。

嵌入式 SQL 语句的结构由宿主语言所决定。在 C/C++ 和 FORTRAN 中,嵌入式 SQL 语言的前缀是:EXEC SQL 。

EXEC SQL SELECT EMPNO, FIRSTNME, LASTNAME 
 FROM ADMINISTRATOR.EMPLOYEE AS EMPLOYEE 
 ORDER BY EMPLOYEE.EMPNO ;

在 COBOL 中,嵌入式 SQL 语句和 C/C++ 非常类似,只是在语句的结尾需要增加 END-EXEC 的后缀。

EXEC SQL SELECT EMPNO, FIRSTNME, LASTNAME 
 FROM ADMINISTRATOR.EMPLOYEE AS EMPLOYEE 
 ORDER BY EMPLOYEE.EMPNO  END-EXEC ;

在 Java 中的嵌入式 SQL 语句和上述两种不同,如下所示。

#sql [myConnCtx] { 
		  SELECT EMPNO, FIRSTNME, LASTNAME 
		  FROM ADMINISTRATOR.EMPLOYEE AS EMPLOYEE 
		  ORDER BY EMPLOYEE.EMPNO  
		 }

嵌入式 SQL 语句分为两种类型:静态 SQL 语句和动态 SQL 语句。

1 .静态 SQL

静态 SQL 开发中嵌入在宿主语言中的 SQL 语句在程序运行前就已经确定下来了,唯一未知的是语句要查询和更新的数据。也就是说,在静态 SQL 要访问的表名和列名是必须存在的。

由于宿主语言的编译器不能识别 SQL 语句,所以首先需要对包含静态 SQL 语句的源文件进行预编译,预编译器将源文件中的 SQL 语句注释掉,对它们生成 DB2 运行时 API 调用。

预编译器会将生成的数据访问计划存储在相应数据库的程序包中,这个程序包会在应用程序调用相应的 SQL 语句时得到访问。因为在程序运行过程中,没有 SQL 语句编译的开销,静态的 SQL 程序在运行的时候开销往往比较小。

DB2 使用数据库的统计信息和配置参数来评估和获取数据访问计划。在数据库的配置发生改变的时候,先前生成的访问路径不一定反映数据库的真实状况,所以,访问计划可能不再是最优的了。因此,静态 SQL 语句最好在模式变动不大的数据库中运行。

2 .动态 SQL

动态 SQL 开发中的 SQL 语句是在程序运行的过程中构建并执行的,适合于必须在运行期间指定事务的交互式应用程序。

动态 SQL 同样也需要进行预编译,但是因为动态 SQL 语句中引用的数据库对象是在程序运行过程中获取到的,在预编译时还无法确定,所以在程序实际运行时才能完成绑定最优的存储方案。

为了将预编译的开销最小化,DB2 提供了一种包缓存的机制将最常使用的访问计划保存在内存中。这种包缓存机制能够有效降低重复的 SQL 预编译需求。

动态 SQL 使用的都是当前数据库的统计信息,其最优化的访问路径是在执行动态 SQL 语句的时候确定的。因此,生成的访问路径可以准确地反映当时的数据库情况。

3 .静态 SQL 和动态 SQL 的比较

表 1.4 表示静态 SQL 与动态 SQL 的对比。

表 1.4 静态 SQL 与动态 SQL 的对比

静态SQL 动态SQL
SQL 语句的结构是已知的,所引用的列,表和数据类型是必须明确的。变量值只可以在 WHERE 子句中使用SQL 语句结构在预编译的时候是未知的。 SQL 语句存储在某个变量中并在程序运行中被引用。所以动态 SQL 语句为程序提供了更好的灵活性
数据访问计划是在预编译的时候,生成的程序包持久稳固地存储在数据库中。如果 SQL 语句只是偶尔使用,静态 SQL 可能在运行时获得比动态 SQL 更好的性能数据访问计划是在运行中生成的,并被存储在内存的包缓存中。如果相同的 SQL 语句被重复执行时,缓存中的访问计划可以被重复的使用。因此,动态 SQL 的性能不一定比静态 SQL 差。然而,第一次执行动态 SQL 时开销很大
在预编译时,使用数据库的统计信息和配置参数生成最优的访问计划在运行时,使用数据库的统计信息和配置参数生成最优的访问计划可以更准确地反映当时数据库的状况

另外,由于 PHP 在开源领域中非常流行并且实用,因此在后面的章节中,针对 PHP 和 DB2 的数据库应用开发做了专门地介绍,同时,对于 DB2 V9 中如何应用新的 XML 特性来更灵活有效地进行数据库应用开发,也有单独章节进行讲述。





回页首


1.7  本章小结

IBM 从 20 世纪 80 年代就成为了数据库领域的领导者。本章首先以 DB2 历史发展为主线介绍 DB2 通用数据库产品。

  • DB2 V7:主要介绍了 DB2 的版本;
  • DB2 V8:主要介绍了 V8 中新增加的版本:DB2 Express 版和 WebSphere Information Integrator 等;
  • DB2 V9:除了延续以前版本对 DB2 数据库的管理特性外,DB2 V9 还提供了新的查询语言、新的存储、索引技术,以及支持 XML 数据及其固有层次结构的其他特性,并简要地介绍了 DB2 V9 提供的新特性。

然后,在 1.2 节中详细介绍了 DB2 V9 的新特性。 DB2 V9 引入了一种可以同时管理 pureXML 和关系型数据的混合型引擎,其对 XML 提供了更多的支持。同时,还提供了更易于维护的特性、更多的分区支持、更佳的安全性,以及数据库设计方面的行压缩技术。

在 1.3 节中,以 DB2 V9 的安装为例,介绍了利用 DB2 安装向导进行安装的过程。 DB2 安装向导可以将安装所选择的所有参数存储在响应文件中,可以使用响应文件进行透明式安装。在安装结束后,以创建第一个数据库为例,简单介绍了 DB2 的基本使用。

在 1.4 节从三个角度描述了 DB2 工具及相关数据库对象。首先介绍了 DB2 图形化工具,主要包括控制中心、健康中心、复制中心和开发中心等;接着介绍了 DB2 的数据库对象,DB2 定义了多种类型的用于存储和表示信息的基本成员和对象,主要包括其中的数据类型、模式、表、视图、索引、别名和约束等;最后着重介绍了 DB2 应用开发的数据库对象,应用开发的数据库对象是 DB2 应用编程的基础;在本节中,还介绍了 DB2 例程(包括存储过程、函数和方法)、DB2 SQL 函数、游标,以及 DB2 提供的 SQL 函数。

在 1.5 节中,介绍了 DB2 的命令行中的常用命令。主要从实例级、数据库级、连接性和性能等方面对常用的命令进行了分类,以便于读者查找和使用。

本章的最后,介绍了 DB2 应用程序的开发方法。 DB2 为应用程序的开发人员提供了多种编程方法。主要分为两大类,一类是使用基于驱动的 API 进行编程,根据所使用的开发工具不同,将其分为三种类型:第一种是 Java 的编程接口(JDBC 和 SQLJ),第二种是微软的数据对象(OLE DB 和 ADO.NET),第三种是调用级接口(CLI)和开放数据库连通性(ODBC)。另一类是使用嵌入式 SQL 进行编程,嵌入式 SQL 语句有两种类型:静态 SQL 和动态 SQL,主要讨论了两者的基本概念及区别。另外,在后面章节也将详细讲述 PHP 结合 DB2 的应用开发,以及如何应用 DB2 V9 XML 新技术来更灵活有效地进行应用开发。



读者反馈

欢迎您对本书提出宝贵的反馈意见。您可以通过本页面最下方的 建议 栏目为本文打分,并反馈您的建议和意见。

如果您对 developerWorks 图书频道有什么好的建议,欢迎您将建议发给我们



参考资料

学习

获得产品和技术
  • 现在可以免费使用 DB2 。下载 DB2 Express-C,这是为社区提供的 DB2 Express Edition 的免费版本,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。

  • 下载 信息管理软件试用版,体验它们强大的功能。


讨论


作者简介

管松,现为IBM中国软件开发中心企业内容管理产品(Content Manager)开发经理,毕业于中国科学院软件所,加入IBM研发中心工作后涉及领域包括Websphere Commerce,主机上的DB2数据库系统等。


肖振春,IBM中国软件开发中心高级工程师,毕业于北京航空航天大学。从事数据库领域信息整合和数据复制方面的工作,熟悉DB2应用开发和性能调优。


张建伟,IBM中国软件开发中心高级工程师,毕业于北京大学,从事主机上DB2研发工作。熟悉DB2内部实现,精通DB2 JDBC/SQLJ驱动程序。


林光国,IBM中国软件开发中心高级工程师,毕业于清华大学。曾作为IBM开发中心的首批DB2/i工程师在iSeries (AS400)平台上从事开发工作。目前任职于IBM Linux解决方案中心,从事企业应用方案的售前技术支持。


王东明,IBM中国软件开发中心高级工程师,毕业于南开大学,负责数据库领域IBM企业内容管理产品的开发和技术支持。个人技术兴趣主要在数据库系统和应用开发,Web应用开发领域。


闫庆宏,IBM中国软件开发中心工程师,毕业于东北大学。从事DB2主机研发相关的工作,参与PHP实际项目的开发。


李尚强,IBM中国软件开发中心高级工程师,毕业于清华大学。从事数据库领域内容管理方面的工作,熟悉DB2应用开发和性能调优。


王庆法,IBM中国软件开发中心高级工程师,毕业于清华大学,拥有10年以上软件开发经验。从事数据库领域信息整合方面的工作,熟悉DB2内部实现、XML及信息整合的架构。




对本文的评价








IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款