免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3912 | 回复: 1

[转]用于 iSeries V5R2 的 DB2 通用数据库中有什么新增功能 [复制链接]

论坛徽章:
0
发表于 2003-01-19 21:08 |显示全部楼层
用于 iSeries V5R2 的 DB2 通用数据库中有什么新增功能
Kent Milligan
DB2 UDB 技术专家
IBM 罗彻斯特
2002 年 8 月


  
简介


SQL 作为业务数据访问语言的真正强大之处在于,它通过允许您用单一请求完成更多工作,并允许您将部分业务处理转移到数据库引擎本身,从而简化了编码。由于 SQL 是数据库访问的业界标准,所以通过在数据库服务器之间移植和重用现有的基于 SQL 的业务逻辑,您也会从中受益。iSeries™ V5R2 上的 DB2® Universal Database™(UDB)引入的新功能继续构建在 SQL 的这些优点之上。

V5R2 用一些新特性扩充了 DB2 UDB for iSeries 的 SQL 能力,这些特性旨在向应用程序开发人员提供更多的灵活性,并帮助消除将非 DB2 解决方案合并和移植到 iSeries 时所涉及的常见障碍。通过对字段引用文件、可切换的数据库群集以及 iSeries Navigator 图形界面的扩展提供 SQL 支持,V5R2 还简化了 DB2 UDB for iSeries 的管理。


SQL 增强功能


SQL 是一种功能强大且不断更新的编程语言。其频繁增强的功能使得让 DB2 完成更多的工作成为可能。

标识列
当新的行(或记录)插入到表中时,通过告知 DB2 自动递增列值,标识列可以用于生成人工或代理键值。不必创建递增下一个标识或编号值的代码,可以让 DB2 UDB 完成这个工作。如下所示,通过对用小数位为零的数值数据类型(numeric、decimal、integer、smallint、bigint)创建的列指定标识选项,您可以创建标识列。

CREATE TABLE employee (
   empid INTEGER GENERATED ALWAYS AS IDENTITY
                     (START WITH 10 , INCREMENT BY 10)
   name CHAR(30),   dept  CHAR(4))
正如您看到的,标识(IDENTITY)选项允许您控制初值和递增值。第一个插入到该表中的雇员记录被分配值为 10 的雇员标识,第二个插入的雇员记录的标识为 20,依此类推。为确保该值是唯一的,您必须对标识列定义唯一性约束或索引。一张表只能有一个标识列。

视图中的 UNION
在视图中支持合并(union)也允许您将一些编程工作转到 DB2 上。如果数据库在独立的表中存储了每年的销售历史数据,那么任何时候当最终用户想查看数年的销售历史时,他们必须记住通过使用 UNION 将每个销售历史表包含到他们的报告或查询中。不必强制最终用户或程序员记住组合(合并)所有的销售历史表,可如下创建单一 SQL 视图以简化这个过程。

CREATE VIEW sales_history AS (
  SELECT COUNT(*), SUM(total_sale) FROM sales1999
     WHERE product_id = 'XYZ'  
  UNION ALL
   SELECT COUNT(*), SUM(total_sale) FROM sales2000
      WHERE product_id = 'XYZ'  
  UNION ALL
    SELECT COUNT(*), SUM(total_sale) FROM sales2001
       WHERE product_id = 'XYZ'  )
现在最终用户和程序员只有一个他们必须引用的对象 sales_history,而且他们可以依靠 DB2 相应地将所有的销售历史表组合在一起。自 V5R2 起,在公共表表达式和派生表中也支持合并。

除去了 ORDER BY 限制
有一个较小的 V5R2 增强也能使移植和编码更容易,那就是除去对 ORDER BY 的限制,这个限制要求用于对查询结果排序或分类的任何列也必须包含在该结果中。以下语句在 V5R1 中是不允许的,但 V5R2 支持它。

