首先,咱們須要理解 Oracle 使用的架構,並理解它與 DB2 的不一樣之處。圖 1 展現了 Oracle 的系統結構。將該圖與 圖 2 進行比較,後者顯示了 DB2 的系統結構。在閱讀本文的時候,爲便於理解,能夠參照這兩個圖。
圖 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系統結構
html
圖 2. DB2 on Linux, UNIX, and Windows 系統結構
node
實例linux
在 Oracle 和 DB2 中,實例 的概念是相似的。在這二者之中,實例都是指後臺進程與共享內存的組合。二者之間的主要差異在於,在 Oracle 中每一個實例只能有一個數據庫,而在 DB2 中多個數據庫能夠共享一個實例。redis
在 Oracle 中,因爲數據庫與實例是一對一的關係,所以用 CREATE DATABASE 命令建立一個數據庫的同時便隱式地建立了一個實例。或者,爲了在計算機上建立一個 Oracle 實例,也可使用 Database Configuration Assistant,或者使用 ORADIM 實用程序,後者是 Oracle 9i 經過 NEW 選項提供的。另外還必須提供某些信息,包括系統標識符(System Identifier,SID)或一個服務名稱、實例密碼、最大用戶數、啓動模式等等。相似地,爲了刪除實例,可使用 ORADIM 實用程序加 DELETE 選項。這裏須要提供 SID 或服務名稱。除非在安裝過程當中建立一個新的數據庫,不然在以 fresh 方式安裝 Oracle 的時候,不會建立缺省的實例。算法
在 DB2 中,當在 Windows 平臺上安裝了該產品以後,便缺省地建立了一個實例 「DB2″。在 Linux 和 UNIX 中,缺省的實例名稱爲 「db2inst1″。若要在同一臺計算機上建立另外一個實例,只需執行命令 de>db2icrt <instance name>de>。sql
圖 3 展現了缺省的 DB2 實例 「DB2」(在 Windows 中)和從 DB2 Control Center GUI 中用 db2icrt 命令建立的另外兩個實例。數據庫
圖 3. 顯示 DB2 實例的 DB2 Control Center GUI
windows
若要在命令行接口中引用給定的 DB2 實例,可使用環境變量 DB2INSTANCE。經過這個變量,能夠指定當前活動實例,全部命令將應用到此實例。例如,若是 DB2INSTANCE 被設置爲 PROD,而後您執行了命令 de>create database MYDB1de>,將建立一個與實例 PROD 關聯的數據庫。若是要在實例 DB2 上建立該數據庫,那麼必須首先將 DB2INSTANCE 變量的值改成 DB2。這相似於 ORACLE_SID (System Identifier),當用戶想要在不一樣實例之間進行切換時,也是使用 ORACLE_SID。數組
還有一種標識要使用的實例的簡單方法,那就是使用 DB2 Control Center GUI,如 圖 3 所示。要在該工具中看到對應於新實例的條目,須要經過右擊 Instances 並選擇 Add 來將該實例添加到此工具中。要刪除 DB2 中的一個實例,能夠執行命令 de>db2idrop <instance name>de>。緩存
總之,在 Oracle 中,可使用 Database Configuration Assistant 來建立、修改、啓動、中止和刪除實例,而在 DB2 中則可使用 Control Center GUI 作一樣的事情。並且,Oracle 實例與數據庫只能是一對一的關係,而在 DB2 中卻不是這樣。一個 DB2 實例中能夠同時存在多個數據庫,而且能夠併發地使用這些數據庫。
數據庫
在 Oracle 中,能夠用 CREATE DATABASE 命令手動建立數據庫,也能夠用 Database Configuration Assistant 建立數據庫。手動建立數據庫時,在執行 CREATE DATABASE 命令以前,須要執行一系列的步驟,包括設置 OS 變量,準備參數文件,以及建立密碼文件。
元數據信息在 Data Dictionary 中存儲和管理,由基本表和相應的視圖組成。基本表是在數據庫建立過程當中自動建立的,而視圖則是經過運行 catalog.sql 和 catproc.sql 腳本構造的。
所以,Oracle 數據庫可看做包含 3 種類型的文件的一個集合:
- 數據文件(Data File):包含實際的數據,數據庫的物理實現。(相似於 DB2 中的容器。)
- 重作文件(Redo File):至關於 DB2 中的事務日誌(Transaction Log)。
- 控制文件(Control File):包含用於維護和驗證數據庫完整性的信息。
在 DB2 中,一個實例能夠包含多個數據庫,如 圖 2 所示。每一個數據庫都是一個封閉的、真正獨立的單元。每一個數據庫有其本身的編目表空間、臨時表空間和用戶表空間,這些表空間是在建立數據庫時缺省建立的。DB2 包含一個稱爲系統數據庫目錄(system database directory) 的二進制文件,其中包含可從 DB2 機器上鍊接的全部數據庫的條目。這個目錄保存在實例級。
當建立一個實例時,缺省狀況下不會建立數據庫,您須要使用 create database 命令顯式地建立一個數據庫。此外還能夠用 Control Center 建立數據庫,如 圖 4 和 圖 5 所示。
圖 4. 使用 Control Center GUI 建立 DB2 數據庫
圖 5. 使用 Control Center GUI 建立 DB2 數據庫(續)
在 圖 5 中,您也能夠看看單擊 Show Command 時會出現什麼狀況。全部的 DB2 Control Center GUI 屏幕都會顯示實際上在後臺執行的 SQL 語句或命令。這些命令能夠保存在一個腳本中,以便在之後執行,或者也能夠將它們複製到 Command Line Processor(CLP)或 Command Center GUI 工具中,在這些工具中執行。這些工具分別至關於 Oracle 的 SQL*Plus 和 iSQL *Plus。
可使用 ‘DROP DATABASE’ 命令或者在 DB2 Control Center GUI 中刪除一個 DB2 數據庫。而在 Oracle 中卻不是使用這樣的命令。數據庫的刪除是經過刪除全部相關數據文件來完成的。
同一個實例中的數據庫一般不會相互進行交互。然而,若是應用程序須要與多個數據庫交互,那麼經過啓用聯邦(federation) 支持能夠知足這一需求。在 參考資料 小節中有一篇關於聯邦的文章。
容器、表空間、緩衝池和頁
在 Oracle 中,在物理上數據是存儲在被稱做數據文件(Data File)的文件中的。這相似於 DB2 的容器(container),DB2 的容器也是數據實際存儲的地方。每一個 Oracle 數據庫包含一個名爲 SYSTEM 的表空間,這是在建立數據庫時由 Oracle 自動建立的。其餘用於用戶數據、臨時數據和索引數據的表空間則須要在建立數據庫以後另行建立,而且在使用這些表空間以前,還須要爲之指定一個用戶。
在 DB2 中,表空間 是邏輯對象,做爲邏輯表和物理容器之間的一層。當建立一個表空間時,能夠將它與一個特定的緩衝池(數據庫緩存)關聯起來,並關聯到特定的容器。這爲性能管理帶來了靈活性。例如,若是有一個 「hot」 表,那麼能夠在一個單獨的表空間中定義它,而這個表空間又與一個獨立的緩衝池相關聯。這有助於確保此表中的數據連續地緩存在內存中。
在 DB2 中,使用 CREATE DATABASE 命令及其缺省值建立數據庫時,同時也會自動建立三個缺省的表空間。表 1 描述了缺省的 DB2 表空間:
表 1. 用缺省值建立數據庫時,缺省建立的 DB2 表空間
表空間名稱 |
描述 |
SYSCATSPACE |
包含元數據的編目表空間 |
TEMPSPACE1 |
用於執行鏈接和排序等操做的系統臨時表空間。這個表空間的名稱能夠更改 |
USERSPACE1 |
這個表空間是可選的,若是在建立表的時候沒有顯式地指定表空間,那麼能夠用這個表空間來存儲用戶表 |
在 DB2 中,因爲數據庫是獨立的單元,所以表空間不能跨數據庫共享。因爲表空間只在一個數據庫中是可知的,所以兩個不一樣的數據庫能夠有具備相同名稱的表空間。在 圖 2 中能夠看到這一點,其中數據庫 MYDB1 有一個名爲 MYTBLS 的表空間,而數據庫 MYDB2 也有一個同名的表空間。
DB2 表空間能夠分爲 SMS(系統管理的表空間)與 DMS(數據庫管理的表空間)兩類。SMS 表空間由操做系統管理,它們只能是目錄。SMS 表空間可根據須要自動增加,所以 SMS 能夠提供很好的性能,而且須要的管理也不多。DMS 表空間由 DB2 管理,既能夠是文件,也能夠是原始設備。這種類型的表空間能夠提供最佳性能,可是須要進行一些管理。例如,須要預先指定想要爲這個表空間分配多大的空間,由於這種表空間不能自動增加。
Oracle 的存儲模型中沒有 SMS 的概念,可是它的數據文件相似於 DB2 DMS 表空間。也就是說,能夠經過增長數據文件的大小,或爲表空間添加數據文件,或者經過添加一個新的表空間,來增長數據庫的大小。
表 2 顯示了 Oracle 數據庫或表空間與 DB2 數據庫或表空間的對應關係。
表 2. Oracle 數據庫與 DB2 數據庫和表空間的對應關係
Oracle 數據庫或表空間 |
DB2 數據庫或表空間 |
SYSTEM 是存放編目(數據字典)信息的表空間 |
SYSCATSPACE(編目表空間);和在 Oracle 中同樣,僅在數據庫級保存該信息 |
Data Dictionary(包含表和視圖形式的元數據),駐留在 SYSTEM 表空間中 |
系統編目表(由 SYSIBM 模式標識),系統視圖(由 SYSCAT 或 SYSSTAT 模式標識),駐留在 SYSCATSPACE 表空間中 |
SCOTT 數據庫 |
SAMPLE 數據庫 |
TEMP 表空間 |
System Temporary 表空間(缺省狀況下名爲 tempspace1) |
UNDO 表空間 |
N/A |
USER 表空間 |
用戶表空間。缺省狀況下,USERSPACE1 通常是在數據庫建立以後才建立的 |
前面已指出,Oracle 的數據緩衝區概念至關於 DB2 的緩衝池。可是,DB2 容許多個緩衝池存在。在 DB2 中不須要預先定義可建立的緩衝池的數量,緩衝池的名稱能夠是任意的。
Oracle 中塊(block) 的概念與 DB2 中的頁最爲類似。一個 DB2 頁的大小能夠爲 4k、8k、16k 或 32k。表中的一個行只能放在一個頁中,而不能像 Oracle 中那樣跨多個頁。
對象名稱
Oracle 中的對象名稱形式以下:
de>[Schema_name.]object_name[@database]de>
在 DB2 中,對象名稱也是由兩部分組成的結構:
de>Schema_name.object_namede>
和在 Oracle 中同樣,DB2 模式名稱用於在邏輯上組織對象。可是二者之間一個重要差別是,在 DB2 中,模式名稱不必定與一個用戶 id 相匹配。任何擁有 IMPLICIT_SCHEMA 權限的用戶均可以用一個不存在的模式建立對象。例如,假設 「Peter」 具備 IMPLICIT_SCHEMA 權限,他執行如下命令:
de>CREATE TABLE WORLD.TABLEA (lastname char(10))de>
該命令建立表 WORLD.TABLEA,其中 WORLD 是新建立的模式。若是 Peter 沒有顯式地指定模式,那麼該命令就會建立表 PETER.TABLEA,由於缺省狀況下是使用鏈接 ID。
在 DB2 中,在發出與數據庫相關的命令以前,老是要鏈接到數據庫。所以,在這種架構下,對象名稱不須要包括數據庫名稱。
表、視圖和索引
在 Oracle 和 DB2 中,表、視圖和索引基本上是同樣的。
DB2 提供了一個名爲 Design Advisor 的實用程序,能夠用它來爲特定的查詢或工做負載推薦索引。Design Advisor 能夠從 DB2 Control Center 中調用,也能夠從 DB2 CLP 中使用 db2advis 命令來調用。在 DB2 中,索引是直接與表定義綁定的。例如,當使用 DMS 表空間時,能夠用下面的語句指定索引存放在哪一個表空間:
de>CREATE TABLE mytable (col1 integer, col2 char(10)) in tbls1 index in tbls2de>
上面的例子代表,表中的數據將存儲在表空間 ‘tbls1′ 中,而索引頁將存儲在表空間 ‘tbls2′ 中。但在 Oracle 語法中,CREATE INDEX 語句有一個選項來指定索引存放在哪一個表空間。
此外,在 DB2 中,索引一旦建立好,便不能修改索引定義中的任何子句。爲了進行更改,須要刪除索引,而後從新建立索引。
和在 Oracle 中同樣,不一樣數據庫中的 DB2 表、視圖和索引能夠有相同的名稱。相同數據庫中的表和視圖則必須使用不一樣的名稱,可是容許使用與已有的表或視圖相同的名稱建立索引。
存儲過程、觸發器和用戶定義函數(UDF)
在 Oracle 環境中,有不少方法來建立和訪問存儲過程、觸發器和函數。PL/SQL 是 SQL 的面向對象(OO)過程擴展,支持數據操縱(DML)、流控制、變量和常量的聲明、過程和函數定義以及 OO 數據類型,例如嵌套表和變長數組(varray)。Oracle 還將 JVM 併入到它的引擎中。在 Oracle 數據庫中,可使用 SQLJ 將存儲過程、函數和觸發器,做爲類來建立、存儲和執行。Oracle 還支持 Type 1 至 4 的 JDBC 驅動程序。
DB2 存儲過程能夠用 DB2 預編譯器支持的任何語言編寫,包括 Java、C、C++、REXX、Fortran 和 COBOL。可是,咱們推薦您使用 SQL Procedural Language(SQL PL),這種語言很是相似於 Oracle 的 PL/SQL。在開發 SQL PL 存儲過程時,須要一個 C 編譯器,由於這種存儲過程首先要轉換成 C。存儲過程的 C 實現能夠提供性能優點,由於代碼只需編譯一次(在 unfenced 模式下性能優勢尤爲明顯)。可是,在開發這種存儲過程時,開發系統上須要一個額外的 C 編譯器。在 DB2 未來的版本中,有望出現不需 C 編譯器支持的 SQL PL 存儲過程。DB2 存儲過程開發還利用 Type 1 至 4 的 JDBC 驅動程序來支持 SQLJ 和 Java。
觸發器和函數的開發可使用內聯 SQL/PL,這種方法不須要 C 編譯器。這種方法支持 SQL PL 語句的一個子集。另外還可使用 DB2 Development Center Tool 來簡化 DB2 存儲過程和用戶定義函數的建立、構建、調試和部署。
配置文件
傳統上,Oracle 將全部與會話和系統相關的參數存儲在一個文本文件中,這種文件一般被稱作 initSID.ora。可是,因爲這種文本文件不具備持久性,從 Oracle 9i 開始,Oracle 引入了 Server Parameter File(SPFILE),這是一種存儲在服務器上的二進制參數文件。它在實例中止以後到啓動以前這個過程當中是持久存在的。不過,當 SPFILE 不可用的時候,仍然使用 initSID.ora 文件。引入 SPFILE 以前,任何對參數有影響的 ALTER SYSTEM 和 ALTER SESSION 命令都只能在實例或會話活動期間持久。每當數據庫實例須要回彈(rebound)時,DBA 都必須手動修改 initSID.ora 文本文件。對於偵聽器,網絡訪問配置一般存儲在 listener.ora 中;對於客戶機訪問,網絡訪問配置一般存儲在 tnsnames.ora 中。
在 DB2 中,配置參數也是存儲在實例級和數據庫級,在實例級是數據庫管理器(database manager) 配置文件,在數據庫級是數據庫配置文件。這些參數大多數均可以動態地更改,也就是說,不須要爲了使對參數值的更改生效而中止並重啓實例或者重連全部鏈接。
若是想在 CLP 中手動更改特定的數據庫管理器配置參數,可使用命令 de>UPDATE DBM CFG USING <parameter name> <new value>de>。
若是想在 CLP 中手動更改特定的數據庫參數,可使用命令 de>UPDATE DB CFG FOR <database name> USING <parameter name> <new value>de>。
這兩個命令分別至關於 Oracle 的 ALTER SYSTEM 和 ALTER SESSION。或者,也可使用 Control Center 查看和修改這些參數的值。若是右鍵單擊一個給定的實例,並選擇 Configure Parameters,那麼能夠看到 圖 6 中顯示的窗口。
圖 6. DB2 Database Manager 配置參數(實例級)
在數據庫級,右擊一個給定的數據庫,並選擇 Configure Parameters,則能夠看到 圖 7 中顯示的窗口。
圖 7. 數據庫配置參數(數據庫級)
DB2 提供了不少用於配置系統的參數。可是,若是想經過一種容易的方法自動配置系統,那麼可使用 de>autoconfigurede> 命令(或者 Configuration Advisor GUI),它會根據您提供的一些信息將數據庫管理器配置參數和數據庫配置參數設置成最佳值。圖 8 顯示了 Configuration Advisor。
圖 8. DB2 Configuration Advisor
除了配置文件外,DB2 一般還爲與平臺相關的配置使用 DB2 註冊表變量。注意,DB2 註冊表變量與 Windows 註冊表沒有任何關係。可使用命令 db2set 查看和更改這些變量。
鏈接(網絡訪問)信息存儲在 System 數據庫目錄、本地數據庫目錄和節點目錄中。這些都是二進制文件,只能用 CATALOG 和 UNCATALOG 命令修改。
內存架構和後臺進程
接下來,咱們來看看內存架構和後臺進程,而且比較一下 Oracle 和 DB2 中內存架構和後臺進程的不一樣之處。
圖 9. Oracle 內存架構和後臺進程
Oracle 中的 System Global Area(SGA)是一組共享內存塊,用於存儲與實例有關的信息。其中包括語句緩存、重作日誌緩衝區和數據緩衝區緩存。Program Global Area(PGA)和 User Global Area(UGA)共享內存塊,包含用於服務器進程和用戶會話的數據和控制信息。
Oracle 支持在同一臺計算機上存在多個實例,但不容許共享後臺進程。例如,同一臺計算機上的三個實例就須要三組後臺進程。所以建議在一臺計算機上包含一個數據庫、一個實例和多個模式。
圖 10. DB2 內存架構和後臺進程
DB2 和 Oracle 都使用共享內存塊,可是 DB2 與 Oracle 內存架構的實現方式略有不一樣。因爲 DB2 實例能夠包含多個數據庫,所以存在兩個級別的配置。在前一節已經提到,實例級的配置能夠在 DBM CFG 文件中完成,而數據庫級的配置則能夠在 DB CFG 文件中完成。這兩個級別上的配置參數均可以進行調整,以調優內存使用狀況。後文將更詳細地闡述 DB2 的內存結構和不一樣的後臺進程。
Oracle 是在實例和數據庫啓動時將內存分配給它們的,而 DB2 則是在不一樣級別上分配內存。這主要是由於 DB2 實例能夠包含多個數據庫。DB2 中主要有三種內存結構:
- 實例共享內存:這是數據庫管理器全局共享內存,是在使用 de>db2startde> 命令啓動實例時分配給實例的,而且在發出 de>db2stopde> 命令中止實例以前,一直處於已分配狀態。
- 數據庫共享內存:這是數據庫全局內存,是在激活數據庫或者第一次鏈接到數據庫時分配的。分配的內存包括緩衝池、鎖列表、數據庫堆、實用程序堆、包緩存和編目緩存。
- 應用程序共享內存:這是在應用程序鏈接到一個數據庫時分配的內存,由處理鏈接到數據庫的客戶機所請求的工做的代理使用。每一個鏈接到數據庫的應用程序都會被分配內存;所以,對會影響應用程序共享內存的參數的正確配置就很是重要。
在 DB2 for Windows 中,服務器活動是以線程的形式進行的,而在 Linux 和 UNIX 環境中,這些活動是之後臺進程的形式來實現的。DB2 有如下幾種級別的進程:
- 實例級:這些進程是在實例啓動時初始化的:
- DB2 Daemon Spawner(db2gds):全局守護處理程序,每一個實例都對應一個這樣的進程(僅在 UNIX 中)
- DB2 System Controller(db2sysc):DB2 主進程。
- DB2 Watchdog(db2wdog):全部其餘進程的父進程。
- DB2 Format Log(db2fmtlg):相似於 Oracle 中的 ARCn 進程,爲日誌路徑中的日誌文件預先分配空間。
- 數據庫級:這些進程是在創建到數據庫的鏈接時初始化的:
- DB2 Log Reader(db2loggr):相似於 Oracle 的 PMON 進程的一個子集。該進程在回滾、重啓恢復和前滾期間讀取日誌文件。
- DB2 Log Writer(db2logw):將日誌從日誌緩衝區刷新到磁盤上的事務日誌文件中。至關於 Oracle 中的 LGWR 進程。
- DB2 Page Cleaner(db2pclnr):至關於 Oracle 中的 DBWR 進程,該進程在將頁從磁盤上轉移到 BP 中以前,清理緩衝池。
- DB2 Prefetcher(db2pfchr):將須要用到的頁預先從磁盤取出到緩衝池中。
- DB2 Deadlock Detector(db2dlock):死鎖檢測器進程。
- 應用程序級:每一個鏈接到數據庫的應用程序,都具備屬於它本身的應用程序級後臺進程與之相關聯。這些進程有:
- DB2 Communication Manager(db2ipccm):進程間通訊進程,用於每一個本地鏈接的客戶機。
- DB2 TCP Manager(db2tcpcm):TCP 通訊管理器進程,用於使用 TCP/IP 鏈接數據庫的遠程客戶機。
- DB2 Coordinating Agent(db2agent):表明應用程序處理全部請求的進程。
- DB2 Subagent(db2agnta):空閒子代理。
- Active Subagent(db2agntp):在啓用了 SMP 並行的狀況下使用的活動子代理,它使一個任務可使用多個進程。
要得到對 DB2 進程的完整解釋,請參考文章 「DB2 通用數據庫進程全接觸」。
鎖機制
Oracle 中的鎖能夠是手動的,也能夠是自動的。Oracle Lock Manager 能夠在行級隱式地鎖定表數據,此外也可使用如下 SQL 語句在事務或會話級覆蓋缺省的鎖:
de>1. SET TRANSACTION ISOLATION LEVELde>
de>2. LOCK TABLEde>
de>3. SELECT FOR UPDATEde>
Oracle 支持一種稱爲 Multi-Version Read Consistency 的機制,這是用 undo 段中的 undo 數據實現的。
DB2 實現 ANSI 標準隔離(Isolation)級別,例如未提交讀(Uncommitted Read)、遊標穩定性(Cursor stability)、讀穩定性(Read stability)和可重複讀(Repeatable Read)。除非使用未提交讀隔離級別,不然用戶只能看到已提交的數據。行鎖是根據隔離級別隱式地得到的。可鎖定的數據庫對象有表空間、表和行,可是,只有表和表空間能夠顯式鎖定。可以使用 de>LOCK TABLEde> 命令來鎖定一個表,而不是使用缺省的行鎖定。
與 Oracle 不一樣,在 DB2 中,鎖是存儲在內存中的,而不是存儲在數據頁中。可使用 LOCKLIST 數據庫配置參數來配置鎖可用的內存,而 MAXLOCKS 配置參數則定義用於一個特定應用程序的鎖的最大內存。
安全性
Oracle 和 DB2 都是具備基本的和高級的安全特性的安全數據庫。Oracle 中有 4 種不一樣的用戶身份驗證方法:
- 數據庫:數據庫執行對用戶的識別和身份驗證。
- 外部:操做系統或網絡服務執行身份驗證。
- 全局身份驗證和受權:由 SSL 對用戶進行全局身份驗證。
- 代理身份驗證和受權:中間層服務器執行身份驗證。
身份驗證方法是在使用 de>CREATE USERde> 命令建立用戶時指定的。Oracle 中有一些 Data Dictionary 視圖,其中包含了關於這些用戶的信息。
在 DB2 中,用戶不是存在於數據庫中,而是由操做系統來管理。沒有數據庫登陸信息存放在數據庫表中。任何操做系統用戶都有可能訪問 DB2;可是,除非他們被授予了給定的 DB2 權限或特權,不然他們能作的事情很少。經過 Control Center GUI 很容易授予和撤銷權限和特權。不過首先須要將可用操做系統用戶或組中的一個用戶或組添加到 Control Center。
在 DB2 中沒有 「角色(role)」 這個術語。相反,DB2 使用術語 「權限(authority)」,它相似於 Oracle 的數據庫角色,DB2 經過權限將特權授予某些組或用戶。DB2 支持的權限有:SYSADM、SYSCTRL、SYSMAINT、DBADM 和 LOAD。
不能使用 GRANT SQL 語句授予 SYSADM、SYSCTRL 和 SYSMAINT 權限。這些特殊的權限只能在數據庫管理器配置文件中設置。
DB2 還使用術語 「特權(privilege)」,它相似於 Oracle 的系統和模式對象特權。DB2 中有數據庫特權(鏈接、建立表等)和數據庫對象特權(模式、表、視圖等)。圖 11 顯示了從 Control Center GUI 得到的 DB2 安全性信息。Change User 窗口中顯示的大部分選項卡對應了 DB2 所支持的特權。
圖 11. DB2 安全性
Oracle 10g 的安全性大致上沒有變化,只有部分加強。下面是 Oracle 10g 中的加強的列表:
- FGA 的 DML 支持 —— 細粒度審計(fine-grained auditing,FGA)的 SQL 支持獲得了加強,如今支持查詢和 UPDATE、INSERT 和 DELETE 操做這些粒度上的審計。
- SASL 上的通訊 —— 該特性爲 Oracle Internet Directory(OID)與數據庫之間或者兩個數據庫之間的通訊提供了一種安全通道。若是您的企業部署經過密碼進行身份驗證的用戶,那麼也就再也不須要在公共密鑰基礎設施(PKI)方面投入資金和管理工做。SASL(Simple Authentication and Security Layer)通訊提供了等價的安全通道。
- 統一用戶模型 —— 目錄中定義的單點登陸(single sign)用戶如今可使用 Enterprise User Security 提供的特性。不須要爲供應和憑證管理而執行附加的任務。此外,Enterprise User Security 的管理組如今能夠指派一個全部者,這促進了總體上更有力的安全性。
- 輕鬆的數據庫註冊 —— 該特性消除了對 RDBMS_SERVER_DN 參數的須要,使得企業用戶的配置更爲輕鬆。
- 擴展的、統一的審計跟蹤 —— 該特性以標準的、細粒度的審計表的形式,爲 RDBMS 審計提供了一致的審計跟蹤,改進了安全性管理。事務和 SQL 信息也被添加到審計表中,以便進一步提升全部用戶的可問責性(accountability)。
- Oracle 標籤安全性目錄集成 —— 如今能夠在一箇中央 OID/LDAP 儲存庫中管理 Oracle Label Security 策略和用戶標籤受權。這節約了管理成本,同時也消除了多個管理點,從而增長了安全性。
DB2 中的身份驗證不只涉及對用戶名和密碼進行加密,還容許對客戶機與服務器之間傳輸的數據進行加密。身份驗證的位置由數據庫管理器配置參數 AUTHENTICATION 的值決定。
下面是用於啓用 DB2 的身份驗證的有效選項:
- SERVER_ENCRYPT —— 這個值規定身份驗證發生在服務器上。首先加密鏈接期間指定的用戶 id 和密碼,而後將它們發送到服務器,在服務器上將它們與服務器端的用戶和密碼進行比較。若是匹配成功,那麼用戶就被容許訪問數據庫。
- KRB_SERVER_ENCRYPT —— 規定服務器接受 KERBEROS 身份驗證或加密的 SERVER 身份驗證模式。
- DATA_ENCRYPT —— 規定服務器容許 SERVER 身份驗證,而且對客戶機與服務器之間經過網絡傳輸的數據進行加密。
- DATA_ENCRYPT_CMP —— 規定服務器接受加密的 SERVER 身份驗證模式和用戶數據的加密。 這種身份驗證類型能與不支持 DATA_ENCRYPT 身份驗證類型的下級產品兼容。
- GSS_SERVER_ENCRYPT —— 規定服務器接受基於 GSS API 的插件身份驗證或加密的服務器身份驗證模式。
若要更新 AUTHENTICATION 實例參數,例如將它的值設置爲 DATA_ENCRYPT,可使用如下命令:
清單 1. 更新 AUTHENTICATION 實例參數
UPDATE DBM CFG USING AUTHENTICATION DATA_ENCRYPT
db2stop
db2start
|
DB2 提供了基於標籤的訪問控制(Label Based Access Control,LBAC)機制,從而進一步擴展了安全性。 LBAC 特性爲控制對各行和各列的讀寫訪問提供了更大的粒度。 DB2 中提供了一種新的安全管理員角色(SECADM),用於操縱 LBAC 對象。
試圖訪問一個對象的用戶必須被授予該對象的安全標籤。若是安全標籤匹配,則容許訪問;若是不匹配,則拒絕訪問。實現 DB2 中的 LBAC 安全性基本上有三個步驟:
除了特權和權限外,數據庫安全性還包含其餘方面。簡單地說,Oracle 與 DB2 之間既有不一樣點,也有相同點:
用戶身份驗證和受權
Oracle 在建立用戶以後,使用存儲在目錄中的加密密碼。DB2 支持用於用戶身份驗證的密碼,並使用底層的操做用戶進行身份驗證。Oracle 和 DB2 都支持 LDAP (Oracle Internet Directory 與 IBM Directory Server)。Oracle 和 DB2 都支持單點登陸(SSO)。
數據加密
Oracle 支持數據加密,它能夠對敏感數據,例如信用卡號和一些高度敏感的商業數據進行加密。DB2 容許列級的數據加密。
網絡加密
Oracle 經過它的 Oracle Advanced Security 提供網絡加密。Oracle 使用 DES、3DES 和 RC4 業界標準加密。DB2 自己不進行網絡加密。但可使用附帶的 Tivoli SecureWay 實現網絡加密。
審計跟蹤
Oracle 容許審計跟蹤用戶和對象。還可使用日誌挖掘程序調查和分析有疑問的查詢。DB2 也提供了相似的審計設施。在 DB2 中,可使用 db2audit 實用程序進行審計跟蹤。
DB2 9 pureXML 特性
在本節中,咱們將 Oracle 對 XML 的支持與 DB2 對 XML 的支持進行比較。 Oracle XML DB 特性隨 Oracle 9i Release 2 一塊兒發佈,藉助該特性,經過定義 XMLTYPE 表和列,將它們存儲爲 CLOB 或拆分(分解)到關係表中,能夠實現對 XML 存儲、檢索和模式的管理。 Oracle 10g 爲管理 XML 文檔提供了一些加強。例如,經過映射已有的數據,能夠動態地反映模式的更改,而沒必要從新導入。Oracle 10g 包括一些工具包,例如:
- XML-SQL Util(XSU) —— 爲 PL/SQL 和 Java 提供的接口。
- XML Developer’s kits(XDK) —— 用於受支持的語言,例如 PL/SQL、C++ 和 Java。
Oracle 10g 仍然是一種 支持 XML 的 數據庫。它提供的全部接口、API 和包,都是爲了減輕 XML 與關係表之間的相互轉換和映射所帶來的負擔、複雜性和維護。支持 XML 的數據庫,無論是使用 CLOB 仍是分解方法,都不能提供良好的性能。例如,在使用 CLOB 的狀況下,XML 文檔做爲鏡像文件存儲在數據庫中。您可能已經知道,鏡像文件的管理是很麻煩的。分解方法在性能方面也不如人意。將一個 XML 文檔分解成小塊並存儲在多個表中以後,當須要將 XML 文檔組合成原樣時,就不得不使用一個 SQL JOIN 操做。SQL 中的 JOIN 是開銷很大的,特別是表的數量較多時這一點尤爲明顯。保持數字簽名的保真度一樣也是一個挑戰。
另外一方面,DB2 9 pureXML 技術則是原生存儲 XML 文檔,也就是說,在內部以樹型格式存儲 XML 文檔。它還容許同時使用 SQL 和 XML 擴展,即 Xquery 和 Xpath 來訪問關係數據和 XML 數據。原生存儲 XML 文檔是一種更好的方法,IBM 的研究代表,使用該方法在 XML 文檔的搜索和檢索方面能夠取得更好的性能,而且能減小某些程序中代碼的行數。
要在數據庫中使用 pureXML 特性,在建立數據庫時要使用 UNICODE(例如使用編碼集 UTF-8)。在建立一個表以前,若是沒能建立一個 UNICODE 數據庫,則會產生以下所示的錯誤:
SQL1239N XML features can only be used in a Unicode database with a single database partition. SQLSTATE=42997 |
DB2 與以前版本同樣存儲關係數據。可是,XML 數據是以分層格式存儲的(做爲使用 Xquery 數據模型的一棵樹)。XML 與關係服務之間是緊密集成的。爲了存儲 XML 文檔,用戶須要建立一個表,並指定一個列使用一種新的數據類型,即 XML,以下面的例子所示。
清單 2. 用 XML 數據類型建立表
create table T (i int, doc xml)
|
下圖展現了這兩列的顯示效果:
圖 12. DB2 存儲模型
因爲 XML 文檔是以解析的分層格式存儲在 XQuery Data Model (XDM) 中的,所以不須要進行轉換或映射。用於存儲 XML 文檔的格式就是用於處理 XML 文檔的格式。這樣能夠提供更好的性能。
備份、恢復、導入等實用程序對含 XML 列的表的做用與其餘表是同樣的。可使用 INSERT 語句或 IMPORT 實用程序(注意:DB2 LOAD 實用程序還不支持 XML)將 XML 數據插入 XML 列。在導入來自第三方的 XML 文檔以前,最好根據一個預約義的 XML 模式驗證這些文檔。爲了註冊一個 XML 模式,DBA 須要執行 REGISTER XML SCHEMA 命令,並以 COMPLETE XML SCHEMA 結束,以完成註冊過程。 DB2 9 還支持在一個 XML 文檔的子集或整個文檔上建立索引。在建立索引時,須要指定 XPATH,它將指向被建索引的特定元素/屬性。
在 DB2 9 中,有四種方法來訪問關係數據和 XML 數據,如 圖 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 原生存儲 |
× |
√ |
大環境的易維護性 |
× |
√ |
高度可伸縮性 |
× |
√ |
將 XML 文檔存儲爲 CLOB |
√ |
√。可是從長遠看,鼓勵使用 XML 原生存儲 |
分解 |
√ |
√。可是從長遠看,鼓勵使用 XML 原生存儲 |
要看到更深刻的討論,能夠在 developerWorks 上找到更多關於 IBM pureXML 功能的文章,例如 使用 XQuery 查詢 DB2 XML 數據 和 使用 SQL 查詢 DB2 XML 數據。
表分區
DB2 的表分區(即區域分區)相似於 Oracle 的分區。它基本上容許將一個邏輯表拆分紅跨一個或多個表空間的多個物理存儲對象。每一個對象對應於一個 「分區」,容許每一個表空間包含必定範圍的、很容易訪問的數據。
在 DB2 中,有多種方法對數據進行分區,您能夠同時將這些方法應用於相同的數據。爲了不讀者感到困惑,下面簡單地解釋一下提供這種分區的各類不一樣方法:
- DATABASE PARTITIONING —— 按照鍵散列將數據分佈在數據庫的多個邏輯節點上(DPF)。
- RANGE/TABLE PARTITIONING(DB2 9 提供) —— 根據鍵區域將數據劃分到一個邏輯數據庫分區中的多個物理對象上。
- MULTI DIMENSIONAL CLUSTERING(MDC) —— 根據多個鍵值組織表(或一個表中的區域)中的數據。
利用 DB2 9 中新引入的表分區特性,能夠根據一個或多個表列中的特定值將表數據劃分到不一樣的表空間。這些分區能夠獨立地進行備份和恢復,能夠提升某些查詢的性能,由於 DB2 優化器知道這些分區的存在,而且能夠避免對查詢中不須要的分區進行掃描。例如,若是按一年的四個季度對錶進行分區,而且查詢只須要第 4 季度的數據,那麼 DB2 將不解析前三個季度,而是直接找到第 4 個季度並解析之。這被稱做分區排除(partition elimination)。
如前所述,在 DB2 9 中,數據組織的三種方法,即數據庫分區(Database Partitioning)、表分區(Table Partitioning)和多維集羣(Multi Dimensional Clustering)可同時使用。
下面的例子建立一個 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. 將一個表按區域分區
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 提供了兩種壓縮特性:一種是索引級壓縮,另外一種是表級壓縮。若是對這些特性沒有適當的規劃,就會對性能產生不良影響。
Oracle 從版本 8i 開始就引入了索引壓縮。能夠壓縮的索引有 bitmap、btree 和索引組織的表。索引壓縮使用起來很簡單。例如,要用壓縮特性建立一個索引,可使用以下代碼:
清單 4. 用壓縮特性建立索引
CREATE INDEX ord_customer_ix_demo
ON orders (customer_id, sales_rep_id)
COMPRESS 1;
|
對於不是在內部用壓縮特性建立的索引,能夠經過修改它們將它們轉換成壓縮索引。下面顯示了一個示例,這個示例展現瞭如何修改索引,以使其變成壓縮索引。
清單 5. 用壓縮特性修改索引
alter index ord_customer_ix_demo rebuild compress
|
目前,Oracle 沒有提供任何自動化的建議者程序來指出哪些索引應該被壓縮。大多數經過索引壓縮得到的好處,都須要擁有嫺熟的 Oracle CBO 知識的資深 DBA 通過適當規劃才能得到。
另外一方面,表壓縮是在 Oracle 9i release 2 中引入的。它能夠用於壓縮整個表、表分區和具體視圖。壓縮可應用於全部分區或部分分區。雖然表壓縮也能夠用於未分區的表,可是在 OLTP 工做負載中將表壓縮應用於未分區的表並不可取,由於插入和更新性能會受到影響。在 Oracle 表壓縮中,數據庫塊中重複的值將被去除,信息將被存儲起來,以便在塊中從新建立未壓縮的數據。 下面的例子展現瞭如何用壓縮特性建立分區表。
清單 6. 用壓縮特性建立表
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));
|
爲了將一個錶轉換成壓縮表,可使用 alter table <table name> move compress。可是,壓縮表不容許添加或刪除列。
至於 DB2,在 DB2 9 以前就有一些壓縮方法,可是,行壓縮是在 DB2 9 中才引入的。行壓縮要求建立一個目錄,用於存儲重複模式或條目以及數字鍵。壓縮算法足夠智能,不會壓縮那些對節省磁盤空間幫助不大的行。
DB2 的行壓縮不像 Oracle 的鍵壓縮,它不須要指定鍵。
能夠經過 CREATE TABLE 或 ALTER TABLE 命令在表級進行壓縮。例如:
清單 7. 用 COMPRESSION YES 建立/修改表
CREATE TABLE Sales COMPRESS YES
ALTER TABLE Sales COMPRESS YES
|
爲了在 DB2 Control Center 中取得相同的效果,在列定義過程當中(表建立嚮導中的第二步),應確保選中面板底端的複選框 Store table data in a compressed format(以下圖所示)。
圖 14. DB2 Control Center —— 以壓縮格式建立表
只有在執行 REORG 的時候才構建表字典,以後即可以壓縮表中的數據。在隨後的每次 REORG 操做中,表字典隨之更新。被壓縮的數據同時存放在磁盤上和內存中,DB2 還壓縮存儲在日誌文件中的用戶數據,以便減小日誌文件大小。
注意,分區表的每一個分區能夠有不一樣的壓縮字典,在 DPF 中的一個表的每一個分區也能夠有不一樣的壓縮字典。
除了數據行壓縮,DB2 9 提供的其餘壓縮機制還包括:
- NULL 值和缺省值壓縮(V8 GA):對變長列中的零長度空數據和系統缺省值進行壓縮。
- 多維集羣(V8 GA):使用塊索引,數千個記錄共用一個索引條目,實現索引壓縮。
- 數據庫備份壓縮(V8 FP4):經過壓縮產生較小的備份鏡像。
- XML 解析
自治特性
從 Oracle 9i 到 10g,Oracle 在調優方面做了一些改進。Oracle 將如下方面的調優進行了自動化:
- Redo Logfile Sizing Advisor —— 該特性就重作日誌文件的最佳大小給出建議,以免因頻繁出現的檢查點而致使過多的磁盤 I/O。
- Automatic Checkpoint Tuning —— Oracle 數據庫如今能夠自調優檢查點,以取得良好的恢復速度,同時減小對正常吞吐率的影響。 這樣便再也不須要設置任何與檢查點相關的參數。
- Automatic Shared Memory Tuning —— Automatic Shared Memory Tuning 經過自調優算法將 System Global Area (SGA) 內存相關參數(緩衝區緩存、共享池)的配置自動化。它簡化了數據庫的配置,確保可用內存獲得最有效的利用,並提升了性能。
- Transaction Rollback and Recovery Monitoring —— 該特性便於估計回滾一個事務要花多少時間。還能夠監控被恢復的事務的進程,並估計事務恢復的平均速度。
Oracle 還提供了一些 advisor,例如 segment advisor 和 undo advisor。segment advisor 根據對象內的空間拆分程度給出是否能夠對一個對象執行新的在線壓縮操做的建議。並且,這個 advisor 還給出關於段的歷史增加趨勢的報告,特別是能爲容量規劃提供有效的信息。另外一方面,Undo Advisor 則幫助管理員在調整 flashback 和非 flashback 中的表空間的大小時做出正確的判斷。它爲管理員適當地設置 UNDO_RETENTION 提供建議,以免快照過於陳舊的問題。
DB2 9 引入了一些新的自治加強。例如,DB2 9 引入一種新的自調優內存特性(使用 self_tuning_mem 數據庫配置參數),該特性自動地設置一些內存配置參數的值,從而簡化了內存配置任務。自動調優器充當調度器的角色,它算出可用的內存資源,動態地將它們分發給數據庫的一些內存消費者。
除了自調優內存,DB2 9 還引入了下面提到的其餘一些加強。這份列表並不完整,可是其中列出的都是重要的加強。
自動配置
DB2 8 引入了 Configuration Advisor,它能夠檢測系統和數據庫的特徵 —— CPU、內存、數據庫大小、表的數量等,併爲配置參數給出建議的值。DB2 9 則更進一步 —— 它在數據庫建立以後自動運行 configuration advisor,並缺省地作出一些基本的調優決定。例如,它配置缺省緩衝池的大小、I/O 清理程序和 I/O 服務器等。 這種初始的自動調優意味着,同使用以前缺省的數據庫配置參數值建立的數據庫相比,如今的數據庫將擁有更好的性能,而且有更好的即開即用性。
自動數據統計信息收集
缺省狀況下,DB2 9 還容許對某些進行中的任務進行自動化。經過該特性,DB2 肯定須要哪些統計信息,以及哪些統計信息須要更新,而後自動在後臺執行 RUNSTATS 實用程序。
自動存儲管理
DB2 9 擴展了在 DB2 V8.2.2 中首次引入的自動存儲特性。自動存儲自動增加跨磁盤和文件系統的數據庫的大小,因爲它是自動增加數據庫大小的,所以 DBA 不須要管理存儲容器。當在 DB2 9 中建立數據庫時,自動存儲管理特性是缺省地啓用的。
自動錶和索引重組加強
自動重組是從 8.2 版開始引入的。可是,DB9 對其加以加強,從而容許作如下事情:
- 指定具備適當頁寬的系統臨時表空間,用於離線表重組。
- 可限制被重組的表的大小。
- 指定自動索引重組應該在線運行,而且在在線維護窗口中運行。
- 指定在重組期間是保留仍是從新構建壓縮目錄。
工具
咱們來看看不一樣領域的一些工具,例如數據庫建立和維護、網絡、管理 GUI、性能調優、數據移動和備份恢復工具。圖 15 顯示了這些 DB2 9 GUI 工具。
圖 15. DB2 9 GUI 工具
讓咱們看看相似的任務在 Oracle 和 DB2 9 中分別是怎樣執行的。
數據庫建立和維護
Oracle 提供了 Database Configuration Assistant(dbca)做爲建立數據庫的 GUI 工具。對於數據庫維護,Oracle 提供了 Oracle Enterprise Manager。DB2 數據庫則能夠經過 DB2 Control Center 建立和維護。
網絡
Oracle 提供了 Network Configuration Assistant(netca)來進行網絡配置。或者,也可使用 Oracle Network Manager 來配置服務名、偵聽器、配置文件和 Oracle 名稱服務器。DB2 則使用 CATALOG 命令來編目節點和數據庫。此外還可使用 DB2 命令行或 DB2 Configuration Assistant GUI 進行編目。
管理
Oracle Enterprise Manager 提供了針對管理員平常任務的普遍管理功能。DB2 Control Center 也提供了和 Oracle Enterprise Manager 相似的功能。除了 DB2 Control Center 外,還可使用 DB2 命令行處理器來發出 DDL 和 DML 語句。該實用程序相似於 Oracle 的 SQLPLUS 實用程序。圖 16 顯示了 DB2 命令行處理器。
圖 16. DB2 命令行處理器
還能夠在 Command Center 中發出命令,如 圖 17 所示。
圖 17. Command Center GUI(DB2 命令行處理器的 GUI 版本)
性能調優
Oracle Enterprise Manager 附帶有 Change Management Pack、Tuning Pack 和 Diagnostic Pack。DB2 則提供了 Event Analyzer、Health Center、Indoubt Transaction Manager 和 Memory Visualizer 做爲性能調優任務的 GUI 工具。
數據移動
Oracle 提供了 SQL Loader(sqlldr)用於以定界文本格式裝載數據。Import(imp)和 export(exp)可用於執行邏輯導入和導出。DB2 提供了相似的導入、導出和裝載實用程序。對於跨平臺的數據移動,DB2 提供了 db2move 實用程序。
備份和恢復
Oracle 提供了 Recovery Manager 做爲熱備份的選項。在 DB2 中,可使用 backup 命令或 DB2 Control Center 備份數據庫。
Oracle 10g Enteprise Manager 附帶了新的性能概要表。加強的 Oracle Enterprise Manager HTML 界面爲全部與數據庫性能相關的統計信息提供了一個集中的訪問點,爲全面的監控和診斷提供了方便。
除了隨 DB2 UDB version 8 發佈的界面外,DB2 9 還引入了一種全新的免費應用程序開發工具,這個工具叫作 DB2 Developer Workbench(DWB),它是基於 Eclipse 框架的。這個工具能夠單獨下載,也可經過光盤得到,它替代了 DB2 8 的 Development Center。 DWB 是用於建立、編輯、調試、部署和測試 DB2 存儲過程和用戶定義函數的一站式中心。此外,還可使用 DWB 來開發 SQLJ 應用程序,以及建立、編輯和運行 SQL 語句和 XML 查詢。
DWB 有一些用於開發 DB2 業務對象的視圖,例如:
- Database Explorer 視圖 —— 顯示數據庫中有什麼對象(表、存儲過程、用戶定義函數、依賴關係、遠程服務器等),並容許在這些對象上執行動做。
- Data Project Explorer 視圖 —— 在該視圖中,能夠經過簡單的操做,例如拖放、複製粘貼、嚮導、上下文敏感的完成選項等,進行過程、用戶定義函數和 SQL 語句的開發。
- Data Output 視圖 —— 在該視圖中能夠看到對數據庫的數據開發的報告。
除了 DB2 8 的 Development Center 的功能外,新的 Developer Workbench 還包括對遷移報告、比較例程、XML 函數和使用 XQuery Builder 構建 XQuery 查詢等等的支持。如今能夠從網站下載DB2 Developer Workbench 。
要了解關於 DB2 Developer Workbench 的更詳細的信息,請閱讀 developerWorks 中的這篇 教程。要獲得更詳盡的示例和特性,請參考 developerWorks 中的文章 DB2 9 入門: 應用程序開發方面的加強。
圖 18 展現瞭如何使用 DWB 建立存儲過程:
圖 18. DB2 Developer WorkBench
結束語
在本文中,咱們藉助您當前已有的關於 Oracle 10g Release 2 的知識,對 DB2 9 for Linux, UNIX and Windows 進行了介紹。咱們簡要地描述了 DB2 9 架構、後臺進程、內存模型、安全性、工具等方面。Oracle 與 DB2 9 之間有不少相似之處,咱們也指出了它們之間的一些不一樣之處,以便您能借助已有的知識,在 DB2 9 中得到成功。
表 3 總結了咱們討論過的 Oracle 與 DB2 9 之間的相同點與不一樣點。
表 3 —— Oracle 與 DB2 9 概念總結
Oracle |
DB2 9 |
註解 |
實例 |
實例 |
一個 DB2 實例能夠包含多個數據庫 |
數據庫 |
數據庫 |
|
initSID.ora 或 SPFILE |
DBM CFG 和 DB CFG |
DB2 使用兩個級別的配置:Database Manager Configuration(DBM CFG)(實例級)和 Database Configuration(DB CFG)(數據庫級)。與 Oracle 同樣,不少配置參數能夠動態更改 |
表空間 |
表空間 |
DB2 支持 SMS 和 DMS 這兩類表空間。DMS 表空間與 Oracle 的表空間相似 |
數據塊 |
頁 |
DB2 支持如下幾種頁大小:4k、8k、16k 和 32k。一個行必須可以裝入其中一種數據頁內。它不能像在 Oracle 中那樣跨多個頁 |
盤區 |
盤區 |
|
數據文件 |
DMS 表空間容器 |
用於 DMS 表空間的容器能夠是原始設備,也能夠是文件 |
重作日誌文件 |
事務日誌文件 |
|
數據緩衝區 |
緩衝池 |
DB2 沒有一組預約義的緩衝池,可是能夠根據須要建立足夠多的緩衝池。在建立具備給定頁大小的表空間時,必須預先存在一個具備給定頁寬的緩衝池 |
SGA |
數據庫管理器共享內存和數據庫共享內存 |
|
數據字典 |
編目 |
|
庫緩存 |
包緩存 |
|
大型池 |
實用程序堆 |
|
數據字典緩存 |
編目緩存 |
|
SYSTEM 表空間 |
SYSCATSPACE 表空間 |
|
在DB2中從客戶端訪問服務器端的數據庫時,不能直接用connect命令,而必須先創建通訊node,再在node的基礎上創建數據庫鏈接。在命令行的具體操做以下:
->db2 catalog tcpip node ABC remote serverName server 50000
->db2 catalog db databaseName at node ABC
->db2 connect to databaseName user Uid using Pwd
說明:
catalog tcpip node ABC 中的ABC是由你任意起的一個結點名,結點名不能跟已有的結點名重複
catalog db databaseName at node ABC 中的ABC指的是你在前面起的那個結點名
serverName 服務器名稱(遠程數據庫)
databaseName 數據庫名稱
Uid 用戶名
Pwd 密碼
另外,若是客戶端已經跟同一個服務器創建了node,那麼若是你想鏈接該服務器上的另外一個數據庫時,不須要再另建node,直接用同一個node便可。另外,創建node時服務器名稱後的端口不必定是50000,要看DB工程師當時的設置。
相關指令:
list db directory 列出可訪問的db
list node directory 列出可訪問的結點
下邊是DB2安裝和設置鏈接的具體流程:
1、安裝db2 v9服務器、建立實例、建立管理服務器
1.建立目錄、用戶
[root@seagull /]# mkdir /db2home
[root@seagull /]# mkdir /db2home/db2inst1
[root@seagull /]# mkdir /db2home/db2fenc1
[root@seagull /]# groupadd -g 999 db2iadm1
[root@seagull /]# groupadd -g 998 db2fadm1
[root@seagull /]# useradd -u 1004 -g db2iadm1 -d /db2home/db2inst1 db2inst1
[root@seagull /]# useradd -u 1003 -g db2fadm1 -d /db2home/db2fenc1 db2fenc1
passwd db2inst1
passwd db2fenc1
su – db2fenc1 –切換用戶
su – db2fenc1 –根據提示,從新設置密碼,使得密碼生效
su – db2inst1 –切換用戶
su – db2inst1 –根據提示,從新設置密碼,使得密碼生效
2.安裝db2軟件
[root@seagull seagull]# cd /tmp/seagull/db2v9/
[root@seagull db2v9]# ls
db2 db2_install db2setup installFixPack
[root@seagull db2v9]# ./db2_install
#註解:IBM工程師建議用文字界面安裝,而不要用圖形界面安裝,即用db2_install,不要用db2setup
Default directory for installation of products – /opt/ibm/db2/V9.1
***********************************************************
Do you want to choose a different directory to install [yes/no] ?
no
#註解:使用默認目錄就能夠了
Specify one or more of the following keywords,
separated by spaces, to install DB2 products.
CLIENT
RTCL
ESE
Enter 「help」 to redisplay product names.
Enter 「quit」 to exit.
***********************************************************
ESE
#註解:選擇安裝ESE,即enterprise server edition
DB2 installation is being initialized.
Total number of tasks to be performed: 46
Total estimated time for all tasks to be performed: 802
Task #1 start
Description: Checking license agreement acceptance
Estimated time 1 second(s)
Task #1 end
Task #2 start
Description: GSKit support
Estimated time 19 second(s)
Task #2 end
Task #3 start
Description: Product Messages – English
Estimated time 10 second(s)
Task #3 end
Task #4 start
Description: Base client support
Estimated time 67 second(s)
Task #4 end
Task #5 start
Description: IBM Software Development Kit (SDK) for Java(TM)
Estimated time 101 second(s)
Task #6 start
Description: Java Help (HTML) – English
Estimated time 7 second(s)
Task #6 end
Task #7 start
Description: Replication with MQ Server
Estimated time 22 second(s)
Task #7 end
Task #8 start
Description: Run-time Environment
Estimated time 78 second(s)
Task #9 start
Description: Java support
Estimated time 6 second(s)
Task #9 end
Task #10 start
Description: SQL procedures
Estimated time 3 second(s)
Task #10 end
Task #11 start
Description: ICU Utilities
Estimated time 39 second(s)
Task #11 end
Task #12 start
Description: SQL Replication Support
Estimated time 19 second(s)
Task #12 end
Task #13 start
Description: Java Common files
Estimated time 20 second(s)
Task #13 end
Task #14 start
Description: Base server support
Estimated time 47 second(s)
Task #14 end
Task #15 start
Description: Control Center Help (HTML) – English
Estimated time 13 second(s)
Task #15 end
Task #16 start
Description: Connect support
Estimated time 3 second(s)
Task #16 end
Task #17 start
Description: Configuration Assistant
Estimated time 4 second(s)
Task #17 end
Task #18 start
Description: Spatial Extender client
Estimated time 6 second(s)
Task #18 end
Task #19 start
Description: Base application development tools
Estimated time 11 second(s)
Task #19 end
Task #20 start
Description: Administration Server
Estimated time 7 second(s)
Task #20 end
Task #21 start
Description: Communication support – TCP/IP
Estimated time 3 second(s)
Task #21 end
Task #22 start
Description: Control Center
Estimated time 38 second(s)
Task #22 end
Task #23 start
Description: Parallel Extension
Estimated time 3 second(s)
Task #23 end
Task #24 start
Description: Replication tools
Estimated time 12 second(s)
Task #24 end
Task #25 start
Description: Relational wrappers common
Estimated time 3 second(s)
Task #25 end
Task #26 start
Description: DB2 data source support
Estimated time 4 second(s)
Task #26 end
Task #27 start
Description: DB2 LDAP support
Estimated time 3 second(s)
Task #27 end
Task #28 start
Description: DB2 Instance Setup wizard
Estimated time 4 second(s)
Task #28 end
Task #29 start
Description: XML Extender
Estimated time 11 second(s)
Task #29 end
Task #30 start
Description: First Steps
Estimated time 3 second(s)
Task #30 end
Task #31 start
Description: DB2 Web Tools
Estimated time 12 second(s)
Task #31 end
Task #32 start
Description: Product Signature for DB2 Enterprise Server Edition
Estimated time 5 second(s)
Task #32 end
Task #33 start
Description: XML Extender samples
Estimated time 3 second(s)
Task #33 end
Task #34 start
Description: ADT sample programs
Estimated time 20 second(s)
Task #34 end
Task #35 start
Description: Sample database source
Estimated time 4 second(s)
Task #35 end
Task #36 start
Description: Spatial Extender samples
Estimated time 3 second(s)
Task #36 end
Task #37 start
Description: Informix data source support
Estimated time 3 second(s)
Task #37 end
Task #38 start
Description: Setting DB2 library path
Estimated time 120 second(s)
Task #38 end
Task #39 start
Description: Executing control tasks
Estimated time 20 second(s)
Task #39 end
Task #40 start
Description: Updating global registry
Estimated time 20 second(s)
Task #40 end
Task #41 start
Description: Starting DB2 Fault Monitor
Estimated time 10 second(s)
Task #41 end
Task #42 start
Description: Updating the db2ls link
Estimated time 1 second(s)
Task #42 end
Task #43 start
Description: Registering DB2 licenses
Estimated time 5 second(s)
Task #43 end
Task #44 start
Description: Setting default global profile registry variables
Estimated time 1 second(s)
Task #44 end
Task #45 start
Description: Initializing instance list
Estimated time 5 second(s)
Task #45 end
Task #46 start
Description: Updating global profile registry
Estimated time 3 second(s)
Task #46 end
The execution completed successfully.
For more information see the DB2 installation log at
「/tmp/db2_install.log.7134″.
[root@seagull db2v9]#
3.安裝license
[root@seagull bin]# cd /opt/ibm/db2/V9.1/adm/
[root@seagull adm]# ./db2licm -a /tmp/seagull/db2v9/license/db2ese_c.lic
LIC1402I License added successfully.
LIC1426I This product is now licensed for use as specified in the License Agreement and License Information documents pertaining to the licensed copy of this product. USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT AND LICENSE INFORMATION DOCUMENTS, LOCATED IN THE FOLLOWING DIRECTORY: 「/opt/ibm/db2/V9.1/license/en_US.iso88591″
[root@seagull adm]# ./db2licm -a /tmp/seagull/db2v9/license/db2dpf.lic
LIC1402I License added successfully.
LIC1426I This product is now licensed for use as specified in the License Agreement and License Information documents pertaining to the licensed copy of this product. USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT AND LICENSE INFORMATION DOCUMENTS, LOCATED IN THE FOLLOWING DIRECTORY: 「/opt/ibm/db2/V9.1/license/en_US.iso88591″
[root@seagull adm]# ./db2licm -a /tmp/seagull/db2v9/license/db2xmlese.lic
LIC1402I License added successfully.
LIC1426I This product is now licensed for use as specified in the License Agreement and License Information documents pertaining to the licensed copy of this product. USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT AND LICENSE INFORMATION DOCUMENTS, LOCATED IN THE FOLLOWING DIRECTORY: 「/opt/ibm/db2/V9.1/license/en_US.iso88591″
[root@seagull adm]#
4.建立實例和樣本數據庫
[root@seagull V9.1]# cd /opt/ibm/db2/V9.1/instance
[root@seagull instance]# ./db2icrt -p 50000 -u db2fenc1 db2inst1
DBI1070I Program db2icrt completed successfully.
[root@seagull instance]# tail -n 6 -f /etc/services
# Local services
DB2_db2inst1 60000/tcp
DB2_db2inst1_1 60001/tcp
DB2_db2inst1_2 60002/tcp
DB2_db2inst1_END 60003/tcp
[root@seagull ~]# su – db2inst1
[db2inst1@seagull ~]$
[db2inst1@seagull ~]$ db2sampl
Starting the DB2 instance…
Creating database 「SAMPLE」…
Connecting to database 「SAMPLE」…
Creating tables and data in schema 「DB2INST1″…
Stopping the DB2 instance…
‘db2sampl’ processing complete.
[db2inst1@seagull sqllib]$
[db2inst1@seagull sqllib]$ db2start
11/28/2007 16:49:04 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
[db2inst1@seagull sqllib]$ db2 connect to sample
Database Connection Information
Database server = DB2/LINUX 9.1.0
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
[db2inst1@seagull sqllib]$ db2 「select * from staff」
ID NAME DEPT JOB YEARS SALARY COMM
—— ——— —— —– —— ——— ———
10 Sanders 20 Mgr 7 98357.50 -
20 Pernal 20 Sales 8 78171.25 612.45
30 Marenghi 38 Mgr 5 77506.75 -
40 O’Brien 38 Sales 6 78006.00 846.55
50 Hanes 15 Mgr 10 80659.80 -
60 Quigley 38 Sales – 66808.30 650.25
70 Rothman 15 Sales 7 76502.83 1152.00
80 James 20 Clerk – 43504.60 128.20
90 Koonitz 42 Sales 6 38001.75 1386.70
100 Plotz 42 Mgr 7 78352.80 -
110 Ngan 15 Clerk 5 42508.20 206.60
120 Naughton 38 Clerk – 42954.75 180.00
130 Yamaguchi 42 Clerk 6 40505.90 75.60
140 Fraye 51 Mgr 6 91150.00 -
150 Williams 51 Sales 6 79456.50 637.65
160 Molinare 10 Mgr 7 82959.20 -
170 Kermisch 15 Clerk 4 42258.50 110.10
180 Abrahams 38 Clerk 3 37009.75 236.50
190 Sneider 20 Clerk 8 34252.75 126.50
200 Scoutten 42 Clerk – 41508.60 84.20
210 Lu 10 Mgr 10 90010.00 -
220 Smith 51 Sales 7 87654.50 992.80
230 Lundquist 51 Clerk 3 83369.80 189.65
240 Daniels 10 Mgr 5 79260.25 -
250 Wheeler 51 Clerk 6 74460.00 513.30
260 Jones 10 Mgr 12 81234.00 -
270 Lea 66 Mgr 9 88555.50 -
280 Wilson 66 Sales 9 78674.50 811.50
290 Quill 84 Mgr 10 89818.00 -
300 Davis 84 Sales 5 65454.50 806.10
310 Graham 66 Sales 13 71000.00 200.30
320 Gonzales 66 Sales 4 76858.20 844.00
330 Burke 66 Clerk 1 49988.00 55.50
340 Edwards 84 Sales 7 67844.00 1285.00
350 Gafney 84 Clerk 5 43030.50 188.00
35 record(s) selected.
5.建立das管理服務器
爲了遠程客戶端可以用控制中心來控制數據庫服務器,須要在數據庫服務器上安裝das,固然,若是隻是遠程鏈接而不是遠程管理,能夠不用裝,這裏我安裝了一下。
[root@seagull ~]# groupadd -g 997 db2asgrp
[root@seagull ~]# mkdir /db2home/db2as
[root@seagull ~]# useradd -u 1002 -g db2asgrp -d /db2home/db2as db2as
[root@seagull ~]# passwd db2as
[root@seagull ~]# su – db2as #爲了db2as口令生效
[root@seagull ~]# cd /opt/ibm/db2/V9.1/instance
[root@seagull instance]# ./dascrt -u db2as
[db2as@seagull ~]$
[db2as@seagull ~]$ exit
[root@seagull instance]# su – db2as
[db2as@seagull ~]$ db2admin start
6.確認一下db2inst1實例的服務名
[db2inst1@seagull ~]$ db2 get dbm cfg|grep SVCENAME
TCP/IP Service name (SVCENAME) = 50000
#註解:svcename在客戶端鏈接時須要用到
7.能夠看一下license狀況
[db2inst1@seagull ~]$ db2licm -l
Product name: 「DB2 Enterprise Server Edition」
License type: 「CPU」
Expiry date: 「Permanent」
Product identifier: 「db2ese」
Version information: 「9.1″
Annotation: 「-3;(_c)」
Features:
DB2 Database Partitioning: 「Licensed」
DB2 Performance Optimization ESE: 「Not licensed」
DB2 Storage Optimization: 「Not licensed」
DB2 Advanced Access Control: 「Not licensed」
DB2 Geodetic Data Management: 「Not licensed」
Homogeneous Federation for DB2: 「Not licensed」
DB2 Pure XML ESE: 「Licensed」
2、安裝db2 v9 client on windows,並設置遠程鏈接
1.圖形界面安裝,一步一步下去就能夠了,最好選擇不安裝信息中心。
2.設置遠程鏈接
C:/Documents and Settings/Administrator>db2cmd
C:/>db2 catalog tcpip node vmdb2v9 remote 10.10.10.100 server 50000
DB20000I CATALOG TCPIP NODE命令成功完成。
DB21056W 只有在刷新目錄高速緩存之後,目錄更改纔會生效。
C:/>db2 catalog db sample as sample at node vmdb2v9
DB20000I CATALOG DATABASE命令成功完成。
DB21056W 只有在刷新目錄高速緩存之後,目錄更改纔會生效。
3.此時打開控制中心,就能夠操做遠程的數據庫了。
3、基本操做命令練習
[db2inst1@seagull ~]$ db2level #查看版本
DB21085I Instance 「db2inst1″ uses 「32″ bits and DB2 code release 「SQL09010″
with level identifier 「02010107″.
Informational tokens are 「DB2 v9.1.0.0″, 「s060629″, 「LINUXIA32″, and Fix Pack
「0″.
Product is installed at 「/opt/ibm/db2/V9.1″.
[db2inst1@seagull ~]$ db2 connect to sample #鏈接數據庫
Database Connection Information
Database server = DB2/LINUX 9.1.0
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
[db2inst1@seagull ~]$ db2 list tables for all #查看庫中全部表
Table/View Schema Type Creation time
——————————- ————— —– ————————–
ACT DB2INST1 T 2007-11-28-16.48.12.138286
……..
[db2inst1@seagull ~]$ db2 list tables for schema db2inst1 #查看db2inst1的表
Table/View Schema Type Creation time
——————————- ————— —– ————————–
ACT DB2INST1 T 2007-11-28-16.48.12.138286
ADEFUSR DB2INST1 S 2007-11-28-16.48.16.196999
[db2inst1@seagull ~]$ db2 list tablespaces #查看錶空間,若是加show detail能夠看詳細信息
Tablespaces for Current Database
Tablespace ID = 0
Name = SYSCATSPACE
Type = Database managed space
Contents = All permanent data. Regular table space.
State = 0×0000
Detailed explanation:
Normal
Tablespace ID = 1
Name = TEMPSPACE1
Type = System managed space
Contents = System Temporary data
State = 0×0000
Detailed explanation:
Normal
Tablespace ID = 2
Name = USERSPACE1
Type = Database managed space
Contents = All permanent data. Large table space.
State = 0×0000
Detailed explanation:
Normal
Tablespace ID = 3
Name = IBMDB2SAMPLEREL
Type = Database managed space
Contents = All permanent data. Large table space.
State = 0×0000
Detailed explanation:
Normal
[db2inst1@seagull ~]$ db2 list tablespace containers for 1 #查看錶空間的容器
Tablespace Containers for Tablespace 1
Container ID = 0
Name = /db2home/db2inst1/db2inst1/NODE0000/SAMPLE/T0000001/C0000000.TMP
Type = Path
[db2inst1@seagull ~]$ db2 describe table staff #顯示錶結構
Column Type Type
name schema name Length Scale Nulls
—————————— ——— —————— ——– —– ——
ID SYSIBM SMALLINT 2 0 No
NAME SYSIBM VARCHAR 9 0 Yes
DEPT SYSIBM SMALLINT 2 0 Yes
JOB SYSIBM CHARACTER 5 0 Yes
YEARS SYSIBM SMALLINT 2 0 Yes
SALARY SYSIBM DECIMAL 7 2 Yes
COMM SYSIBM DECIMAL 7 2 Yes
#建立表,插入記錄
[db2inst1@seagull ~]$ db2 「create table t1(id smallint,name varchar(10))」
DB20000I The SQL command completed successfully.
[db2inst1@seagull ~]$ db2 「insert into t1 values(1,’seagull’)」
DB20000I The SQL command completed successfully.
[db2inst1@seagull ~]$ db2 「insert into t1 values(2,’lgh’)」
DB20000I The SQL command completed successfully.
[db2inst1@seagull ~]$ db2 「insert into t1 values(2,’海鷗’)」
DB20000I The SQL command completed successfully.
[db2inst1@seagull ~]$ db2 commit
DB20000I The SQL command completed successfully.
[db2inst1@seagull ~]$ db2 「select * from t1″
ID NAME
—— ———-
1 seagull
2 lgh
2 海鷗
3 record(s) selected.
[db2inst1@seagull ~]$
[db2inst1@seagull ~]$ db2 get db cfg|grep code #查看數據庫字符集
Database code page = 1208
Database code set = UTF-8
Database country/region code = 1
[db2inst1@seagull ~]$
#註解,在客戶端,要設置db2codepage變量與數據庫一致,這樣才能正確的顯示漢字,客戶端設置方法db2set db2codepage=1208,在windows 上,db2codepage默認爲1386(GBK),linux上默認爲1208(UTF-8),aix上默認爲819(ISO8859-1),要注意這個問題,我在客戶端查詢t1表時就發現是亂碼,後來設置了客戶端變量db2codepage才搞定。
另一種可行的辦法是,在服務器上建立生產庫時,指定數據庫字符集爲GBK,這樣windows客戶端就不用改db2codepage變量了,這個方法我之前用過,當時在服務器上建立生產數據庫的腳本爲:
su – db2inst1
db2set db2codepage=1386 #爲了能建立gbk字符集數據庫
exit #退一次爲了使得設置生效
su – db2inst1
db2 create db GZDC using codeset GBK territory CN
connect to gzdc
db2 grant dbadm on database to db2admin
db2 「create bufferpool BP_8K size -1 pagesize 8192 not extended storage」
db2 「alter bufferpool IBMDEFAULTBP immediate size 50000″
CREATE system temporary TABLESPACE TS_SYSTEMP_04 PAGESIZE 4096 MANAGED BY DATABASE USING (FILE ‘/db2data/db2data01/stmp4k1.dbf’ 1024M, FILE ‘/db2data/db2data02/stmp4k2.dbf’ 1024M) EXTENTSIZE 32 PREFETCHSIZE 64
CREATE system temporary TABLESPACE TS_SYSTEMP_08 PAGESIZE 8192 MANAGED BY DATABASE USING (FILE ‘/db2data/db2data01/stmp8k1.dbf’ 5G, FILE ‘/db2data/db2data02/stmp8k2.dbf’ 5G) EXTENTSIZE 192 PREFETCHSIZE 384 BUFFERPOOL BP_8K
CREATE LARGE TABLESPACE HOSPITALSPACE PAGESIZE 8192 MANAGED BY DATABASE USING
(FILE ‘/db2data/db2data01/HOSPITAL_01.dbf’ 50G,
FILE ‘/db2data/db2data02/HOSPITAL_02.dbf’ 50G,
FILE ‘/db2data/db2data01/HOSPITAL_03.dbf’ 50G,
FILE ‘/db2data/db2data02/HOSPITAL_04.dbf’ 50G,
FILE ‘/db2data/db2data01/HOSPITAL_05.dbf’ 50G,
FILE ‘/db2data/db2data02/HOSPITAL_06.dbf’ 50G,
FILE ‘/db2data/db2data01/HOSPITAL_07.dbf’ 50G,
FILE ‘/db2data/db2data02/HOSPITAL_08.dbf’ 50G,
FILE ‘/db2data/db2data01/HOSPITAL_09.dbf’ 50G,
FILE ‘/db2data/db2data02/HOSPITAL_10.dbf’ 50G)
EXTENTSIZE 192 PREFETCHSIZE 384 BUFFERPOOL BP_8K;
CREATE LARGE TABLESPACE MANAGERSPACE PAGESIZE 8192 MANAGED BY DATABASE USING (FILE ‘/db2data/db2data01/MANAGER_01.dbf’ 25G) EXTENTSIZE 192 PREFETCHSIZE 384 BUFFERPOOL BP_8K
alter tablespace managerspace add (file ‘/db2data/db2data02/MANAGER_02.dbf’ 25G)
我的註解:DB2感受很容易裝啊,比oracle要簡單多了,並且管理好像也簡單,只不過db2不支持rac模式,db2本身的dpf模式,和rac有本質差異,在其中一個數據庫節點所在的主機出現問題時,其管理的數據庫分區必須切換到正常節點才能保證整個數據庫的完整使用,並且正常狀況下,數據庫分區之間可能會有比較大的網絡通訊負載看來oracle的rac機制仍是比較難實現的