Suita Gupta (suitag@my.ibm.com), 技術(shù)顧問, IBM Malaysia
Allan Tham (thamawh@my.ibm.com), 售前服務(wù)專家,ASEAN Techline, IBM
Raul F. Chong (rfchong@ca.ibm.com), DB2 UDB 專家, IBM
    簡介                                                                                                在 developerWorks 的上一篇文章 中,我們談到了如何利用 MS SQL Server 2000 方面的技能學(xué)習(xí) DB2.您對 Oracle 背景知識的熟悉程度更超過 SQL Server 嗎?假如是這樣,那么請繼續(xù)閱讀。在本文中,我們將展示如何使用您現(xiàn)有的 Oracle 10g 知識來快速把握 DB2 9 方面的技能。    在 2006 年 7 月 28 日,IBM 發(fā)布了 DB2 9 for linux, UNIX, and Windows,這是一種真正的混合型數(shù)據(jù)服務(wù)器,可滿足當(dāng)今苛刻的業(yè)務(wù)需求。 DB2 9 是當(dāng)今惟一采用 purexml? 技術(shù)的數(shù)據(jù)服務(wù)器,這種技術(shù)答應(yīng)以原生的形式存儲 XML,也就是說,以分層格式存儲 XML. DB2 9 的其他特性包括行壓縮、基于標(biāo)簽的訪問控制(label based access control,LBAC)安全性以及自調(diào)優(yōu)內(nèi)存治理器(Self-tuning Memory Manager,STMM)等自治特性。本文首先對 DB2 與 Oracle 作一個比較,然后著重介紹 DB2 9 中的新特性。    注重:在本文后面的內(nèi)容中,我們將使用術(shù)語 “Oracle” 來表示 Oracle 10g Release 2,而用 “DB2” 表示 DB2 9 for Linux, UNIX, and Windows.系統(tǒng)結(jié)構(gòu)概述首先,我們需要理解 Oracle 使用的架構(gòu),并理解它與 DB2 的不同之處。圖 1 展示了 Oracle 的系統(tǒng)結(jié)構(gòu)。將該圖與 圖 2 進(jìn)行比較,后者顯示了 DB2 的系統(tǒng)結(jié)構(gòu)。在閱讀本文的時候,為便于理解,可以參照這兩個圖。
圖 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系統(tǒng)結(jié)構(gòu)
 
 
圖 2. DB2 on Linux, UNIX, and Windows 系統(tǒng)結(jié)構(gòu)
 實例    在 Oracle 和 DB2 中,實例 的概念是類似的。在這兩者之中,實例都是指后臺進(jìn)程與共享內(nèi)存的組合。兩者之間的主要差別在于,在 Oracle 中每個實例只能有一個數(shù)據(jù)庫,而在 DB2 中多個數(shù)據(jù)庫可以共享一個實例。    在 Oracle 中,由于數(shù)據(jù)庫與實例是一對一的關(guān)系,因此用 CREATE DATABASE 命令創(chuàng)建一個數(shù)據(jù)庫的同時便隱式地創(chuàng)建了一個實例。或者,為了在計算機(jī)上創(chuàng)建一個 Oracle 實例,也可以使用 Database Configuration Assistant,或者使用 ORADIM 實用程序,后者是 Oracle 9i 通過 NEW 選項提供的。另外還必須提供某些信息,包括系統(tǒng)標(biāo)識符(System Identifier,SID)或一個服務(wù)名稱、實例密碼、最大用戶數(shù)、啟動模式等等。類似地,為了刪除實例,可以使用 ORADIM 實用程序加 DELETE 選項。這里需要提供 SID 或服務(wù)名稱。除非在安裝過程中創(chuàng)建一個新的數(shù)據(jù)庫,否則在以 fresh 方式安裝 Oracle 的時候,不會創(chuàng)建缺省的實例。
     實例    在 Oracle 和 DB2 中,實例 的概念是類似的。在這兩者之中,實例都是指后臺進(jìn)程與共享內(nèi)存的組合。兩者之間的主要差別在于,在 Oracle 中每個實例只能有一個數(shù)據(jù)庫,而在 DB2 中多個數(shù)據(jù)庫可以共享一個實例。    在 Oracle 中,由于數(shù)據(jù)庫與實例是一對一的關(guān)系,因此用 CREATE DATABASE 命令創(chuàng)建一個數(shù)據(jù)庫的同時便隱式地創(chuàng)建了一個實例。或者,為了在計算機(jī)上創(chuàng)建一個 Oracle 實例,也可以使用 Database Configuration Assistant,或者使用 ORADIM 實用程序,后者是 Oracle 9i 通過 NEW 選項提供的。另外還必須提供某些信息,包括系統(tǒng)標(biāo)識符(System Identifier,SID)或一個服務(wù)名稱、實例密碼、最大用戶數(shù)、啟動模式等等。類似地,為了刪除實例,可以使用 ORADIM 實用程序加 DELETE 選項。這里需要提供 SID 或服務(wù)名稱。除非在安裝過程中創(chuàng)建一個新的數(shù)據(jù)庫,否則在以 fresh 方式安裝 Oracle 的時候,不會創(chuàng)建缺省的實例。
                             在 DB2 中,當(dāng)在 Windows 平臺上安裝了該產(chǎn)品之后,便缺省地創(chuàng)建了一個實例 "DB2".在 Linux 和 UNIX 中,缺省的實例名稱為 "db2inst1".若要在同一臺計算機(jī)上創(chuàng)建另一個實例,只需執(zhí)行命令 db2icrt <instance name>.    圖 3 展示了缺省的 DB2 實例 “DB2”(在 Windows 中)和從 DB2 Control Center GUI 中用 db2icrt 命令創(chuàng)建的另外兩個實例。圖 3. 顯示 DB2 實例的 DB2 Control Center GUI
 若要在命令行接口中引用給定的 DB2 實例,可以使用環(huán)境變量 DB2INSTANCE.通過這個變量,可以指定當(dāng)前活動實例,所有命令將應(yīng)用到此實例。例如,假如 DB2INSTANCE 被設(shè)置為 PROD,然后您執(zhí)行了命令 create database MYDB1,將創(chuàng)建一個與實例 PROD 關(guān)聯(lián)的數(shù)據(jù)庫。假如要在實例 DB2 上創(chuàng)建該數(shù)據(jù)庫,那么必須首先將 DB2INSTANCE 變量的值改為 DB2.這類似于 ORACLE_SID (System Identifier),當(dāng)用戶想要在不同實例之間進(jìn)行切換時,也是使用 ORACLE_SID.    還有一種標(biāo)識要使用的實例的簡單方法,那就是使用 DB2 Control Center GUI,如 圖 3 所示。要在該工具中看到對應(yīng)于新實例的條目,需要通過右擊 Instances 并選擇 Add 來將該實例添加到此工具中。要刪除 DB2 中的一個實例,可以執(zhí)行命令 db2idrop <instance name>.    總之,在 Oracle 中,可以使用 Database Configuration Assistant 來創(chuàng)建、修改、啟動、停止和刪除實例,而在 DB2 中則可以使用 Control Center GUI 做同樣的事情。而且,Oracle 實例與數(shù)據(jù)庫只能是一對一的關(guān)系,而在 DB2 中卻不是這樣。一個 DB2 實例中可以同時存在多個數(shù)據(jù)庫,并且可以并發(fā)地使用這些數(shù)據(jù)庫。     數(shù)據(jù)庫    在 Oracle 中,可以用 CREATE DATABASE 命令手動創(chuàng)建數(shù)據(jù)庫,也可以用 Database Configuration Assistant 創(chuàng)建數(shù)據(jù)庫。                                                                                            手動創(chuàng)建數(shù)據(jù)庫時,在執(zhí)行 CREATE DATABASE 命令之前,需要執(zhí)行一系列的步驟,包括設(shè)置 OS 變量,預(yù)備參數(shù)文件,以及創(chuàng)建密碼文件。    元數(shù)據(jù)信息在 Data Dictionary 中存儲和治理,由基本表和相應(yīng)的視圖組成。基本表是在數(shù)據(jù)庫創(chuàng)建過程中自動創(chuàng)建的,而視圖則是通過運(yùn)行 catalog.sql 和 catproc.sql 腳本構(gòu)造的。    因此,Oracle 數(shù)據(jù)庫可看作包含 3 種類型的文件的一個集合:    1.數(shù)據(jù)文件(Data File):包含實際的數(shù)據(jù),數(shù)據(jù)庫的物理實現(xiàn)。(類似于 DB2 中的容器。)    2.重做文件(Redo File):相當(dāng)于 DB2 中的事務(wù)日志(Transaction Log)。    3.控制文件(Control File):包含用于維護(hù)和驗證數(shù)據(jù)庫完整性的信息。    在 DB2 中,一個實例可以包含多個數(shù)據(jù)庫,如 圖 2 所示。每個數(shù)據(jù)庫都是一個封閉的、真正獨立的單元。每個數(shù)據(jù)庫有其自己的編目表空間、臨時表空間和用戶表空間,這些表空間是在創(chuàng)建數(shù)據(jù)庫時缺省創(chuàng)建的。DB2 包含一個稱為系統(tǒng)數(shù)據(jù)庫目錄(system database Directory) 的二進(jìn)制文件,其中包含可從 DB2 機(jī)器上連接的所有數(shù)據(jù)庫的條目。這個目錄保存在實例級。    當(dāng)創(chuàng)建一個實例時,缺省情況下不會創(chuàng)建數(shù)據(jù)庫,您需要使用 create database 命令顯式地創(chuàng)建一個數(shù)據(jù)庫。此外還可以用 Control Center 創(chuàng)建數(shù)據(jù)庫,如 圖 4 和 圖 5 所示。圖 4. 使用 Control Center GUI 創(chuàng)建 DB2 數(shù)據(jù)庫
     若要在命令行接口中引用給定的 DB2 實例,可以使用環(huán)境變量 DB2INSTANCE.通過這個變量,可以指定當(dāng)前活動實例,所有命令將應(yīng)用到此實例。例如,假如 DB2INSTANCE 被設(shè)置為 PROD,然后您執(zhí)行了命令 create database MYDB1,將創(chuàng)建一個與實例 PROD 關(guān)聯(lián)的數(shù)據(jù)庫。假如要在實例 DB2 上創(chuàng)建該數(shù)據(jù)庫,那么必須首先將 DB2INSTANCE 變量的值改為 DB2.這類似于 ORACLE_SID (System Identifier),當(dāng)用戶想要在不同實例之間進(jìn)行切換時,也是使用 ORACLE_SID.    還有一種標(biāo)識要使用的實例的簡單方法,那就是使用 DB2 Control Center GUI,如 圖 3 所示。要在該工具中看到對應(yīng)于新實例的條目,需要通過右擊 Instances 并選擇 Add 來將該實例添加到此工具中。要刪除 DB2 中的一個實例,可以執(zhí)行命令 db2idrop <instance name>.    總之,在 Oracle 中,可以使用 Database Configuration Assistant 來創(chuàng)建、修改、啟動、停止和刪除實例,而在 DB2 中則可以使用 Control Center GUI 做同樣的事情。而且,Oracle 實例與數(shù)據(jù)庫只能是一對一的關(guān)系,而在 DB2 中卻不是這樣。一個 DB2 實例中可以同時存在多個數(shù)據(jù)庫,并且可以并發(fā)地使用這些數(shù)據(jù)庫。     數(shù)據(jù)庫    在 Oracle 中,可以用 CREATE DATABASE 命令手動創(chuàng)建數(shù)據(jù)庫,也可以用 Database Configuration Assistant 創(chuàng)建數(shù)據(jù)庫。                                                                                            手動創(chuàng)建數(shù)據(jù)庫時,在執(zhí)行 CREATE DATABASE 命令之前,需要執(zhí)行一系列的步驟,包括設(shè)置 OS 變量,預(yù)備參數(shù)文件,以及創(chuàng)建密碼文件。    元數(shù)據(jù)信息在 Data Dictionary 中存儲和治理,由基本表和相應(yīng)的視圖組成。基本表是在數(shù)據(jù)庫創(chuàng)建過程中自動創(chuàng)建的,而視圖則是通過運(yùn)行 catalog.sql 和 catproc.sql 腳本構(gòu)造的。    因此,Oracle 數(shù)據(jù)庫可看作包含 3 種類型的文件的一個集合:    1.數(shù)據(jù)文件(Data File):包含實際的數(shù)據(jù),數(shù)據(jù)庫的物理實現(xiàn)。(類似于 DB2 中的容器。)    2.重做文件(Redo File):相當(dāng)于 DB2 中的事務(wù)日志(Transaction Log)。    3.控制文件(Control File):包含用于維護(hù)和驗證數(shù)據(jù)庫完整性的信息。    在 DB2 中,一個實例可以包含多個數(shù)據(jù)庫,如 圖 2 所示。每個數(shù)據(jù)庫都是一個封閉的、真正獨立的單元。每個數(shù)據(jù)庫有其自己的編目表空間、臨時表空間和用戶表空間,這些表空間是在創(chuàng)建數(shù)據(jù)庫時缺省創(chuàng)建的。DB2 包含一個稱為系統(tǒng)數(shù)據(jù)庫目錄(system database Directory) 的二進(jìn)制文件,其中包含可從 DB2 機(jī)器上連接的所有數(shù)據(jù)庫的條目。這個目錄保存在實例級。    當(dāng)創(chuàng)建一個實例時,缺省情況下不會創(chuàng)建數(shù)據(jù)庫,您需要使用 create database 命令顯式地創(chuàng)建一個數(shù)據(jù)庫。此外還可以用 Control Center 創(chuàng)建數(shù)據(jù)庫,如 圖 4 和 圖 5 所示。圖 4. 使用 Control Center GUI 創(chuàng)建 DB2 數(shù)據(jù)庫
 
 