SELECT name, jobcode FROM employees ORDER BY dept
移植工具
除了增强 iSeries SQL 支持外,IBM 还开始创建数据库转换工具,使它们可用于将其它数据库上的 SQL 转换成受 DB2 UDB 支持的 SQL 语法。通过使部分 DB2 移植过程自动进行,这些工具使合并解决方案变得更容易。由于每种 DB2 UDB 产品之间都存在细微差别,因此由 Microsoft SQL Server 以及 Sybase 工具所产生的 SQL 可能需要针对某个 iSeries 目标做一些定制。使 Oracle 工具生成专门用于 iSeries 的 SQL 的工作正在进行中。在 http://www.iseries.ibm.com/developer/db2/porting.html 中可以找到有关这些 DB2 转换实用程序的更多详细信息。

公共目录视图
通过添加了几个新的目录视图,改进了与其它 SQL 数据库的通用性,这些目录视图定义在最新的 SQL 标准 — ISO International Standard (IS), Information technology - Database language SQL, ISO/IEC 9075-1:1999(1999 年 7 月)中。另外,iSeries 还支持 SYSIBM 库中的一组用于 ODBC 和 JDBC™ 客户机的新目录视图,整个 DB2 UDB 系列也支持这些视图。这组新的目录视图将使基于 ODBC 和 JDBC 的工具供应商更方便地支持整个 DB2 UDB 系列。

跨 DB2 的兼容性特性
与其它 DB2 UDB 产品的兼容性是每个 iSeries 发行版的主要关注点,V5R2 也不例外。这些 DB2 UDB 兼容性增强功能不仅仅满足于一个检查表;它们还向应用程序开发人员提供了一组更为丰富的 SQL 功能。一些比较有趣的 V5R2 增强功能改进了 DB2 UDB 的兼容性,它们支持:

全局临时表
用户定义的表函数
对 SQL 过程语言的增强
CREATE TABLE AS
声明的临时表
DECLARE GLOBAL TEMPORARY TABLE 语句支持临时表的创建,在连接或作业结束时,DB2 UDB 会自动清除该临时表。以下是一个 SQL 语句示例,您可以用它来创建声明的全局临时表:


DECLARE GLOBAL TEMPORARY TABLE temp_projects (
   projno INTEGER,
   name CHAR(30),
   deadline TIMESTAMP)
ON COMMIT PRESERVE ROWS
如果您对使用这个语句是否必要抱有疑虑,并认为可能只需使用 OS/400® QTEMP 库中创建表的 CREATE TABLE 语句,则对此的回答是:SQL 应用程序开发人员更熟悉 DECLARE TABLE 语句,而且他们不知道如何拼写 QTEMP!

用户定义的表函数
用户定义的表函数(UDTF)补充了 V4R4 用户定义的标量函数(UDF)支持。标量函数意味着该函数只能返回单一值(或结果)。尽管在某些情况中 UDF 返回单一值也是可行的,但另外一些情况必须返回多个值。UDTF 满足了这个需求,它返回一张表或一个结果集。以下是返回一列指定部门的雇员信息的 SQL UDTF:

