官术网_书友最值得收藏!

  • DB2 V9權威指南
  • 程永 王雪梅 石巖松 姜學軍
  • 7142字
  • 2019-01-01 06:20:15

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
主站蜘蛛池模板: 周口市| 龙游县| 怀来县| 新营市| 城口县| 宝山区| 冕宁县| 靖边县| 扬州市| 孝昌县| 岑巩县| 中卫市| 桃园县| 安西县| 中宁县| 勐海县| 获嘉县| 寿宁县| 鹰潭市| 阿图什市| 大洼县| 鄂伦春自治旗| 永定县| 东乌珠穆沁旗| 辉南县| 平湖市| 东辽县| 东乡族自治县| 夏河县| 疏附县| 阳江市| 石狮市| 平舆县| 永德县| 普定县| 丹江口市| 讷河市| 威宁| 九龙县| 花莲市| 宁波市|