圖 5. 使用 Control Center GUI 創(chuàng)建 DB2 數(shù)據(jù)庫(續(xù))
 在 圖 5 中,您也可以看看單擊 Show Command 時會出現(xiàn)什么情況。所有的 DB2 Control Center GUI 屏幕都會顯示實際上在后臺執(zhí)行的 SQL 語句或命令。這些命 令可以保存在一個腳本中,以便在以后執(zhí)行,或者也可以將它們復(fù)制到 Command Line Processor(CLP)或 Command Center GUI 工具中,在這些工具中執(zhí)行。這些工具分別相當(dāng)于 Oracle 的 SQL*Plus 和 iSQL *Plus.
     在 圖 5 中,您也可以看看單擊 Show Command 時會出現(xiàn)什么情況。所有的 DB2 Control Center GUI 屏幕都會顯示實際上在后臺執(zhí)行的 SQL 語句或命令。這些命 令可以保存在一個腳本中,以便在以后執(zhí)行,或者也可以將它們復(fù)制到 Command Line Processor(CLP)或 Command Center GUI 工具中,在這些工具中執(zhí)行。這些工具分別相當(dāng)于 Oracle 的 SQL*Plus 和 iSQL *Plus.
                             可以使用 'DROP DATABASE' 命令或者在 DB2 Control Center GUI 中刪除一個 DB2 數(shù)據(jù)庫。而在 Oracle 中卻不是使用這樣的命令。數(shù)據(jù)庫的刪除是通過刪除所有相關(guān)數(shù)據(jù)文件來完成的。    同一個實例中的數(shù)據(jù)庫通常不會相互進(jìn)行交互。然而,假如應(yīng)用程序需要與多個數(shù)據(jù)庫交互,那么通過啟用聯(lián)邦(federation) 支持可以滿足這一需求。在 參考資料 小節(jié)中有一篇關(guān)于聯(lián)邦的文章。    容器、表空間、緩沖池和頁                                                                                                在 Oracle 中,在物理上數(shù)據(jù)是存儲在被稱作數(shù)據(jù)文件(Data File)的文件中的。這類似于 DB2 的容器(container),DB2 的容器也是數(shù)據(jù)實際存儲的地方。每個 Oracle 數(shù)據(jù)庫包含一個名為 SYSTEM 的表空間,這是在創(chuàng)建數(shù)據(jù)庫時由 Oracle 自動創(chuàng)建的。其他用于用戶數(shù)據(jù)、臨時數(shù)據(jù)和索引數(shù)據(jù)的表空間則需要在創(chuàng)建數(shù)據(jù)庫之后另行創(chuàng)建,并且在使用這些表空間之前,還需要為之指定一個用戶。    在 DB2 中,表空間 是邏輯對象,作為邏輯表和物理容器之間的一層。當(dāng)創(chuàng)建一個表空間時,可以將它與一個特定的緩沖池(數(shù)據(jù)庫緩存)關(guān)聯(lián)起來,并關(guān)聯(lián)到特定的容器。這為性能治理帶來了靈活性。例如,假如有一個 "hot" 表,那么可以在一個單獨的表空間中定義它,而這個表空間又與一個獨立的緩沖池相關(guān)聯(lián)。這有助于確保此表中的數(shù)據(jù)連續(xù)地緩存在內(nèi)存中。    在 DB2 中,使用 CREATE DATABASE 命令及其缺省值創(chuàng)建數(shù)據(jù)庫時,同時也會自動創(chuàng)建三個缺省的表空間。表 1 描述了缺省的 DB2 表空間:表 1. 用缺省值創(chuàng)建數(shù)據(jù)庫時,缺省創(chuàng)建的 DB2 表空間 表空間名稱 描述 SYSCATSPACE包含元數(shù)據(jù)的編目表空間TEMPSPACE1用于執(zhí)行連接和排序等操作的系統(tǒng)臨時表空間。這個表空間的名稱可以更改USERSPACE1這個表空間是可選的,假如在創(chuàng)建表的時候沒有顯式地指定表空間,那么可以用這個表空間來存儲用戶表    在 DB2 中,由于數(shù)據(jù)庫是獨立的單元,因此表空間不能跨數(shù)據(jù)庫共享。由于表空間只在一個數(shù)據(jù)庫中是可知的,因此兩個不同的數(shù)據(jù)庫可以有具有相同名稱的表空間。在 圖 2 中可以看到這一點,其中數(shù)據(jù)庫 MYDB1 有一個名為 MYTBLS 的表空間,而數(shù)據(jù)庫 MYDB2 也有一個同名的表空間。    DB2 表空間可以分為 SMS(系統(tǒng)治理的表空間)與 DMS(數(shù)據(jù)庫治理的表空間)兩類。SMS 表空間由操作系統(tǒng)治理,它們只能是目錄。SMS 表空間可根據(jù)需要自動增長,因此 SMS 可以提供很好的性能,并且需要的治理也很少。DMS 表空間由 DB2 治理,既可以是文件,也可以是原始設(shè)備。這種類型的表空間可以提供最佳性能,但是需要進(jìn)行一些治理。例如,需要預(yù)先指定想要為這個表空間分配多大的空間,因為這種表空間不能自動增長。    Oracle 的存儲模型中沒有 SMS 的概念,但是它的數(shù)據(jù)文件類似于 DB2 DMS 表空間。也就是說,可以通過增加數(shù)據(jù)文件的大小,或為表空間添加數(shù)據(jù)文件,或者通過添加一個新的表空間,來增加數(shù)據(jù)庫的大小。    表 2 顯示了 Oracle 數(shù)據(jù)庫或表空間與 DB2 數(shù)據(jù)庫或表空間的對應(yīng)關(guān)系。表 2. Oracle 數(shù)據(jù)庫與 DB2 數(shù)據(jù)庫和表空間的對應(yīng)關(guān)系 Oracle 數(shù)據(jù)庫或表空間 DB2 數(shù)據(jù)庫或表空間 SYSTEM 是存放編目(數(shù)據(jù)字典)信息的表空間SYSCATSPACE(編目表空間);和在 Oracle 中一樣,僅在數(shù)據(jù)庫級保存該信息Data Dictionary(包含表和視圖形式的元數(shù)據(jù)),駐留在 SYSTEM 表空間中系統(tǒng)編目表(由 SYSIBM 模式標(biāo)識),系統(tǒng)視圖(由 SYSCAT 或 SYSSTAT 模式標(biāo)識),駐留在 SYSCATSPACE 表空間中SCOTT 數(shù)據(jù)庫SAMPLE 數(shù)據(jù)庫TEMP 表空間System Temporary 表空間(缺省情況下名為 tempspace1)UNDO 表空間N/AUSER 表空間用戶表空間。缺省情況下,USERSPACE1 一般是在數(shù)據(jù)庫創(chuàng)建之后才創(chuàng)建的前面已指出,Oracle 的數(shù)據(jù)緩沖區(qū)概念相當(dāng)于 DB2 的緩沖池。但是,DB2 答應(yīng)多個緩沖池存在。在 DB2 中不需要預(yù)先定義可創(chuàng)建的緩沖池的數(shù)量,緩沖池的名稱可以是任意的。Oracle 中塊(block) 的概念與 DB2 中的頁最為相似。一個 DB2 頁的大小可以為 4k、8k、16k 或 32k。表中的一個行只能放在一個頁中,而不能像 Oracle 中那樣跨多個頁。    對象名稱    Oracle 中的對象名稱形式如下:    [Schema_name.]object_name[@database]    在 DB2 中,對象名稱也是由兩部分組成的結(jié)構(gòu):    Schema_name.object_name    和在 Oracle 中一樣,DB2 模式名稱用于在邏輯上組織對象。但是兩者之間一個重要差異是,在 DB2 中,模式名稱不一定與一個用戶 id 相匹配。任何擁有 IMPLICIT_SCHEMA 權(quán)限的用戶都可以用一個不存在的模式創(chuàng)建對象。例如,假設(shè) “Peter” 具有 IMPLICIT_SCHEMA 權(quán)限,他執(zhí)行以下命令:    CREATE TABLE WORLD.TABLEA (lastname char(10))
                             該命令創(chuàng)建表 WORLD.TABLEA,其中 WORLD 是新創(chuàng)建的模式。假如 Peter 沒有顯式地指定模式,那么該命令就會創(chuàng)建表 PETER.TABLEA,因為缺省情況下是使用連接 ID.    在 DB2 中,在發(fā)出與數(shù)據(jù)庫相關(guān)的命令之前,總是要連接到數(shù)據(jù)庫。因此,在這種架構(gòu)下,對象名稱不需要包括數(shù)據(jù)庫名稱。    表、視圖和索引    在 Oracle 和 DB2 中,表、視圖和索引基本上是一樣的。    DB2 提供了一個名為 Design Advisor 的實用程序,可以用它來為特定的查詢或工作負(fù)載推薦索引。Design Advisor 可以從 DB2 Control Center 中調(diào)用,也可以從 DB2 CLP 中使用 db2advis 命令來調(diào)用。在 DB2 中,索引是直接與表定義綁定的。例如,當(dāng)使用 DMS 表空間時,可以用下面的語句指定索引存放在哪個表空間:    CREATE TABLE mytable (col1 integer, col2 char(10)) in tbls1 index in tbls2    上面的例子表明,表中的數(shù)據(jù)將存儲在表空間 'tbls1' 中,而索引頁將存儲在表空間 'tbls2' 中。但在 Oracle 語法中,CREATE INDEX 語句有一個選項來指定索引存放在哪個表空間。    此外,在 DB2 中,索引一旦創(chuàng)建好,便不能修改索引定義中的任何子句。為了進(jìn)行更改,需要刪除索引,然后重新創(chuàng)建索引。    和在 Oracle 中一樣,不同數(shù)據(jù)庫中的 DB2 表、視圖和索引可以有相同的名稱。相同數(shù)據(jù)庫中的表和視圖則必須使用不同的名稱,但是答應(yīng)使用與已有的表或視圖相同的名稱創(chuàng)建索引。    存儲過程、觸發(fā)器和用戶定義函數(shù)(UDF)                                                                                                在 Oracle 環(huán)境中,有很多方法來創(chuàng)建和訪問存儲過程、觸發(fā)器和函數(shù)。PL/SQL 是 SQL 的面向?qū)ο螅∣O)過程擴(kuò)展,支持?jǐn)?shù)據(jù)操縱(DML)、流控制、變量和常量的聲明、過程和函數(shù)定義以及 OO 數(shù)據(jù)類型,例如嵌套表和變長數(shù)組(varray)。Oracle 還將 JVM 并入到它的引擎中。在 Oracle 數(shù)據(jù)庫中,可以使用 SQLJ 將存儲過程、函數(shù)和觸發(fā)器,作為類來創(chuàng)建、存儲和執(zhí)行。Oracle 還支持 Type 1 至 4 的 JDBC 驅(qū)動程序。    DB2 存儲過程可以用 DB2 預(yù)編譯器支持的任何語言編寫,包括 java、C、C++、REXX、Fortran 和 COBOL.但是,我們推薦您使用 SQL Procedural Language(SQL PL),這種語言非常類似于 Oracle 的 PL/SQL.在開發(fā) SQL PL 存儲過程時,需要一個 C 編譯器,因為這種存儲過程首先要轉(zhuǎn)換成 C.存儲過程的 C 實現(xiàn)可以提供性能優(yōu)勢,因為代碼只需編譯一次(在 unfenced 模式下性能優(yōu)點尤其明顯)。但是,在開發(fā)這種存儲過程時,開發(fā)系統(tǒng)上需要一個額外的 C 編譯器。在 DB2 將來的版本中,有望出現(xiàn)不需 C 編譯器支持的 SQL PL 存儲過程。DB2 存儲過程開發(fā)還利用 Type 1 至 4 的 JDBC 驅(qū)動程序來支持 SQLJ 和 Java.    觸發(fā)器和函數(shù)的開發(fā)可以使用內(nèi)聯(lián) SQL/PL,這種方法不需要 C 編譯器。這種方法支持 SQL PL 語句的一個子集。另外還可以使用 DB2 Development Center Tool 來簡化 DB2 存儲過程和用戶定義函數(shù)的創(chuàng)建、構(gòu)建、調(diào)試和部署。    配置文件    傳統(tǒng)上,Oracle 將所有與會話和系統(tǒng)相關(guān)的參數(shù)存儲在一個文本文件中,這種文件通常被稱做 initSID.ora.但是,由于這種文本文件不具有持久性,從 Oracle 9i 開始,Oracle 引入了 Server Parameter File(SPFILE),這是一種存儲在服務(wù)器上的二進(jìn)制參數(shù)文件。它在實例停止之后到啟動之前這個過程中是持久存在的。不過,當(dāng) SPFILE 不可用的時候,仍然使用 initSID.ora 文件。引入 SPFILE 之前,任何對參數(shù)有影響的 ALTER SYSTEM 和 ALTER session 命令都只能在實例或會話活動期間持久。每當(dāng)數(shù)據(jù)庫實例需要回彈(rebound)時,DBA 都必須手動修改 initSID.ora 文本文件。對于偵聽器,網(wǎng)絡(luò)訪問配置通常存儲在 listener.ora 中;對于客戶機(jī)訪問,網(wǎng)絡(luò)訪問配置通常存儲在 tnsnames.ora 中。    在 DB2 中,配置參數(shù)也是存儲在實例級和數(shù)據(jù)庫級,在實例級是數(shù)據(jù)庫治理器(database manager) 配置文件,在數(shù)據(jù)庫級是數(shù)據(jù)庫配置文件。這些參數(shù)大多數(shù)都可以動態(tài)地更改,也就是說,不需要為了使對參數(shù)值的更改生效而停止并重啟實例或者重連所有連接。    假如想在 CLP 中手動更改特定的數(shù)據(jù)庫治理器配置參數(shù),可以使用命令 UPDATE DBM CFG USING <parameter name> <new value>.    假如想在 CLP 中手動更改特定的數(shù)據(jù)庫參數(shù),可以使用命令 UPDATE DB CFG FOR <database name> USING <parameter name> <new value>.
                             這兩個命令分別相當(dāng)于 Oracle 的 ALTER SYSTEM 和 ALTER SESSION.或者,也可以使用 Control Center 查看和修改這些參數(shù)的值。假如右鍵單擊一個給定的實例,并選擇 Configure Parameters,那么可以看到 圖 6 中顯示的窗口。圖 6. DB2 Database Manager 配置參數(shù)(實例級)
 
 
在數(shù)據(jù)庫級,右擊一個給定的數(shù)據(jù)庫,并選擇 Configure Parameters,則可以看到 圖 7 中顯示的窗口。
圖 7. 數(shù)據(jù)庫配置參數(shù)(數(shù)據(jù)庫級)
 
 
DB2 提供了很多用于配置系統(tǒng)的參數(shù)。但是,假如想通過一種輕易的方法自動配置系統(tǒng),那么可以使用 autoconfigure 命令(或者 Configuration Advisor GUI),它會根據(jù)您提供的一些信息將數(shù)據(jù)庫治理器配置參數(shù)和數(shù)據(jù)庫配置參數(shù)設(shè)置成最佳值。圖 8 顯示了 Configuration Advisor。
圖 8. DB2 Configuration Advisor
 
 
除了配置文件外,DB2 通常還為與平臺相關(guān)的配置使用 DB2 注冊表變量。注重,DB2 注冊表變量與 Windows 注冊表沒有任何關(guān)系。可以使用命令 db2set 查看和更改這些變量。連接(網(wǎng)絡(luò)訪問)信息存儲在 System 數(shù)據(jù)庫目錄、本地數(shù)據(jù)庫目錄和節(jié)點目錄中。這些都是二進(jìn)制文件,只能用 CATALOG 和 UNCATALOG 命令修改。  內(nèi)存架構(gòu)和后臺進(jìn)程接下來,我們來看看內(nèi)存架構(gòu)和后臺進(jìn)程,并且比較一下 Oracle 和 DB2 中內(nèi)存架構(gòu)和后臺進(jìn)程的不同之處。
圖 9. Oracle 內(nèi)存架構(gòu)和后臺進(jìn)程
 
 
Oracle 中的 System Global Area(SGA)是一組共享內(nèi)存塊,用于存儲與實例有關(guān)的信息。其中包括語句緩存、重做日志緩沖區(qū)和數(shù)據(jù)緩沖區(qū)緩存。Program Global Area(PGA)和 User Global Area(UGA)共享內(nèi)存塊,包含用于服務(wù)器進(jìn)程和用戶會話的數(shù)據(jù)和控制信息。Oracle 支持在同一臺計算機(jī)上存在多個實例,但不答應(yīng)共享后臺進(jìn)程。例如,同一臺計算機(jī)上的三個實例就需要三組后臺進(jìn)程。因此建議在一臺計算機(jī)上包含一個數(shù)據(jù)庫、一個實例和多個模式。
圖 10. DB2 內(nèi)存架構(gòu)和后臺進(jìn)程
 
 
DB2 和 Oracle 都使用共享內(nèi)存塊,但是 DB2 與 Oracle 內(nèi)存架構(gòu)的實現(xiàn)方式略有不同。由于 DB2 實例可以包含多個數(shù)據(jù)庫,因此存在兩個級別的配置。在前一節(jié)已經(jīng)提到,實例級的配置可以在 DBM CFG 文件中完成,而數(shù)據(jù)庫級的配置則可以在 DB CFG 文件中完成。這兩個級別上的配置參數(shù)都可以進(jìn)行調(diào)整,以調(diào)優(yōu)內(nèi)存使用情況。后文將更具體地闡述 DB2 的內(nèi)存結(jié)構(gòu)和不同的后臺進(jìn)程。Oracle 是在實例和數(shù)據(jù)庫啟動時將內(nèi)存分配給它們的,而 DB2 則是在不同級別上分配內(nèi)存。這主要是因為 DB2 實例可以包含多個數(shù)據(jù)庫。DB2 中主要有三種內(nèi)存結(jié)構(gòu):- 實例共享內(nèi)存:這是數(shù)據(jù)庫治理器全局共享內(nèi)存,是在使用 db2start 命令啟動實例時分配給實例的,并且在發(fā)出 db2stop 命令停止實例之前,一直處于已分配狀態(tài)。 
- 數(shù)據(jù)庫共享內(nèi)存:這是數(shù)據(jù)庫全局內(nèi)存,是在激活數(shù)據(jù)庫或者第一次連接到數(shù)據(jù)庫時分配的。分配的內(nèi)存包括緩沖池、鎖列表、數(shù)據(jù)庫堆、實用程序堆、包緩存和編目緩存。 
- 應(yīng)用程序共享內(nèi)存:這是在應(yīng)用程序連接到一個數(shù)據(jù)庫時分配的內(nèi)存,由處理連接到數(shù)據(jù)庫的客戶機(jī)所請求的工作的代理使用。每個連接到數(shù)據(jù)庫的應(yīng)用程序都會被分配內(nèi)存;因此,對會影響應(yīng)用程序共享內(nèi)存的參數(shù)的正確配置就非常重要。 
在 DB2 for Windows 中,服務(wù)器活動是以線程的形式進(jìn)行的,而在 Linux 和 UNIX 環(huán)境中,這些活動是以后臺進(jìn)程的形式來實現(xiàn)的。DB2 有以下幾種級別的進(jìn)程:- 實例級:這些進(jìn)程是在實例啟動時初始化的: - DB2 Daemon Spawner(db2gds):全局守護(hù)處理程序,每個實例都對應(yīng)一個這樣的進(jìn)程(僅在 UNIX 中) 
- DB2 System Controller(db2sysc):DB2 主進(jìn)程。 
- DB2 Watchdog(db2wdog):所有其他進(jìn)程的父進(jìn)程。 
- DB2 Format Log(db2fmtlg):類似于 Oracle 中的 ARCn 進(jìn)程,為日志路徑中的日志文件預(yù)先分配空間。 
 
 
- 數(shù)據(jù)庫級:這些進(jìn)程是在建立到數(shù)據(jù)庫的連接時初始化的: - DB2 Log Reader(db2loggr):類似于 Oracle 的 PMON 進(jìn)程的一個子集。該進(jìn)程在回滾、重啟恢復(fù)和前滾期間讀取日志文件。 
- DB2 Log Writer(db2logw):將日志從日志緩沖區(qū)刷新到磁盤上的事務(wù)日志文件中。相當(dāng)于 Oracle 中的 LGWR 進(jìn)程。 
- DB2 Page Cleaner(db2pclnr):相當(dāng)于 Oracle 中的 DBWR 進(jìn)程,該進(jìn)程在將頁從磁盤上轉(zhuǎn)移到 BP 中之前,清理緩沖池。 
- DB2 Prefetcher(db2pfchr):將需要用到的頁預(yù)先從磁盤取出到緩沖池中。 
- DB2 Deadlock Detector(db2dlock):死鎖檢測器進(jìn)程。 
 
 
- 應(yīng)用程序級:每個連接到數(shù)據(jù)庫的應(yīng)用程序,都具有屬于它自己的應(yīng)用程序級后臺進(jìn)程與之相關(guān)聯(lián)。這些進(jìn)程有: - DB2 Communication Manager(db2ipccm):進(jìn)程間通信進(jìn)程,用于每個本地連接的客戶機(jī)。 
- DB2 TCP Manager(db2tcpcm):TCP 通信治理器進(jìn)程,用于使用 TCP/IP 連接數(shù)據(jù)庫的遠(yuǎn)程客戶機(jī)。 
- DB2 Coordinating Agent(db2agent):代表應(yīng)用程序處理所有請求的進(jìn)程。 
- DB2 Subagent(db2agnta):空閑子代理。 
- Active Subagent(db2agntp):在啟用了 SMP 并行的情況下使用的活動子代理,它使一個任務(wù)可以使用多個進(jìn)程。 
 
                         要獲得對 DB2 進(jìn)程的完整解釋,請參考文章 “DB2 通用數(shù)據(jù)庫進(jìn)程全接觸”。  鎖機(jī)制Oracle 中的鎖可以是手動的,也可以是自動的。Oracle Lock Manager 可以在行級隱式地鎖定表數(shù)據(jù),此外也可以使用以下 SQL 語句在事務(wù)或會話級覆蓋缺省的鎖:
1. SET TRANSACTION ISOLATION LEVEL 
2. LOCK TABLE 
                                                                                            3. SELECT FOR UPDATE Oracle 支持一種稱為 Multi-Version Read Consistency 的機(jī)制,這是用 undo 段中的 undo 數(shù)據(jù)實現(xiàn)的。DB2 實現(xiàn) ANSI 標(biāo)準(zhǔn)隔離(Isolation)級別,例如未提交讀(Uncommitted Read)、游標(biāo)穩(wěn)定性(Cursor stability)、讀穩(wěn)定性(Read stability)和可重復(fù)讀(Repeatable Read)。除非使用未提交讀隔離級別,否則用戶只能看到已提交的數(shù)據(jù)。行鎖是根據(jù)隔離級別隱式地獲得的。可鎖定的數(shù)據(jù)庫對象有表空間、表和行,但是,只有表和表空間可以顯式鎖定。可使用 LOCK TABLE 命令來鎖定一個表,而不是使用缺省的行鎖定。與 Oracle 不同,在 DB2 中,鎖是存儲在內(nèi)存中的,而不是存儲在數(shù)據(jù)頁中。可以使用 LOCKLIST 數(shù)據(jù)庫配置參數(shù)來配置鎖可用的內(nèi)存,而 MAXLOCKS 配置參數(shù)則定義用于一個特定應(yīng)用程序的鎖的最大內(nèi)存。安全性Oracle 和 DB2 都是具有基本的和高級的安全特性的安全數(shù)據(jù)庫。Oracle 中有 4 種不同的用戶身份驗證方法:- 數(shù)據(jù)庫:數(shù)據(jù)庫執(zhí)行對用戶的識別和身份驗證。 