CREATE FUNCTION deptemployees (deptno CHAR(3))
  RETURNS TABLE (emp# CHAR(6), lastnm CHAR(15), firstnm CHAR(12))
  LANGUAGE SQL
  DISALLOW PARALLEL
  RETURN
      SELECT empno, lastname, firstname
          FROM employee WHERE employee.workdept = deptemployees.deptno

SELECT * FROM TABLE(deptemployees('503'))
创建了 UDTF 之后,就可以如上所示将它放置在允许表引用的 SQL 语句的任何位置。您可以将 UDTF 看作仅在引用诸如 SELECT 或 UPDATE 之类的 SQL 语句期间创建临时表。与 UDF 类似,用户定义的表函数可以用 SQL 或外部编程语言来创建。UDTF 也使受欢迎的 DB2 XML Extender 在 V5R2 中更强大,因为它包含了几个处理 XML 数据的 UDTF,当它们首次可用时,在 V5R1 上显然不可用。

对 SQL 过程语言的增强
您可以在 SQL UDTF、UDF 以及触发器和存储过程中使用 SQL 过程语言。添加的最重要的功能是支持嵌套的复合语句。嵌套的复合语句使您能将相关语句一起捆绑到 SQL 过程、触发器或函数内它们自己的执行块上。这种对语句的捆绑(或称为模块化)向应用程序开发人员提供了更大的灵活性,并允许采用更佳的代码结构来降低应用程序的长期维护费用。

在创建出错处理代码时,嵌套的复合语句特别有用。在前几个发行版中,SQL 处理程序只能执行一个 SQL 语句来实现出错处理,除非您想使用包含 LOOP 语句的繁琐语句。SQL 处理程序在 V5R2 中仍只允许一个 SQL 语句,但该单一语句现在可以是嵌套的复合语句。下面的示例说明了每当遇到 SQL 异常时,SQL 处理程序如何使用嵌套的复合语句来设置两个局部变量的值。

CREATE PROCEDURE ComputeShipping (in order# integer, out costs decimal(6,2) )
LANGUAGE SQL
  BEGIN
    DECLARE ShipCosts DECIMAL(6,2);
    DECLARE ErrorSQLState CHAR(5);
   
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
      BEGIN
      SET ErrorSQLState=SQLSTATE;
      SET ShipCosts=NULL;
     END;
...
   SET ShipCosts=SELECT SUM(ItemWeight)*2.00 FROM orders WHERE ordid=ordernum;
...
   
END
V5R2 中 SQL 过程语言的其它几个改进之处包括:支持 ITERATE 语句和在单一处理程序上指定多个条件的能力。

一个使 SQL 和外部存储过程都受益的增强功能是通过 DRDA 在两个 iSeries 服务器之间传递存储过程结果集的能力。自 OS/400® 的 V3R1 以来,运行在 PC 或 UNIX® 服务器上的 ODBC 和 JDBC 应用程序已能接收由 iSeries 服务器返回的结果集,但是运行在 iSeries 上的应用程序至今也不能接收在 iSeries 上运行的应用程序的结果集。有些 iSeries 客户出于安全性的原因要在单独的 iSeries 服务器上运行 Web 或 Donimo™ 服务器,并在需要数据时,通过 DRDA 连接访问他们生产 iSeries 服务器上的业务数据,对于这些客户,这一限制就有问题。存储过程对于通过 DRDA 连接检索业务数据是个常见选择,但是结果集约束限制了这个选项的执行。现在使用 V5R2,两个 iSeries 服务器之间的存储过程调用就可以使用结果集来简化返回的业务数据。

对 CREATE TABLE AS 的支持
CREATE TABLE AS 语法让您用一个 SQL 语句创建和填充工作表或汇总表,如下所示:

CREATE TABLE SalesByRegion AS
  SELECT region, SUM(to_sales) FROM sales GROUP BY region
  WITH DATA
DB2 UDB 处理嵌套的 SELECT 语句,以获得需要在指定表中创建的列定义(类型和长度),而且 WITH DATA 子句告知 DB2 UDB 运行指定的 SELECT 语句并将结果放在新建的表中。

为最初的 iSeries 程序员提供的增强功能
传统的(或最初的)iSeries 程序员会发现几个更容易让他们在 iSeries 上转而使用 SQL 的增强功能:

与许可程序产品无关
更简单的 SQL 调试
对字段引用文件的 SQL 支持
SET SCHEMA 支持
与许可程序产品无关
对利用 SQL 过程、触发器和函数感兴趣的 iSeries 程序员再也不必首先要说服他们的老板购买 DB2 SQL 开发工具箱(DB2 SQL Development Kit)产品了。在首次引入 SQL 存储过程时,程序员首先必须购买和安装 DB2 SQL 开发工具箱及 ILE C 编译器。V5R2 的实现与 LPP(许可程序产品)无关。

更简单的 SQL 调试
那些已经使用 SQL 过程、函数和触发器来实现业务过程的传统 iSeries 程序员会证明与这些 SQL 对象关联的调试很困难。在创建 SQL 过程、函数或触发器时,DB2 UDB 生成实现特定逻辑的 C 程序对象。如果您想调试这些 SQL 对象,必须单步执行由 DB2 UDB 生成的 C 代码,对 RPG 或 COBOL 程序员来说,这不会是一次愉快的经历。为了在 V5R2 中改进调试过程,已经提供了一种 SQL 源代码级调试器,这样您只会看到您编码的 SQL 语句并对其进行调试。通过将 SQL 语句 SET OPTION DBGVIEW=*SOURCE 嵌入到您的 SQL 过程、触发器或函数定义内就可以激活 SQL 源代码级调试器。

对字段引用文件的 SQL 支持
对字段引用文件的 SQL 支持是一个受到传统 iSeries 编程社区欢迎的新功能。字段引用文件允许重用诸如“city”或“phone number”之类的公共字段的 DDS 定义,而不是在多个物理文件定义中重复这些 DDS 定义。SQL 的 CREATE TABLE 语句与字段引用文件没有任何等价性,因此要将物理文件定义转换成 SQL 就很难。在 V5R2 中已用特殊语法增强了 CREATE TABLE 语句,以使存储在字段引用文件中的公共字段定义可用于 SQL 表。

下面的 SQL 语句演示了如何使用这个新语法来创建重用字段引用文件 ref_file 中的标识(id)、姓(lname)、名(fname)以及所在城市(city)定义的客户(customer)表。

CREATE TABLE mylib/customer AS
  SELECT id cust_id, lname cust_lastname,  fname cust_firstname, city cust_city
     FROM reflib/ref_file
  WITH NO DATA
如果城市字段定义在引用文件中是 30 个字节的字符字段,则 cust_city 在客户表中定义为 30 个字节的字符字段。WITHNO DATA 子句指出不能运行所引用的 SELECT 语句来返回数据。

SET SCHEMA 支持
传统程序员还受益于能用新的 SET SCHEMA 语句控制动态 SQL 语句的当前库。在前几个发行版中,不可以用 SQL 控制作业的当前库;开发人员必须使用 OS/400 命令。


改进的可用性和恢复


在可用性和恢复方面,DB2 继续证明其领先的地位。

可切换的磁盘群集
使用 V5R2 通过独立辅存池进行的可切换磁盘群集提供了可用性、工作负载均衡以及支持多个数据库映像的额外选项。从可用性观点来看,可切换的磁盘群集允许跨多个 iSeries 系统切换数据库。如果一个系统出故障了,则另外一个系统可以接管控制,继续对单一的群集数据库进行操作。注:这不能取代第三方的高度可用性解决方案,但对管理已规划的当机时间提供了备选方案,并对处理未被规划的当机时间提供了灵活性。

日志备用方式
事实上,新的日志备用方式(在 CHGJRN 命令上使用 JRNSTATE 参数)缩短了第三方高度可用性解决方案的切换时间。日志备用方式支持提前创建和激活(举例来说,Start Journal Physical File 命令)备份系统上日志对象,而不是在切换过程完成这个工作。日志备用方式只适用于那些安装了高可用性日志性能(High-Availability (HA) Journal Performance)许可的功能部件(第 42 项)的系统。这一许可的功能部件将日志备用方式和日志高速缓存选项捆绑在一起。对于批处理工作负载和使用没有提交控制的日志记录的高度可用性备份服务器,日志高速缓存证明是个重要的性能改进方法。日志高速缓存更改了将已记录日志的对象写入磁盘的处理,以便在已记录日志的操作上获得最佳的性能。

改进的索引保护顾问程序
SMAPP(系统管理的访问路径保护,System-Managed Access Path Protection)的 DB2 索引保护顾问程序(DB2 Index Protection Advisor)组件已得到增强,从而在 IPL 期间和其后获得更佳的系统资源的系统使用率。V5R2 中的 DSPRCYAP(显示访问路径的恢复,Display Recovery for Access Path)命令提供了有关能够保护哪些索引和逻辑文件以及不能保护哪些的详细信息。

让我们查看一个示例方案,以研究这个增强功能的优点。基于大量的数据更改,SMAPP 确定需要保护大型的逻辑文件 LFX 以防止在 IPL 期间进行时间很长的数据库恢复;但是当 SMAPP 试图保护 LFX 时,它发现创建这个逻辑文件时使用了阻止 LFX 受保护的选项(诸如 FRCACCPATH(*YES))。为了补救这个大型逻辑文件不能受保护的事实,SMAPP 将保护多个较小的索引和逻辑文件,即使这需要更多的系统资源来保护多个对象,而不是一个对象。

在 V5R2 之前,您无法知道哪个索引和逻辑文件属性会导致系统资源的低效率使用。事实上,IBM 发现许多客户由于无意中使用了象 FRCACCPATH(*YES) 之类的 SMAPP 阻止选项,从而阻止了逻辑文件受保护,但他们没有认识到,事实上该属性是 System 3X 时期的遗留物,对最新的 OS/400 发行版没有任何好处。DSPRCYAP 上改进的顾问程序反馈清楚地向您说明为什么索引不能由 SMAPP 保护。这使您有机会更改逻辑文件或索引属性,以便使它符合由 OS/400 自动保护的条件。

保存点
保存点(Savepoint)是 iSeries 移植过程中常常碰到的难以模拟的另一项功能。现在,在 V5R2 iSeries 中,您可以利用保存点从更快的事务恢复中受益。保存点是命名的实体,它表示您的数据在数据库事务内特定时间点上的状态(请参阅图 1)。一旦建立了保存点,您就可以将应用程序回滚到该保存点,而不必使用回滚整个事务所需的系统资源。例如,某次旅行预订事务的一部分可能涉及预订飞机航班和旅馆房间。完成了航班和旅馆的预订后,客户却想住更便宜的旅馆。该应用程序就要回滚与旅馆预订相关的数据库更改,而让有关飞机航班预订的数据库更改保持不变。要实现这一点,应用程序只要在完成航班预订后建立一个保存点。一旦整个旅行预订完成后,就在提交预订事务时,释放该保存点。


性能


V5R2 引入了一个 SQL 查询引擎,其特点是面向对象查询优化器,它为基于 SQL 的应用程序以后的功能性和性能增强打下了基础。

新的电子事务服务支持
由电子商务和多层应用程序所启动的事务将从 V5R2 中新的自适应电子事务(e-transaction)服务支持中受益,这些支持专门为使用 The Open Group XA 事务接口或 Java™ Transaction API(JTA)的应用程序而设计。许多电子商务和多层应用程序中有多项作业或连接作用于单个数据库事务。这个应用程序模型不使用为传统数据库事务设计的现有 OS/400 事务服务,因为在传统数据库事务服务中,事务是在单个作业或服务器内完成的。

V5R2 中增强了事务服务以在与作业或连接无关的对象中,存储和管理与事务相关的数据库资源和锁定。这个新模型将产生跨数据库连接的更佳的资源共享,其效果是改进了性能和可伸缩性。当应用程序将 XA 或 JTA 接口用于 DB2 事务管理时,会自动使用这些新的事务服务,从这一点来说,这些新的事务服务具有自适应性。

编码向量索引的更广泛使用
编码向量索引(EVI)在 V5R2 中使用得更广泛,从而提高了分析和判定工作负载的性能。在以前的发行版中,都建议您只对主要存储的是只读数据的列创建 EVI,以减少维持 EVI 与列数据同步相关的开销。而且,如果是对需要频繁更新的列创建 EVI,则通常建议在对该列添加新数据值之前删除 EVI,随后在完成数据更改后从头开始重新创建 EVI。V5R2 增强功能极大地减少了维护编码向量索引的费用。这一减少的费用允许您对范围更广的列和字段创建 EVI 以改进分析查询性能。


更丰富的工具集


由于 DB2 控制中心(Control Center)中对 iSeries 的支持很有限,所以 iSeries Navigator 是用于 DB2 UDB for iSeries 的首选图形管理界面。与数据库引擎类似,对 iSeries Navigator 工具集进行了许多增强,它们简化了 iSeries 程序员和管理员的工作。

SQL Script Center 的改进
采用提示 SQL 查询语句的方法,简化了从 SQL Script Center 执行 SQL 语句的工作。当您选择 Edit ->; Insert Built SQL 时,SQL Assist 功能可用来帮助构造 SQL 语句(请参阅图 1)。

图 1. SQL Script Center 中的 SQL Assist 功能


通过显示结果集内容,SQL Script Center 窗口已具有简化对返回结果集的存储过程进行调试的能力。现在 V5R2 有了通过存储过程的 OUT 和 INPUT 参数来显示返回值的能力。为此,只要对 OUT 参数分配一个问号,如下面的示例中所示:

        CALL MYLIB.PROCEDURE1(1, 'abc', ? )
返回的输出值显示在 Messages 选项卡上。还有一个新的菜单选项,来启动和分析 SQL 性能监控程序,该监控程序用于监控所有在 SQL Scripts 窗口中执行的查询。

索引顾问程序
在 V5R2 中提供了一个索引顾问程序,从而极大地简化了通过 Visual Explain 进行的 SQL 性能分析。很难分析一个复杂查询产生的 Visual Explain 图表,因为在 Visual Explain 输出中存在着大量的图标。索引顾问程序没有一味关注每个 Visual Explain 图标背后的细节,而是为用户分析详细的性能数据,然后建议要创建哪些索引以改进性能。这反映了 IBM 的自我管理系统的倡议,以及 iSeries 服务器的简单及较低的拥有成本(cost-of-ownership)理念。

访问 EXPLAIN 信息获得更多对象
V5R2 中另一个与性能相关的新特性为函数、过程、包和触发器提供了对 Print SQL Information(PRTSQLINF)命令(也称为 Explain 实用程序)的访问。要看到这一点,对显示在库中的 SQL 对象单击鼠标右键,并选择 Explain SQL(请参阅图 2)。通过导航到 iSeries Navigator 的 File Systems 文件夹内找到的程序对象,您还可以为带有嵌入 SQL 的程序对象选择 Explain SQL。

图 2. EXPLAIN SQL 功能


更易于监控和管理数据库事务
用 iSeries Navigator 可访问的另一个文件夹是 V5R2 中新出现的 Transactions 文件夹。这个文件夹使得监控和管理 iSeries 服务器上的数据库事务变得更容易。依照各种选择标准,可以排序或过滤事务列表。这可以让您检测死锁、在通信故障后进行恢复,以及通过使用拥有 DB2 对象上锁定的所有实体,在应用程序开发期间更好地分析性能和事务。


结束语


V5R2 通过提供一组增强功能延续着 DB2 UDB 在 iSeries 上的发展势头,这些增强功能为应用程序开发和更广泛地选择解决方案提供了灵活性,这样,领先的软件供应商可以更容易地将他们基于 SQL 的解决方案移植到 iSeries。


关于作者
  Kent Milligan 是 ParterWorld® for Developers,iSeries 的 DB2 UDB 技术专家。在 IBM 任职的前八年中,Kent 是位于罗彻斯特的 DB2 开发小组成员。他定期就各种 iSeries 和 AS/400e 关系数据库方面的主题发表演讲并撰写此类文章。可以通过 kmill@us.ibm.com 与他联系。
  

论坛徽章:
0
发表于 2003-01-20 17:09 |显示全部楼层

[转]用于 iSeries V5R2 的 DB2 通用数据库中有什么新增功能

good
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP