DB2 V9权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 DB2 V9.1重大变更

2.1.1 简介

IBM的DB2 V9对一些行为做了变更和修改,因此会和以前的版本不兼容。比如更改了应用程序标识的表示方法;对部分内置函数进行了修改,除此之外还提供了一些新的内置函数和SQL/XML函数;改变了DMS表空间的默认类型;新增了支持多字节字符数据处理的函数;由于不再支持大多数32位数据库实例,导致了对应用程序和例程的支持发生更改;对索引、主键和唯一键,默认启用逆向扫描;对数据移动实用程序进行了部分修改;不再允许在单个工作单元中多次改变同一缓冲池的各种特征;已更改存储在Windows操作系统上的备份映像的命名约定等。

由于很多用户对IBM的DB2 V9所做的变更不熟悉,在实际操作过程中会遇上各种各样的问题,因此,本章将对DB2 V9的重大变更做详细的介绍,并结合一些实际的例子来帮助大家理解。本章描述了DB2数据库系统的用户在编写新应用程序或修改现有应用程序时应记住的当前存在的不兼容性。

本章将按照下列顺序进行讲解。

1.应用程序标识已更改:描述LISTAPPLICATION命令中应用程序标识方面所做的更改。

2.DB2 V9提供的新的内置函数和SQL/XML函数,包括对原有内置函数的修改以及新增的内置函数等。

3.DMS表空间提供了新的默认类型。

4.提供了支持多字节字符数据处理的函数。

5.应用程序和例程功能支持发生了更改。

6.对索引、主键和唯一键默认启用的逆向扫描。

7.对数据移动实用程序的更改。

8.不允许在同一个工作单元中对同一缓冲池进行多次更改。

9.备份映像的新命名约定(Windows)。

10.IBM JAVA软件开发包(SDK)5.X。

2.1.2 应用程序标识已更改

在DB2 V9中对应用程序标识进行了修改,不再是16进制的表示方式,新格式按一种便于阅读的形式提供了端口号和IP地址,并且还接受更长的IPV6地址。如果有用来对包含应用程序标识的输出进行解析的脚本,则需要修改解析条件以说明新格式。另外,有两个新的代理程序(DB2STMM和DB2TASKD)需要一直与数据库相连。因此,这两个新的代理程序将作为LIST APPLICATIONS命令输出结果的一部分。

比如在AIX5.3的DB2 ESE V9环境中,使用LIST APPLICATIONS命令,具体如清单2-1所示。

清单2-1 使用LIST APPLICATIONS命令

        $ DB2 LIST APPLICATIONS SHOW DETAIL

在命令清单2-1的输出结果中,可以看到应用程序标识已经修改,还可以看到应用程序所在的IP地址,在应用程序名部分可以看到应用程序名称是什么,部分输出结果信息如清单2-2所示。

清单2-2部分输出结果

        授权标识       应用程序名              应用程序句柄            应用程序标识
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        IBSS           QuestCentral.exe        872                     134.5.8.170.9742.070913125710
        IBSS           javaw.exe               1776                    134.5.8.120.22288.070913123809
        IBSS           db2jcc_application      1453                    134.0.45.134.64372.070913101435
        IBSS           db2taskd                230                     * LOCAL . DB2 . 070913031725
        IBSS           db2stmm                 189                     * LOCAL . DB2 . 070913031724
        IBSS           JDBC4DB2                1368                    / 1345812 . 2264 . 00090006003B
        IBSS           eclipse.exe             1727                    134.5.8.128.39432.070913124159

这样就可以在实际维护数据库的过程中,针对各种应用程序进行操作。例如,有人通过第三方软件如QUEST连接上数据库,对系统表进行了锁定,可以通过LIST APPLICATIONS命令查看是谁连上的,并可以使用FORCE APPLICATIONS命令将此应用程序断开连接。另外,查看锁定信息,也可以通过使用LIST APPLICATIONS命令,而且可以看到应用程序所在的IP地址以及应用程序名称,比以前更加方便。

2.1.3 新的内置函数和SQL/XML函数

DB2 V9中提供了新的内置函数TRIM,这个函数是我们期待已久的,从此再也不用使用LTRIM加RTRIM来实现去除空格的功能了。现在DB2 V9在很多易用性方面做了大量改进,比如引入了大量的自治和自维护功能,提供了很多新的方法,在将要推出的DB2 V9.5中,还将推出更多的函数和方法,以方便大家使用。下面来具体看一下TRIM函数的用法,在AIX 5.3的SHELL窗口中创建示例表,首先在/HOME/DB2INST1/目录下编写脚本EMPLOYEE.SQL,具体内容如清单2-3所示。

清单2-3 EMPLOYEE.SQL内容

        CREATE TABLE "DB2INST1" . "EMPLOYEE"  (
              "EMPNO" CHAR ( 6 ) NOT NULL ,
              "FIRSTNME" CHAR ( 12 ) NOT NULL ,
              "MIDINIT" CHAR ( 1 ) ,
              "LASTNAME" CHAR ( 15 ) NOT NULL ,
              "WORKDEPT" CHAR ( 3 ) ,
              "PHONENO" CHAR ( 4 ) ,
              "HIREDATE" DATE ,
              "JOB" CHAR ( 8 ) ,
              "EDLEVEL" SMALLINT NOT NULL ,
              "SEX" CHAR ( 1 ) ,
              "BIRTHDATE"  DATE ,
              "SALARY" DECIMAL ( 9 , 2 ) ,
              "BONUS" DECIMAL ( 9 , 2 ) ,
              "COMM" DECIMAL ( 9 , 2 )  );

接下来在/HOME/DB2INST1/目录下执行EMPLOYEE.SQL脚本。

            $ db2 –tvf  /home/db2inst1/employee.sql

执行成功后,发出INSERT命令插入一条测试数据,具体如清单2-4所示。

清单2-4 对EMPLOYEE表插入一条数据

        $ db2 insert into db2inst1.employee ( EMPNO , FIRSTNME , LASTNAME , EDLEVEL , HIREDATE ,
    SEX ) values  ( '000010' , ' CHRISTINE ' , ' HAAS ' , 18 , current date , '1' )

命令执行成功。此时使用SELECT语句查看LASTNAME(用CONCAT语句在LASTNAME前后各加了一个单引号,方便查看效果),发现其带有空格,具体如清单2-5所示。

清单2-5 不使用TRIM的方式查询EMPLOYEE数据

        $ db2 select EMPNO , FIRSTNME , concat ( '''' , concat ( LASTNAME , '''' ) ) as LASTNAME ,
    EDLEVEL ,
        HIREDATE ,  case when SEX='1' then '男' else '女' end as SEX from db2inst1.employee
        显示结果:
        EMPNO        FIRSTNME     LASTNAME             EDLEVEL HIREDATE     SEX
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        000010       CHRISTINE   ' HAAS         '      18      2007-09-14    男
          1 条记录已选择。

接下来使用TRIM函数执行查询命令,会发现LASTNAME中已经没有空格,效果和LTRIM(RTRIM(LASTNAME))查看一样,具体如清单2-6所示。

清单2-6 使用TRIM的方式查询数据

        $ db2 select EMPNO , FIRSTNME , concat ( '''' , concat ( trim ( LASTNAME ) , '''' ) ) as
    LASTNAME , EDLEVEL , HIREDATE , case when SEX='1' then '男' else '女' end as SEX from
    db2inst1.employee
        显示结果:
        EMPNO   FIRSTNME         LASTNAME         EDLEVEL HIREDATE     SEX
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        000010  CHRISTINE        'HAAS'           18       2007-09-14   男
          1 条记录已选择。

另外,提供了下列内置函数:

CHARACTER_LENGTH

OCTET_LENGTH

POSITION

SECLABEL

SECLABEL_BY_NAME

SECLABEL_TO_CHAR

STRIP

SUBSTRING

修改了下列内置函数:

LENGTH

LOCATE

新的SQL/XML函数和已更改的SQL/XML函数包括:XMLAGG、XMLATTRIBUTES、XMLCOMMENT、XMLCONCAT、XMLDOCUMENT、XMLELEMENT、XMLFOREST、XMLNAMESPACES、XMLPI、XMLTEXT、XMLTABLE、XMLVALIDATE和XMLXSROBJECTID。

用户自己定义的函数(USER DEFINED FUNCTION)或者存储过程(PROCEDURE),若其名称和特征符与新内置函数或SQL管理例程的名称和特征符相同,在旧版本中动态SQL语句中对这些例程未限定引用,而在V9中则将执行内置函数或SQL管理例程,而不是用户定义的函数或存储过程。建议重新命名用户自己定义的函数(USER DEFINED FUNCTION)或者存储过程(PROCEDURE)。

2.1.4 DMS表空间的新默认类型

在DB2 V9中DMS表空间的新默认类型是“大型”,而不再是“常规”;需要注意的是,只是DMS表空间的默认类型改变了,SMS表空间的默认类型还是REGULAR,另外,SMS表空间的类型不能选择“大型”。

在每个数据库分区中,32K页大小的常规表空间最大容量是512GB,构建在其上的32K页大小的表,最大容量也是512GB;而每个数据库分区中,32K页大小的大型表空间最大容量是16394GB,构建在其上的32K页大小的表,最大容量也是是16394GB。

在Windows XP环境下安装DB2 ESE V9.1(企业服务器版),并创建示例数据库DB2TEST1。打开DB2CLP命令窗口,发出CREATE DATABASE语句,创建数据库,具体如清单2-7所示。

清单2-7 创建示例数据库DB2TEST1

        C:\> DB2 CREATE DATABASE DB2TEST1
        DB20000I  CREATE DATABASE命令成功完成。

这样创建了一个测试数据库DB2TEST1,发出GET DB CFG命令可以查看示例数据库DB2TEST1的配置参数,可以看到数据库地域是中国(CN),数据库代码页是1386,数据库代码集是GBK,命令执行情况和部分输出信息具体如清单2-8所示。

清单2-8 查看示例数据库DB2TEST1的配置参数

        C:\> db2 get db cfg for db2test1
              数据库db2test1 的数据库配置
        数据库配置发行版级别                              =0x0b00
        数据库发行版级别                                  =0x0b00
        数据库地域                                        =CN
        数据库代码页                                      =1386
        数据库代码集                                      =GBK
        数据库国家/地区代码                               =86
        数据库整理顺序                                    =UNIQUE
        备用整理顺序                        ( ALT_COLLATE )=
        数据库页大小                                      =4096
         . . . . . . . . . . . . . . . . .

接下来在示例数据库DB2TEST1中创建示例表空间TABLESPACE1,在DB2CLP命令环境中,连接数据库,发出CREATE TABLESPACE命令,具体如清单2-9所示。

清单2-9 创建常规表空间TABLESPACE1,使用自动存储

        C:\> db2 connect to db2test1
          数据库连接信息
        数据库服务器        =DB2 / NT 9.1.0
         SQL授权标识        =RHETTE
        本地数据库别名      =DB2TEST1
        C:\> DB2 CREATE  TABLESPACE TABLESPACE1 PAGESIZE 4 K  MANAGED BY AUTOMATIC STORAGE
    BUFFERPOOL  IBMDEFAULTBP
        DB20000I  SQL命令成功完成。

注意,在MANAGED BY后面跟的是AUTOMATIC STORAGE,表示新创建的表空间将使用自动存储,DB2 V9引入了自动存储器管理,使用自动存储功能可以帮助简化表空间的存储管理,新创建的使用自动存储功能的表空间,其容器和空间分配完全由DB2数据库管理器确定。接下来看一下示例表空间TABLESPACE1的类型,在DB2命令行中发出LIST TABLESPACE SHOW DETAIL命令,命令执行情况和部分输出信息具体如清单2-10所示。

清单2-10 查看TABLESPACE1表空间

          C:\> db2 LIST TABLESPACES SHOW DETAIL
                  当前数据库的表空间
          . . . . . . . . . . . . .
          表空间标识                       =4
          名称                             =TABLESPACE1
          类型                             =数据库管理空间
          内容                             =所有持久数据。大型表空间。
          状态                             =0x0000
          详细解释:
            正常
          总计页数                         =8192
          可用页数                         =8160
          已用页数                         =96
          可用页数                         =8064
          高水位标记(页)                 =96
          页大小(以字节计)               =4096
          扩展数据块大小(页)             =32
          预取大小(页)                   =32
          容器数                           =1

可以看到TABLESPACE1已经创建成功,其表空间类型是大型表空间,空间管理是数据库管理空间。

2.1.5 重大改进:支持多字节字符数据处理

在DB2 V9中通过增加几个新的标量函数以及对现有函数进行修改,简化了多字节字符数据的处理。某些基于字符的字符串函数可按字符为单位而不是按字节或双字节为单位处理字符串。这些函数包括一个参数,此参数允许指定一组预定义的字符串单元,而不是字节或双字节。每个函数(OCTET_LENGTH除外)都接受一个用于指定结果的代码单位或字符串单位的参数。对于现有函数来说,此参数是可选的。新函数包括:

CHARACTER_LENGTH

OCTET_LENGTH

POSITION

SUBSTRING

已修改的现有函数包括:

LENGTH

LOCATE

这些函数根据字符边界而非字节或双字节边界来处理字符串。每个函数(OCTET_LENGTH除外)都接受下列其中一个指定结果代码单位或字符串单位的参数:

CODEUNITS16指定以16位UTF-16代码单元来表示结果。

CODEUNITS32指定以32位UTF-32代码单元来表示结果。

OCTETS指定以字节来表示结果。

现有函数可以选择使用此参数。

以SUBSTRING()为例,在DB2 V9之前,只有SUBSTR()函数,没有SUBSTRING()函数,无法用SUBSTR()处理双字节数据库中的混合字符,SUBSTR()函数无法保证取出的混合字符的完整性。在DB2 V9中SUBSTR()函数还是保留着的,来看一下SUBSTR()函数的格式,如清单2-11所示。

清单2-11 SUBSTR scalar function

        > > - SUBSTR - - ( - - string - - , - - start - - + - -  - - - - + - ) - - - ><
                                    ' - , - - length - '

接下来将通过具体的例子来看一下SUBSTR()处理双字节数据库中混合字符的情况。在清单2-7中创建的示例数据库DB2TEST1中,创建示例表TEST1,并插入两条数据,命令格式如清单2-12所示。

清单2-12 创建示例表TEST1

        C:\> db2 connect to db2test1
          数据库连接信息
        数据库服务器      =DB2 / NT 9.1.0
         SQL授权标识      =RHETTE
        本地数据库别名    =DB2TEST1
        C:\> db2 create table test1( name  char ( 50 ) )
        DB20000I  SQL命令成功完成。
        C:\> db2 insert into test1 values ( 'aaa中国国际会议中心' )
        DB20000I  SQL命令成功完成。
        C:\> db2 insert into test1 values ( 'aa中国国际会议中心aaa' )
        DB20000I  SQL命令成功完成。

接着执行查询命令,可以看到示例表TEST1中有两条记录,具体如清单2-13所示。

清单2-13 查询示例表TEST1

        C:\> db2 " select * from test1 "
        NAME
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        aaa中国国际会议中心
        aa中国国际会议中心aaa
          2 条记录已选择。

接下来使用SUBSTR()函数查询示例表TEST1,会发现输出的字符有截断现象,具体如清单2-14所示。

清单2-14 使用SUBSTR()查询示例表TEST1

        C:\> db2 " select substr ( name , 3 , 5 ) as name from test1 "
        NAME
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        a中国
        中国?
          2 条记录已选择。

然后用HEX()函数能够很清楚地看到第2条记录中的第2个“国”字,其16进制代码为“B9FA”被SUBSTR()截断成了“B9”,HEX()函数能返回字符串的16进制值。在一般的SELECT命令中,该现象仅造成显示问题。但是,在DB2通用数据库提供的XML函数中,截断的字符会造成XML语义检查失败。用HEX()函数查询示例表TEST1的情况如清单2-15所示。

清单2-15 使用HEX()查询示例表TEST1

        C:\> db2 " select hex ( substr ( name , 3 , 5 ) ) as name from test1 "
        NAME
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        61D6D0B9FA
        D6D0B9FAB9
          2 条记录已选择。

可以通过其他语言比如JAVA、C重新编写一个支持处理双字节数据库中混合字符的函数,也可以使用DB2 V9新提供的SUBSTRING()函数,其语法格式如清单2-16所示。

清单2-16 SUBSTRING()scalar function

        >> - SUBSTRING --( - - - - - - - - - - - - - - - - - - - - - - - - - - - >
        > -- + - expression – FROM – start -- + -- + -- USING -- + -CODEUNITS16-+-+->
          |                     '-FOR--length-'       +-CODEUNITS32-+ |
          |                                           '-OCTETS------' |
          ' – expression -- , -- start -- + - + -- , -- + -CODEUNITS16- + ------ '
                                ' - , -- length - '      + - CODEUNITS32- +
                                                          ' – OCTETS ------ '
        > -- ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  ><

下面使用SUBSTRING()函数查询示例表TEST1,字符串单位的参数可以是CODEUNITS16、CODEUNITS32或OCTETS。CODEUNITS16是指定以16位UTF-16代码单元来表示结果,CODEUNITS32是指定以32位UTF-32代码单元来表示结果,OCTETS是指定以字节来表示结果,分别使用这三个参数值查询示例表TEST1,具体如清单2-17所示。

清单2-17 使用SUBSTRING()函数查询示例表TEST1

        C:\> db2 " select substring ( name , 3 , 5 , OCTETS ) as name from test1 "
        NAME
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        a中国
        中国
          2 条记录已选择。
        C:\> db2 " select substring ( name , 3 , 5 , CODEUNITS16 ) as name from test1 "
        NAME
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        a中国国际
        中国国际会
          2 条记录已选择。
        C:\> db2 " select substring ( name , 3 , 5 , CODEUNITS32 ) as name from test1 "
        NAME
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        a中国国际
        中国国际会
          2 条记录已选择。

命令执行成功。可以看到,OCTETS指定以双字节为单位,其第二条语句中只返回了两个字符“中国”,由于第三个字符“国”只有一个字节,所以省略,这样就避免了字符发生截断现象。

CODEUNITS16是指定以16位UTF-16代码单元来表示结果,中英文的字符视为同等长度,所以其第一行返回值是“a中国国际”,第二行返回值是“中国国际会”。

CODEUNITS32是指定以32位UTF-32代码单元来表示结果,中英文的字符视为同等长度,所以其第一行返回值是“a中国国际”,第二行返回值是“中国国际会”。

2.1.6 应用程序和例程功能支持发生了更改

由于不再支持大多数32位数据库实例,导致对应用程序和例程的支持发生更改。使用DB2 V6或V7客户端实例的应用程序不能直接连接至DB2 V9数据库服务器。在DB2 V9中创建的32位不受防护例程(存储过程和用户定义的函数)不能再在AIX、HP、Sun、Linux on Power、Linux for AMD64 and Intel ® EM64T和Linux on Zseries环境中的64位DB2数据库服务器上运行。为DB2 V9.1(带有修订包7之前的任何修订包)创建的SQL过程将不能在DB2 V9的64位实例上运行。随64位DB2数据库服务器仅提供了64位JVM。仅对Linux X96和Windows on X96操作系统提供了32位JVM。

用户需要考虑在产品更改后继续使用32位数据库实例,还是应移至64位实例。在大部分受支持的UNIX平台中,仅可使用64位实例。将32位不受防护例程迁移至DB2 V9,需要在64位数据库服务器上对其进行重建。必须删除为DB2 UDB V9.1(带有修订包7之前的任何修订包)的32位实例创建的SQL过程,然后使用目标64位数据库服务器重新创建此SQL过程。为带有任何修订包的DB2 UDB V7或V9的32位实例创建的这些SQL过程将继续在DB2 V9的32位受支持实例上运行。Java外部例程需要32位JVM用于32位DB2数据库服务器,并且需要64位JVM用于64位DB2数据库服务器。确保实例配置访问相应的JVM。

2.1.7 对索引、主键和唯一键默认启用的逆向扫描

当创建新的主键、唯一键或索引(扩展索引除外)时,ALLOW REVERSE SCANS是默认值。在先前发行版本中,使用的默认值为DISALLOW REVERSE SCANS。也就是说,默认情况下所有主键、唯一键和索引(除了扩展的索引)都允许逆向扫描。受此影响,优化器可能在某些SQL语句中使用逆向索引扫描,因此访问方案可能会更改,并且查询执行时间可能会缩短。此功能还会改进索引维护。在以前的DB2版本中,某些DB2用户创建一个正向扫描索引和一个逆向扫描索引以提高应用程序的速度。但是,缺点是要维护两个索引。既然在DB2 V9.1中默认启用了逆向扫描,那么上述两个索引就可以由启用了逆向扫描的一个索引来代替。

需要注意的是,如果在同一个表中创建了两个索引(一个指定ASC,另一个指定DESC)而未在CREATE INDEX语句中指定DISALLOW REVERSE SCANS选项,则这两个索引将默认为ALLOW REVERSE SCANS。在此情况下,将不会创建这两个索引中的第二个索引,同时DB2会发出索引重复的警告消息。如果不想对要创建的索引进行逆向扫描,则必须用CREATE INDEX语句的DISALLOW REVERSE SCANS子句显式指定。另外,由于现在新创建的索引默认值是ALLOW REVERSE SCANS,所以在显式指定DISALLOW REVERSE SCANS子句创建不使用逆向索引的时候,只能对某个列指定升序还是降序,而不能在整个索引上定义升序还是降序,在下面的例子中会具体阐述。

接下来在DB2CLP窗口中,发出CREATE TABLE命令创建一个示例表TEST2,并插入部分数据,具体如清单2-18所示。

清单2-18 创建示例表TEST2

        C:\> db2 create table test2( id int not null , name varchar ( 100 ) not null , note var
        char ( 500 ) )
        DB20000I  SQL命令成功完成。
        C:\> db2 insert into test2 ( id , name ) values ( 1 , ' herry ' )
        DB20000I  SQL命令成功完成。
        C:\> db2 insert into test2 ( id , name ) values ( 2 , ' daniel ' )
        DB20000I  SQL命令成功完成。
        C:\> db2 insert into test2 ( id , name ) values ( 3 , ' Kaka ' )
        DB20000I  SQL命令成功完成。

在表TEST2上建立索引INDEX1和INDEX2,INDEX1索引基于ID列降序(注意,不再是以前版本中的对整个索引的降序),INDEX2索引基于ID列升序(注意,不再是以前版本中的对整个索引的升序)。需要注意的是,此时一定要指定DISALLOW REVERSE SCANS,具体如清单2-19所示。

清单2-19 使用DISALLOW REVERSE SCANS创建索引

        C:\> db2 Create  unique  index  index1  on  test2 ( id  desc ) disallow reverse scans
        DB20000I  SQL命令成功完成。
        C:\> db2 Create  unique  index  index2  on  test2 ( id  asc ) disallow reverse scans
        DB20000I  SQL命令成功完成。

其效果等同于直接创建索引INDEX3,由于ALLOW REVERSE SCANS是默认值,所以指定ALLOW REVERSE SCANS和不指定ALLOW REVERSE SCANS效果是一样的,具体如清单2-20所示。

清单2-20 使用ALLOW REVERSE SCANS默认选项创建索引INDEX3

        C:\> db2 drop index index1
        DB20000I  SQL命令成功完成。
        C:\> db2 drop index index2
        DB20000I  SQL命令成功完成。
        C:\> db2 Create  unique  index  index3  on  test2 ( id desc )
        DB20000I  SQL命令成功完成。

在这种情况下,索引(INDEX3)是根据给定列(ID)中的降序值(DESC)构成的。通过允许逆向扫描,虽然列的索引被定义为以降序扫描,但还是可以升序顺序(逆向)执行扫描。实际是否以两个方向使用索引不是由用户控制的,而是由优化器在创建和考虑访问方案时控制的。

2.1.8 对数据移动实用程序的更改

对LOAD、IMPORT和EXPORT实用程序进行了下列更改。

使用IXF文件格式重新创建表时,如果在使用CREATE选项执行导入过程中无法重新创建某个功能,则在导出过程中将接收到一个警告,并在导入过程中出现错误。

在导出LOB列时,文件名是采用以下方式构造的:将此列表中的当前基本名称追加至当前路径(在LOB路径中),然后追加3个数字的序号和三个字符标识LOB。例如FILENAME.001.LOB和FILENAME.002.LOB。如果输入数据文件是在DB2 UDB V9中生成的,则DB2 V9.1 IMPORT实用程序可以正确地读取该文件。

移动LOB数据时,默认路径和LOAD、IMPORT和EXPORT实用程序搜索这些路径的顺序已更改。

导出和导入LOB数据时,如果在EXPORT命令中指定LOBS TO或LOBFILE选项,或者在IMPORT命令中指定LOBS FROM选项,则会自动指定LOBSINFILE关键字。在DB2 UDB V9中,如果未指定LOBSINFILE文件类型修饰符,则将忽略LOBS TO、LOBS FROM和LOBFILE选项。

2.1.9 不允许在同一个工作单元中对同一缓冲池进行多次更改

在V9中,增加了自调整内存管理器,从而增加了可以对缓冲池的各种特征执行的操作的复杂性。为了降低这种复杂性,就不再允许在单个工作单元中多次改变同一缓冲池的各种特征。也就是说,不能在同一个工作单元中对同一缓冲池指定多个ALTER BUFFERPOOL语句。相应的解决办法是,可以指定一个对缓冲池特征进行所有更改的ALTER BUFFERPOOL语句,或者将语句分到不同的工作单元中。

2.1.10 备份映像的新命名约定(Windows)

已更改存储在Windows操作系统上的备份映像的命名约定,以便与所有其他操作系统的命名约定相匹配。

在磁盘上创建的备份映像文件名由几个元素组成,这些元素由句点分隔。

        DB_alias.Type.Inst_name.NODEnnnn.CATNnnnn.timestamp.Seq_num

在Windows操作系统上,DB2 V9和更早版本在存储备份映像时使用4层子目录树。

        DB_alias.Type\Inst_name\NODEnnnn\CATNnnnn\yyyymmdd\hhmmss.Seq_num

在DB2 V9.1数据库系统上,仍可以复原使用先前命名结构的较早版本的产品中的备份映像。接下来做一次数据库的全备,在DB2CLP窗口中输入BACKUP DB命令,具体如清单2-21所示。

清单2-21 对示例数据库DB2TEST1备份

        C:\> db2 backup db db2test1
        备份成功。此备份映像的时间戳记是:20070924172529

此时打开资源管理器,可以看到备份文件的名称是:

DB2TEST1.1.DB2.NODE0000.CATN0000.20070924172529.001

已经更改成新的格式。

2.1.11 支持IBM JAVA软件开发包(SDK)5.X

IBM JAVA软件开发包(SDK)5.X将自动安装在服务器上。如果安装了客户端工具,则也将在客户端上安装IBM SDK。支持的操作系统有:AIX® 5、Linux® on X96、Linux on AMD64/EM64T、Linux on Zseries®、Linux on Power™、Windows® X96和Windows X64。如果要对应用程序使用JDBC驱动程序,则需要确保安装了IBM SDK。

比如在本机的DB2安装目录中可以看一下SDK的版本,在DB2CLP窗口中进入到..\IBM\ SQLLIB\JAVA\JDK\BIN目录中,输入JAVA –VERSION命令,可以看到JAVA VERSION是" 1.5.0 ",具体如清单2-22所示。

清单2-22 查看本机JAVA VERSION

        C:\Program Files\IBM\SQLLIB\java\jdk\bin> java  -version
        java version " 1.5.0 "
        Java ( TM ) 2 Runtime Environment, Standard Edition ( build pwi32devifx-20060602 ( SR1 ) )
        IBM J9 VM ( build 2.3 , J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223ifx-20060602 ( JIT
    enabled )
        J9VM -20060220_05389_lHdSMR
        JIT  -20060220_2133_r8
        GC   -20060214_AA  )
        JCL  -20060222a