- 外部:操作系統(tǒng)或網(wǎng)絡(luò)服務(wù)執(zhí)行身份驗證。 
- 全局身份驗證和授權(quán):由 SSL 對用戶進(jìn)行全局身份驗證。 
- 代理身份驗證和授權(quán):中間層服務(wù)器執(zhí)行身份驗證。 
身份驗證方法是在使用 CREATE USER 命令創(chuàng)建用戶時指定的。Oracle 中有一些 Data Dictionary 視圖,其中包含了關(guān)于這些用戶的信息。在 DB2 中,用戶不是存在于數(shù)據(jù)庫中,而是由操作系統(tǒng)來治理。沒有數(shù)據(jù)庫登錄信息存放在數(shù)據(jù)庫表中。任何操作系統(tǒng)用戶都有可能訪問 DB2;但是,除非他們被授予了給定的 DB2 權(quán)限或特權(quán),否則他們能做的事情不多。通過 Control Center GUI 很輕易授予和撤銷權(quán)限和特權(quán)。不過首先需要將可用操作系統(tǒng)用戶或組中的一個用戶或組添加到 Control Center。在 DB2 中沒有 “角色(role)” 這個術(shù)語。相反,DB2 使用術(shù)語 “權(quán)限(authority)”,它類似于 Oracle 的數(shù)據(jù)庫角色,DB2 通過權(quán)限將特權(quán)授予某些組或用戶。DB2 支持的權(quán)限有:SYSADM、SYSCTRL、SYSMAINT、DBADM 和 LOAD。不能使用 GRANT SQL 語句授予 SYSADM、SYSCTRL 和 SYSMAINT 權(quán)限。這些非凡的權(quán)限只能在數(shù)據(jù)庫治理器配置文件中設(shè)置。DB2 還使用術(shù)語 “特權(quán)(privilege)”,它類似于 Oracle 的系統(tǒng)和模式對象特權(quán)。DB2 中有數(shù)據(jù)庫特權(quán)(連接、創(chuàng)建表等)和數(shù)據(jù)庫對象特權(quán)(模式、表、視圖等)。圖 11 顯示了從 Control Center GUI 獲得的 DB2 安全性信息。Change User 窗口中顯示的大部分選項卡對應(yīng)了 DB2 所支持的特權(quán)。
圖 11. DB2 安全性
 
 
Oracle 10g 的安全性大體上沒有變化,只有部分增強(qiáng)。下面是 Oracle 10g 中的增強(qiáng)的列表: - FGA 的 DML 支持 —— 細(xì)粒度審計(fine-grained auditing,F(xiàn)GA)的 SQL 支持得到了增強(qiáng),現(xiàn)在支持查詢和 UPDATE、INSERT 和 DELETE 操作這些粒度上的審計。 
- SASL 上的通信 —— 該特性為 Oracle Internet Directory(OID)與數(shù)據(jù)庫之間或者兩個數(shù)據(jù)庫之間的通信提供了一種安全通道。假如您的企業(yè)部署通過密碼進(jìn)行身份驗證的用戶,那么也就不再需要在公共密鑰基礎(chǔ)設(shè)施(PKI)方面投入資金和治理工作。SASL(Simple Authentication and Security Layer)通信提供了等價的安全通道。 
- 統(tǒng)一用戶模型 —— 目錄中定義的單點登錄(single sign)用戶現(xiàn)在可以使用 Enterprise User Security 提供的特性。不需要為供給和憑證治理而執(zhí)行附加的任務(wù)。此外,Enterprise User Security 的治理組現(xiàn)在可以指派一個所有者,這促進(jìn)了整體上更有力的安全性。 
- 輕松的數(shù)據(jù)庫注冊 —— 該特性消除了對 RDBMS_SERVER_DN 參數(shù)的需要,使得企業(yè)用戶的配置更為輕松。 
- 擴(kuò)展的、統(tǒng)一的審計跟蹤 —— 該特性以標(biāo)準(zhǔn)的、細(xì)粒度的審計表的形式,為 RDBMS 審計提供了一致的審計跟蹤,改進(jìn)了安全性治理。事務(wù)和 SQL 信息也被添加到審計表中,以便進(jìn)一步提高所有用戶的可問責(zé)性(accountability)。 
- Oracle 標(biāo)簽安全性目錄集成 —— 現(xiàn)在可以在一個中心 OID/LDAP 儲存庫中治理 Oracle Label Security 策略和用戶標(biāo)簽授權(quán)。這節(jié)約了治理成本,同時也消除了多個治理點,從而增加了安全性。 
DB2 中的身份驗證不僅涉及對用戶名和密碼進(jìn)行加密,還答應(yīng)對客戶機(jī)與服務(wù)器之間傳輸?shù)臄?shù)據(jù)進(jìn)行加密。身份驗證的位置由數(shù)據(jù)庫治理器配置參數(shù) AUTHENTICATION 的值決定。 下面是用于啟用 DB2 的身份驗證的有效選項:- SERVER_ENCRYPT —— 這個值規(guī)定身份驗證發(fā)生在服務(wù)器上。首先加密連接期間指定的用戶 id 和密碼,然后將它們發(fā)送到服務(wù)器,在服務(wù)器上將它們與服務(wù)器端的用戶和密碼進(jìn)行比較。假如匹配成功,那么用戶就被答應(yīng)訪問數(shù)據(jù)庫。 
- KRB_SERVER_ENCRYPT —— 規(guī)定服務(wù)器接受 KERBEROS 身份驗證或加密的 SERVER 身份驗證模式。 
- DATA_ENCRYPT —— 規(guī)定服務(wù)器答應(yīng) SERVER 身份驗證,并且對客戶機(jī)與服務(wù)器之間通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)進(jìn)行加密。 
- DATA_ENCRYPT_CMP —— 規(guī)定服務(wù)器接受加密的 SERVER 身份驗證模式和用戶數(shù)據(jù)的加密。 這種身份驗證類型能與不支持 DATA_ENCRYPT 身份驗證類型的下級產(chǎn)品兼容。 
- GSS_SERVER_ENCRYPT —— 規(guī)定服務(wù)器接受基于 GSS API 的插件身份驗證或加密的服務(wù)器身份驗證模式。
                         若要更新 AUTHENTICATION 實例參數(shù),例如將它的值設(shè)置為 DATA_ENCRYPT,可以使用以下命令:
清單 1. 更新 AUTHENTICATION 實例參數(shù)
                        UPDATE DBM CFG USING AUTHENTICATION DATA_ENCRYPT                        db2stop                        db2start                        
DB2 提供了基于標(biāo)簽的訪問控制(Label Based Access Control,LBAC)機(jī)制,從而進(jìn)一步擴(kuò)展了安全性。 LBAC 特性為控制對各行和各列的讀寫訪問提供了更大的粒度。 DB2 中提供了一種新的安全治理員角色(SECADM),用于操縱 LBAC 對象。 試圖訪問一個對象的用戶必須被授予該對象的安全標(biāo)簽。假如安全標(biāo)簽匹配,則答應(yīng)訪問;假如不匹配,則拒絕訪問。實現(xiàn) DB2 中的 LBAC 安全性基本上有三個步驟: - 創(chuàng)建安全策略。
 安全策略描述用于決定誰可以訪問特定數(shù)據(jù)的憑證。任何一個表只能由一個安全策略來保護(hù),但是不同表可以由不同的安全策略來保護(hù)。這是通過使用 CREATE SECURITY POLICY 語句來實現(xiàn)的。安全策略的所有治理都是通過使用 SQL 語句來完成的。
- 創(chuàng)建安全標(biāo)簽。
 一共有三種類型的安全標(biāo)簽:- 行安全標(biāo)簽。與數(shù)據(jù)庫表中的一個數(shù)據(jù)行或記錄相關(guān)聯(lián)的安全標(biāo)簽。 
- 列安全標(biāo)簽。與數(shù)據(jù)庫表中一個列相關(guān)聯(lián)的安全標(biāo)簽。 
- 用戶安全標(biāo)簽。為數(shù)據(jù)庫用戶授予的安全標(biāo)簽。 
 安全標(biāo)簽由 SECADM 創(chuàng)建,作為策略的一部分。 創(chuàng)建好一個安全標(biāo)簽之后,可以將其與表中各個列和行相關(guān)聯(lián),以保護(hù)存放在那里的數(shù)據(jù)。
- 為用戶授予安全標(biāo)簽,使他們可以訪問數(shù)據(jù)。 安全治理員通過為用戶授予安全標(biāo)簽來答應(yīng)他們訪問受保護(hù)的數(shù)據(jù)。 當(dāng)一個用戶試圖訪問受保護(hù)的數(shù)據(jù)時,DB2 將那個用戶的安全標(biāo)簽與保護(hù)數(shù)據(jù)的安全標(biāo)簽進(jìn)行比較。 
除了特權(quán)和權(quán)限外,數(shù)據(jù)庫安全性還包含其他方面。簡單地說,Oracle 與 DB2 之間既有不同點,也有相同點:用戶身份驗證和授權(quán) Oracle 在創(chuàng)建用戶之后,使用存儲在目錄中的加密密碼。DB2 支持用于用戶身份驗證的密碼,并使用底層的操作用戶進(jìn)行身份驗證。Oracle 和 DB2 都支持 LDAP (Oracle Internet Directory 與 IBM Directory Server)。Oracle 和 DB2 都支持單點登錄(SSO)。數(shù)據(jù)加密 Oracle 支持?jǐn)?shù)據(jù)加密,它可以對敏感數(shù)據(jù),例如信用卡號和一些高度敏感的商業(yè)數(shù)據(jù)進(jìn)行加密。DB2 答應(yīng)列級的數(shù)據(jù)加密。網(wǎng)絡(luò)加密 Oracle 通過它的 Oracle Advanced Security 提供網(wǎng)絡(luò)加密。Oracle 使用 DES、3DES 和 RC4 業(yè)界標(biāo)準(zhǔn)加密。DB2 本身不進(jìn)行網(wǎng)絡(luò)加密。但可以使用附帶的 Tivoli SecureWay 實現(xiàn)網(wǎng)絡(luò)加密。審計跟蹤 Oracle 答應(yīng)審計跟蹤用戶和對象。還可以使用日志挖掘程序調(diào)查和分析有疑問的查詢。DB2 也提供了類似的審計設(shè)施。在 DB2 中,可以使用 db2audit 實用程序進(jìn)行審計跟蹤。DB2 9 pureXML 特性在本節(jié)中,我們將 Oracle 對 XML 的支持與 DB2 對 XML 的支持進(jìn)行比較。 Oracle XML DB 特性隨 Oracle 9i Release 2 一起發(fā)布,借助該特性,通過定義 XMLTYPE 表和列,將它們存儲為 CLOB 或拆分(分解)到關(guān)系表中,可以實現(xiàn)對 XML 存儲、檢索和模式的治理。 Oracle 10g 為治理 XML 文檔提供了一些增強(qiáng)。例如,通過映射已有的數(shù)據(jù),可以動態(tài)地反映模式的更改,而不必重新導(dǎo)入。Oracle 10g 包括一些工具包,例如:- XML-SQL Util(XSU) —— 為 PL/SQL 和 Java 提供的接口。 
- XML Developer's kits(XDK) —— 用于受支持的語言,例如 PL/SQL、C++ 和 Java。 
Oracle 10g 仍然是一種 支持 XML 的 數(shù)據(jù)庫。它提供的所有接口、API 和包,都是為了減輕 XML 與關(guān)系表之間的相互轉(zhuǎn)換和映射所帶來的負(fù)擔(dān)、復(fù)雜性和維護(hù)。支持 XML 的數(shù)據(jù)庫,不管是使用 CLOB 還是分解方法,都不能提供良好的性能。例如,在使用 CLOB 的情況下,XML 文檔作為鏡像文件存儲在數(shù)據(jù)庫中。您可能已經(jīng)知道,鏡像文件的治理是很麻煩的。分解方法在性能方面也不如人意。將一個 XML 文檔分解成小塊并存儲在多個表中之后,當(dāng)需要將 XML 文檔組合成原樣時,就不得不使用一個 SQL JOIN 操作。SQL 中的 JOIN 是開銷很大的,非凡是表的數(shù)量較多時這一點尤其明顯。保持?jǐn)?shù)字簽名的保真度同樣也是一個挑戰(zhàn)。 另一方面,DB2 9 pureXML 技術(shù)則是原生存儲 XML 文檔,也就是說,在內(nèi)部以樹型格式存儲 XML 文檔。它還答應(yīng)同時使用 SQL 和 XML 擴(kuò)展,即 Xquery 和 XPath 來訪問關(guān)系數(shù)據(jù)和 XML 數(shù)據(jù)。原生存儲 XML 文檔是一種更好的方法,IBM 的研究表明,使用該方法在 XML 文檔的搜索和檢索方面可以取得更好的性能,并且能減少某些程序中代碼的行數(shù)。要在數(shù)據(jù)庫中使用 pureXML 特性,在創(chuàng)建數(shù)據(jù)庫時要使用 UNICODE(例如使用編碼集 UTF-8)。在創(chuàng)建一個表之前,假如沒能創(chuàng)建一個 UNICODE 數(shù)據(jù)庫,則會產(chǎn)生如下所示的錯誤:SQL1239N  XML features can only be used in a Unicode database with a single database partition.  SQLSTATE=42997
                         DB2 與之前版本一樣存儲關(guān)系數(shù)據(jù)。但是,XML 數(shù)據(jù)是以分層格式存儲的(作為使用 Xquery 數(shù)據(jù)模型的一棵樹)。XML 與關(guān)系服務(wù)之間是緊密集成的。為了存儲 XML 文檔,用戶需要創(chuàng)建一個表,并指定一個列使用一種新的數(shù)據(jù)類型,即 XML,如下面的例子所示。
清單 2. 用 XML 數(shù)據(jù)類型創(chuàng)建表
                        create table T (i int, doc xml)                        
下圖展示了這兩列的顯示效果:
圖 12. DB2 存儲模型
 
 
  由于 XML 文檔是以解析的分層格式存儲在 XQuery Data Model (XDM) 中的,因此不需要進(jìn)行轉(zhuǎn)換或映射。用于存儲 XML 文檔的格式就是用于處理 XML 文檔的格式。這樣可以提供更好的性能。                                                                                             備份、恢復(fù)、導(dǎo)入等實用程序?qū)?XML 列的表的作用與其他表是一樣的。可以使用 INSERT 語句或 IMPORT 實用程序(注重:DB2 LOAD 實用程序還不支持 XML)將 XML 數(shù)據(jù)插入 XML 列。在導(dǎo)入來自第三方的 XML 文檔之前,最好根據(jù)一個預(yù)定義的 XML 模式驗證這些文檔。為了注冊一個 XML 模式,DBA 需要執(zhí)行 REGISTER XML SCHEMA 命令,并以 COMPLETE XML SCHEMA 結(jié)束,以完成注冊過程。 DB2 9 還支持在一個 XML 文檔的子集或整個文檔上創(chuàng)建索引。在創(chuàng)建索引時,需要指定 XPATH,它將指向被建索引的特定元素/屬性。 在 DB2 9 中,有四種方法來訪問關(guān)系數(shù)據(jù)和 XML 數(shù)據(jù),如 圖 13 所示: - 純 SQL(不涉及 XQuery) 
- SQL/XML,也就是說嵌入在 SQL 中的 XQuery 
- XQuery 作為獨立的語言(不涉及 SQL) 
- 帶嵌入式 SQL 的 Xquery 
圖 13. 可能的 PureXML 查詢
 
 
表 3 比較了 DB2 9 與 Oracle 10g 的 XML 功能。 表 3. XML 特性比較 XML 功能 | Oracle 10g | IBM DB2 9 for Linux, Unix and Windows | 支持 XML 的存儲√不適用XML 原生存儲×√大環(huán)境的易維護(hù)性×√高度可伸縮性×√將 XML 文檔存儲為 CLOB√√。但是從長遠(yuǎn)看,鼓勵使用 XML 原生存儲分解√√。但是從長遠(yuǎn)看,鼓勵使用 XML 原生存儲要看到更深入的討論,可以在 developerWorks 上找到更多關(guān)于 IBM pureXML 功能的文章,例如 使用 XQuery 查詢 DB2 XML 數(shù)據(jù) 和 使用 SQL 查詢 DB2 XML 數(shù)據(jù)。
表分區(qū)DB2 的表分區(qū)(即區(qū)域分區(qū))類似于 Oracle 的分區(qū)。它基本上答應(yīng)將一個邏輯表拆分成跨一個或多個表空間的多個物理存儲對象。每個對象對應(yīng)于一個 “分區(qū)”,答應(yīng)每個表空間包含一定范圍的、很輕易訪問的數(shù)據(jù)。 在 DB2 中,有多種方法對數(shù)據(jù)進(jìn)行分區(qū),您可以同時將這些方法應(yīng)用于相同的數(shù)據(jù)。為了避免讀者感到困惑,下面簡單地解釋一下提供這種分區(qū)的各種不同方法: 
- DATABASE PARTITIONING —— 按照鍵散列將數(shù)據(jù)分布在數(shù)據(jù)庫的多個邏輯節(jié)點上(DPF)。 
- RANGE/TABLE PARTITIONING(DB2 9 提供) —— 根據(jù)鍵區(qū)域?qū)?shù)據(jù)劃分到一個邏輯數(shù)據(jù)庫分區(qū)中的多個物理對象上。 
- MULTI DIMENSIONAL CLUSTERING(MDC) —— 根據(jù)多個鍵值組織表(或一個表中的區(qū)域)中的數(shù)據(jù)。 
 利用 DB2 9 中新引入的表分區(qū)特性,可以根據(jù)一個或多個表列中的特定值將表數(shù)據(jù)劃分到不同的表空間。 這些分區(qū)可以獨立地進(jìn)行備份和恢復(fù),可以提高某些查詢的性能,因為 DB2 優(yōu)化器知道這些分區(qū)的存在,并且可以避免對查詢中不需要的分區(qū)進(jìn)行掃描。例如,假如按一年的四個季度對表進(jìn)行分區(qū),并且查詢只需要第 4 季度的數(shù)據(jù),那么 DB2 將不解析前三個季度,而是直接找到第 4 個季度并解析之。這被稱作分區(qū)排除(partition elimination)。 如前所述,在 DB2 9 中,數(shù)據(jù)組織的三種方法,即數(shù)據(jù)庫分區(qū)(Database Partitioning)、表分區(qū)(Table Partitioning)和多維集群(Multi Dimensional Clustering)可同時使用。 下面的例子創(chuàng)建一個 customer 表,其中 l_shipdate >= '01/01/2006' 且 l_shipdate <= '03/31/2006' 的行存儲在表空間 ts1 中,l_shipdate >= '04/01/2006' 且 l_shipdate <= '06/30/2006' 的行存儲在表空間 ts2 中,依此類推。更詳盡的解釋可以參閱 developerWorks 文章 Table partitioning in DB2 9。 
清單 3. 將一個表按區(qū)域分區(qū)
                        CREATE TABLE customer (l_shipdate, l_name CHAR(30))                        IN ts1, ts2, ts3, ts4, ts5                        PARTITION BY RANGE(l_shipdate)                        (STARTING FROM ('01/01/2006')                        ENDING AT ('12/31/2006')                        EVERY (3 MONTHS))                         
行壓縮特性Oracle 提供了兩種壓縮特性:一種是索引級壓縮,另一種是表級壓縮。假如對這些特性沒有適當(dāng)?shù)囊?guī)劃,就會對性能產(chǎn)生不良影響。 Oracle 從版本 8i 開始就引入了索引壓縮。可以壓縮的索引有 bitmap、BTree 和索引組織的表。索引壓縮使用起來很簡單。例如,要用壓縮特性創(chuàng)建一個索引,可以使用如下代碼: 
清單 4. 用壓縮特性創(chuàng)建索引
                        CREATE INDEX ord_customer_ix_demo                        ON orders (customer_id, sales_rep_id)                        COMPRESS 1;                        
對于不是在內(nèi)部用壓縮特性創(chuàng)建的索引,可以通過修改它們將它們轉(zhuǎn)換成壓縮索引。下面顯示了一個示例,這個示例展示了如何修改索引,以使其變成壓縮索引。 
清單 5. 用壓縮特性修改索引
                        alter index ord_customer_ix_demo rebuild compress                        
目前,Oracle 沒有提供任何自動化的建議者程序來指出哪些索引應(yīng)該被壓縮。大多數(shù)通過索引壓縮獲得的好處,都需要擁有嫻熟的 Oracle CBO 知識的資深 DBA 經(jīng)過適當(dāng)規(guī)劃才能獲得。 另一方面,表壓縮是在 Oracle 9i release 2 中引入的。它可以用于壓縮整個表、表分區(qū)和具體視圖。壓縮可應(yīng)用于所有分區(qū)或部分分區(qū)。雖然表壓縮也可以用于未分區(qū)的表,但是在 OLTP 工作負(fù)載中將表壓縮應(yīng)用于未分區(qū)的表并不可取,因為插入和更新性能會受到影響。在 Oracle 表壓縮中,數(shù)據(jù)庫塊中重復(fù)的值將被去除,信息將被存儲起來,以便在塊中重新創(chuàng)建未壓縮的數(shù)據(jù)。 下面的例子展示了如何用壓縮特性創(chuàng)建分區(qū)表。 
清單 6. 用壓縮特性創(chuàng)建表
                        CREATE TABLE costs_demo (                        prod_id NUMBER(6), time_id DATE,                        unit_cost NUMBER(10,2), unit_price NUMBER(10,2))                        PARTITION BY RANGE (time_id)                        (PARTITION costs_old                        VALUES LESS THAN (TO_DATE('01-JAN-2003', 'DD-MON-YYYY')) COMPRESS,                        PARTITION costs_q1_2003                        VALUES LESS THAN (TO_DATE('01-APR-2003', 'DD-MON-YYYY')),                        PARTITION costs_q2_2003                        VALUES LESS THAN (TO_DATE('01-JUN-2003', 'DD-MON-YYYY')),                        PARTITION costs_recent VALUES LESS THAN (MAXVALUE));  為了將一個表轉(zhuǎn)換成壓縮表,可以使用 alter table <table name> move compress。但是,壓縮表不答應(yīng)添加或刪除列。 至于 DB2,在 DB2 9 之前就有一些壓縮方法,但是,行壓縮是在 DB2 9 中才引入的。行壓縮要求創(chuàng)建一個目錄,用于存儲重復(fù)模式或條目以及數(shù)字鍵。壓縮算法足夠智能,不會壓縮那些對節(jié)省磁盤空間幫助不大的行。 DB2 的行壓縮不像 Oracle 的鍵壓縮,它不需要指定鍵。 可以通過 CREATE TABLE 或 ALTER TABLE 命令在表級進(jìn)行壓縮。例如: 
清單 7. 用 COMPRESSION YES 創(chuàng)建/修改表
                        CREATE TABLE Sales COMPRESS YES                        ALTER TABLE Sales COMPRESS YES                        
為了在 DB2 Control Center 中取得相同的效果,在列定義過程中(表創(chuàng)建向?qū)е械牡诙剑瑧?yīng)確保選中面板底端的復(fù)選框 Store table data in a compressed format(如下圖所示)。
圖 14. DB2 Control Center —— 以壓縮格式創(chuàng)建表
 
 只有在執(zhí)行 REORG 的時候才構(gòu)建表字典,之后便可以壓縮表中的數(shù)據(jù)。在隨后的每次 REORG 操作中,表字典隨之更新。被壓縮的數(shù)據(jù)同時存放在磁盤上和內(nèi)存中,DB2 還壓縮存儲在日志文件中的用戶數(shù)據(jù),以便減少日志文件大小。 注重,分區(qū)表的每個分區(qū)可以有不同的壓縮字典,在 DPF 中的一個表的每個分區(qū)也可以有不同的壓縮字典。 除了數(shù)據(jù)行壓縮,DB2 9 提供的其他壓縮機(jī)制還包括: 
- NULL 值和缺省值壓縮(V8 GA):對變長列中的零長度空數(shù)據(jù)和系統(tǒng)缺省值進(jìn)行壓縮。 
- 多維集群(V8 GA):使用塊索引,數(shù)千個記錄共用一個索引條目,實現(xiàn)索引壓縮。 
- 數(shù)據(jù)庫備份壓縮(V8 FP4):通過壓縮產(chǎn)生較小的備份鏡像。 
- XML 解析 
自治特性從 Oracle 9i 到 10g,Oracle 在調(diào)優(yōu)方面作了一些改進(jìn)。Oracle 將以下方面的調(diào)優(yōu)進(jìn)行了自動化: 
- Redo Logfile Sizing Advisor —— 該特性就重做日志文件的最佳大小給出建議,以避免因頻繁出現(xiàn)的檢查點而導(dǎo)致過多的磁盤 I/O。 
- Automatic Checkpoint Tuning —— Oracle 數(shù)據(jù)庫現(xiàn)在可以自調(diào)優(yōu)檢查點,以取得良好的恢復(fù)速度,同時減少對正常吞吐率的影響。 這樣便不再需要設(shè)置任何與檢查點相關(guān)的參數(shù)。 
- Automatic Shared Memory Tuning —— Automatic Shared Memory Tuning 通過自調(diào)優(yōu)算法將 System Global Area (SGA) 內(nèi)存相關(guān)參數(shù)(緩沖區(qū)緩存、共享池)的配置自動化。它簡化了數(shù)據(jù)庫的配置,確保可用內(nèi)存得到最有效的利用,并提高了性能。 
- Transaction Rollback and Recovery Monitoring —— 該特性便于估計回滾一個事務(wù)要花多少時間。還可以監(jiān)控被恢復(fù)的事務(wù)的進(jìn)程,并估計事務(wù)恢復(fù)的平均速度。 
 Oracle 還提供了一些 advisor,例如 segment advisor 和 undo advisor。segment advisor 根據(jù)對象內(nèi)的空間拆分程度給出是否可以對一個對象執(zhí)行新的在線壓縮操作的建議。而且,這個 advisor 還給出關(guān)于段的歷史增長趨勢的報告,非凡是能為容量規(guī)劃提供有效的信息。 另一方面,Undo Advisor 則幫助治理員在調(diào)整 Flashback 和非 flashback 中的表空間的大小時作出正確的判定。它為治理員適當(dāng)?shù)卦O(shè)置 UNDO_RETENTION 提供建議,以避免快照過于陳舊的問題。 DB2 9 引入了一些新的自治增強(qiáng)。例如,DB2 9 引入一種新的自調(diào)優(yōu)內(nèi)存特性(使用 self_tuning_mem 數(shù)據(jù)庫配置參數(shù)),該特性自動地設(shè)置一些內(nèi)存配置參數(shù)的值,從而簡化了內(nèi)存配置任務(wù)。自動調(diào)優(yōu)器充當(dāng)調(diào)度器的角色,它算出可用的內(nèi)存資源,動態(tài)地將它們分發(fā)給數(shù)據(jù)庫的一些內(nèi)存消費(fèi)者。 除了自調(diào)優(yōu)內(nèi)存,DB2 9 還引入了下面提到的其他一些增強(qiáng)。這份列表并不完整,但是其中列出的都是重要的增強(qiáng)。 
自動配置DB2 8 引入了 Configuration Advisor,它可以檢測系統(tǒng)和數(shù)據(jù)庫的特征 —— CPU、內(nèi)存、數(shù)據(jù)庫大小、表的數(shù)量等,并為配置參數(shù)給出建議的值。DB2 9 則更進(jìn)一步 —— 它在數(shù)據(jù)庫創(chuàng)建之后自動運(yùn)行 configuration advisor,并缺省地做出一些基本的調(diào)優(yōu)決定。例如,它配置缺省緩沖池的大小、I/O 清理程序和 I/O 服務(wù)器等。 這種初始的自動調(diào)優(yōu)意味著,同使用之前缺省的數(shù)據(jù)庫配置參數(shù)值創(chuàng)建的數(shù)據(jù)庫相比,現(xiàn)在的數(shù)據(jù)庫將擁有更好的性能,并且有更好的即開即用性。 自動數(shù)據(jù)統(tǒng)計信息收集缺省情況下,DB2 9 還答應(yīng)對某些進(jìn)行中的任務(wù)進(jìn)行自動化。通過該特性,DB2 確定需要哪些統(tǒng)計信息,以及哪些統(tǒng)計信息需要更新,然后自動在后臺執(zhí)行 RUNSTATS 實用程序。 
自動存儲治理DB2 9 擴(kuò)展了在 DB2 V8.2.2 中首次引入的自動存儲特性。自動存儲自動增長跨磁盤和文件系統(tǒng)的數(shù)據(jù)庫的大小,由于它是自動增長數(shù)據(jù)庫大小的,因此 DBA 不需要治理存儲容器。當(dāng)在 DB2 9 中創(chuàng)建數(shù)據(jù)庫時,自動存儲治理特性是缺省地啟用的。 自動表和索引重組增強(qiáng)自動重組是從 8.2 版開始引入的。但是,DB9 對其加以增強(qiáng),從而答應(yīng)做以下事情: 
- 指定具有適當(dāng)頁寬的系統(tǒng)臨時表空間,用于離線表重組。 
- 可限制被重組的表的大小。 
- 指定自動索引重組應(yīng)該在線運(yùn)行,并且在在線維護(hù)窗口中運(yùn)行。 
- 指定在重組期間是保留還是重新構(gòu)建壓縮目錄。 
工具我們來看看不同領(lǐng)域的一些工具,例如數(shù)據(jù)庫創(chuàng)建和維護(hù)、網(wǎng)絡(luò)、治理 GUI、性能調(diào)優(yōu)、數(shù)據(jù)移動和備份恢復(fù)工具。圖 15 顯示了這些 DB2 9 GUI 工具。
圖 15. DB2 9 GUI 工具
 
 讓我們看看類似的任務(wù)在 Oracle 和 DB2 9 中分別是怎樣執(zhí)行的。  數(shù)據(jù)庫創(chuàng)建和維護(hù) Oracle 提供了 Database Configuration Assistant(dbca)作為創(chuàng)建數(shù)據(jù)庫的 GUI 工具。對于數(shù)據(jù)庫維護(hù),Oracle 提供了 Oracle Enterprise Manager。DB2 數(shù)據(jù)庫則可以通過 DB2 Control Center 創(chuàng)建和維護(hù)。網(wǎng)絡(luò)                                                                                             Oracle 提供了 Network Configuration Assistant(netca)來進(jìn)行網(wǎng)絡(luò)配置。或者,也可以使用 Oracle Network Manager 來配置服務(wù)名、偵聽器、配置文件和 Oracle 名稱服務(wù)器。DB2 則使用 CATALOG 命令來編目節(jié)點和數(shù)據(jù)庫。此外還可以使用 DB2 命令行或 DB2 Configuration Assistant GUI 進(jìn)行編目。
治理 Oracle Enterprise Manager 提供了針對治理員日常任務(wù)的廣泛治理功能。DB2 Control Center 也提供了和 Oracle Enterprise Manager 類似的功能。除了 DB2 Control Center 外,還可以使用 DB2 命令行處理器來發(fā)出 DDL 和 DML 語句。該實用程序類似于 Oracle 的 SQLPLUS 實用程序。圖 16 顯示了 DB2 命令行處理器。
圖 16. DB2 命令行處理器
 
                          還可以在 Command Center 中發(fā)出命令,如 圖 17 所示。
圖 17. Command Center GUI(DB2 命令行處理器的 GUI 版本)
 
 性能調(diào)優(yōu) Oracle Enterprise Manager 附帶有 Change Management Pack、Tuning Pack 和 Diagnostic Pack。DB2 則提供了 Event Analyzer、Health Center、Indoubt Transaction Manager 和 Memory Visualizer 作為性能調(diào)優(yōu)任務(wù)的 GUI 工具。數(shù)據(jù)移動 Oracle 提供了 SQL Loader(sqlldr)用于以定界文本格式裝載數(shù)據(jù)。Import(imp)和 export(exp)可用于執(zhí)行邏輯導(dǎo)入和導(dǎo)出。DB2 提供了類似的導(dǎo)入、導(dǎo)出和裝載實用程序。對于跨平臺的數(shù)據(jù)移動,DB2 提供了 db2move 實用程序。  備份和恢復(fù) Oracle 提供了 Recovery Manager 作為熱備份的選項。在 DB2 中,可以使用 backup 命令或 DB2 Control Center 備份數(shù)據(jù)庫。                                                                                            Oracle 10g Enteprise Manager 附帶了新的性能概要表。增強(qiáng)的 Oracle Enterprise Manager Html 界面為所有與數(shù)據(jù)庫性能相關(guān)的統(tǒng)計信息提供了一個集中的訪問點,為全面的監(jiān)控和診斷提供了方便。 除了隨 DB2 UDB version 8 發(fā)布的界面外,DB2 9 還引入了一種全新的免費(fèi)應(yīng)用程序開發(fā)工具,這個工具叫做 DB2 Developer Workbench(DWB),它是基于 Eclipse 框架的。這個工具可以單獨下載,也可通過光盤獲得,它替代了 DB2 8 的 Development Center。 DWB 是用于創(chuàng)建、編輯、調(diào)試、部署和測試 DB2 存儲過程和用戶定義函數(shù)的一站式中心。此外,還可以使用 DWB 來開發(fā) SQLJ 應(yīng)用程序,以及創(chuàng)建、編輯和運(yùn)行 SQL 語句和 XML 查詢。 DWB 有一些用于開發(fā) DB2 業(yè)務(wù)對象的視圖,例如: 
- Database Explorer 視圖 —— 顯示數(shù)據(jù)庫中有什么對象(表、存儲過程、用戶定義函數(shù)、依靠關(guān)系、遠(yuǎn)程服務(wù)器等),并答應(yīng)在這些對象上執(zhí)行動作。 
- Data Project Explorer 視圖 —— 在該視圖中,可以通過簡單的操作,例如拖放、復(fù)制粘貼、向?qū)А⑸舷挛拿舾械耐瓿蛇x項等,進(jìn)行過程、用戶定義函數(shù)和 SQL 語句的開發(fā)。 
- Data Output 視圖 —— 在該視圖中可以看到對數(shù)據(jù)庫的數(shù)據(jù)開發(fā)的報告。 
 除了 DB2 8 的 Development Center 的功能外,新的 Developer Workbench 還包括對遷移報告、比較例程、XML 函數(shù)和使用 XQuery Builder 構(gòu)建 XQuery 查詢等等的支持。現(xiàn)在可以從網(wǎng)站下載DB2 Developer Workbench 。 要了解關(guān)于 DB2 Developer Workbench 的更具體的信息,請閱讀 developerWorks 中的這篇 教程。要得到更詳盡的示例和特性,請參考 developerWorks 中的文章 DB2 9 入門: 應(yīng)用程序開發(fā)方面的增強(qiáng)。 圖 18 展示了如何使用 DWB 創(chuàng)建存儲過程:
圖 18. DB2 Developer WorkBench 結(jié)束語
 結(jié)束語在本文中,我們借助您當(dāng)前已有的關(guān)于 Oracle 10g Release 2 的知識,對 DB2 9 for Linux, UNIX and Windows 進(jìn)行了介紹。我們簡要地描述了 DB2 9 架構(gòu)、后臺進(jìn)程、內(nèi)存模型、安全性、工具等方面。Oracle 與 DB2 9 之間有很多類似之處,我們也指出了它們之間的一些不同之處,以便您能借助已有的知識,在 DB2 9 中獲得成功。
表 3 總結(jié)了我們討論過的 Oracle 與 DB2 9 之間的相同點與不同點。
表 3 —— Oracle 與 DB2 9 概念總結(jié) Oracle DB2 9 注解 實例實例一個 DB2 實例可以包含多個數(shù)據(jù)庫數(shù)據(jù)庫數(shù)據(jù)庫initSID.ora 或 SPFILEDBM CFG 和 DB CFGDB2 使用兩個級別的配置:Database Manager Configuration(DBM CFG)(實例級)和 Database Configuration(DB CFG)(數(shù)據(jù)庫級)。與 Oracle 一樣,很多配置參數(shù)可以動態(tài)更改表空間表空間DB2 支持 SMS 和 DMS 這兩類表空間。DMS 表空間與 Oracle 的表空間類似數(shù)據(jù)塊頁DB2 支持以下幾種頁大小:4k、8k、16k 和 32k。一個行必須能夠裝入其中一種數(shù)據(jù)頁內(nèi)。它不能像在 Oracle 中那樣跨多個頁盤區(qū)盤區(qū)數(shù)據(jù)文件DMS 表空間容器用于 DMS 表空間的容器可以是原始設(shè)備,也可以是文件重做日志文件事務(wù)日志文件數(shù)據(jù)緩沖區(qū)緩沖池DB2 沒有一組預(yù)定義的緩沖池,但是可以根據(jù)需要創(chuàng)建足夠多的緩沖池。在創(chuàng)建具有給定頁大小的表空間時,必須預(yù)先存在一個具有給定頁寬的緩沖池SGA數(shù)據(jù)庫治理器共享內(nèi)存和數(shù)據(jù)庫共享內(nèi)存數(shù)據(jù)字典編目庫緩存包緩存大型池實用程序堆數(shù)據(jù)字典緩存編目緩存SYSTEM 表空間SYSCATSPACE 表空間                           
參考資料 學(xué)習(xí)                                                                                            - 您可以參閱本文在 developerWorks 全球站點上的 英文原文 。
 
 
- 文章 “利用您的 Microsoft SQL Server 2000 技能來學(xué)習(xí) DB2 UDB V8”(developerWorks,2003 年 7 月)向 Microsoft SQL Server 2000 治理員展示了如何利用他們的 SQL Server 知識快速把握 DB2 for Linux, UNIX, and Windows 中的技能。
 
 
- 文章 “DB2 通用數(shù)據(jù)庫進(jìn)程全接觸”(developerWorks,2003 年 4 月)描述了 DB2 在 Linux、UNIX 和 Windows 上使用的進(jìn)程,并具體地談到了它們的功能。
 
 
- 文章 “對 DB2 UDB V8 for UNIX、Linux 和 Windows 的生動簡介”(developerWorks,2003 年 1 月)繪聲繪色地描述了DB2 基本概念。
 
 
- 文章 “IBM DB2 Database Universal Porting Guide: Oracle to DB2 version 7.2”(developerWorks,2002 年 5 月)是關(guān)于早期版本的 DB2 與 Oracle 的參考資料。
 
 
- IBM 紅皮書 ? Oracle to DB2 UDB Conversion Guide 是關(guān)于從 Oracle 遷移到 DB2 UDB 的一份循序漸進(jìn)的指南。 
 
 
- IBM Migration Toolkit 是用于從 Oracle、Sybase ASE、Sybase SQL Anywhere、Microsoft SQL Server、Informix IDS 和 MySQL 遷移到 DB2 on Linux, UNIX, and Windows、DB2 for i5/OS、DB2 for z/OS 以及 Informix Dynamic Server 的一個免費(fèi)資源。
 
 
- developerWorks 的 DB2 Porting 專區(qū) 包含了關(guān)于將數(shù)據(jù)庫從其他數(shù)據(jù)庫服務(wù)器遷移到 DB2 的參考資料。
 
 
- 訪問 developerWorks 中的 DB2 for Linux, UNIX, and Windows 資源頁面,閱讀文章和教程,并參閱其他參考資料,進(jìn)一步拓展您在 DB2 方面的技能。 
 
 
- 了解 DB2 Express-C,這是為社區(qū)提供的免費(fèi)版的 DB2 Express Edition。