為什麼要使用 DB2 Express-C?
DB2 Express-C 基於與 DB2 Universal Database™(UDB) Express Edition V8.2.2 產品一樣的核心技術。Linux® 和 Windows® 平台(32 位和 64 位)上的 DB2 Express-C 可以從 IBM 免費 下載。IBM 在 2006 年 1 月 1 日推出了 DB2 Express-C,這是 DB2 Universal Database Express Edition(DB2 Express)的一個版本。它為 C/C++、Java、.Net、PHP 等應用程序的構建和部署提供了一個穩定的數據庫環境。
IBM Cloudscape™ 和 Express-C 都可以從 IBM 免費獲得,它們都可以用於開發和部署應用程序。因為這兩種數據庫服務器都基於開放標准,比如 SQL 和 JDBC,所以很容易在它們之間遷移 Java 應用程序和數據庫。如果您目前正在使用 Cloudscape 或 apache Derby,那麼可以考慮使用免費的實用程序 Cloudscape Workbench 將數據庫遷移到 DB2,並嘗試一下新的 DB2 Express-C。雖然與 Cloudscape 相比,DB2 Express-C 的下載包和磁盤占用更大,但是 DB2 提供了更多的工具。它還提供更多的特性,比如全面支持 .Net 應用程序,而且適合 PHP 應用程序。DB2 Express-C 最多可以利用兩個 CPU 和 4GB 內存,數據庫的規模也不受限制。DB2 可以讓一個數據庫跨許多磁盤,從而改進可伸縮性和性能。
DB2 Express-C 是一種產品化的數據庫服務器,它秉承了 Linux 和 Windows 上持續改進的 DB2 產品的創新技術。自 1995 年起已經可以在 Windows 上使用 DB2,Linux 版本是從 1999 年開始的。
您可能會問,“如果數據庫服務器需要超過 4GB 的內存和兩個以上的 CPU 來支持我的應用程序,那麼該怎麼辦?” 在這種情況下,可以很容易地遷移到 Linux、Windows 或 UNIX® 上的 UDB Enterprise Server Edition(ESE)。DB2 ESE 是一種可靠的大規模數據服務平台,能夠支持 TB 級數據量。DB2 ESE 可以可選地添加數據分區功能(Database Partitioning Feature,DPF),從而執行並行數據庫操作。從 DB2 Express-C 遷移到其他 DB2 版本是很容易的,因為它們的核心數據庫引擎是相同的。
隨著 DB2 Express-C 的推出,IBM 還推出了一個新的交互式 論壇,來自 IBM 的 DB2 專家會在這裡幫助大家。如果您對這個新的免費數據服務器有什麼疑問的話,可以在這裡尋求解答。DB2 Express-C 有一套完整的 PDF 格式的手冊,還可以在全面的可搜索 Web 站點 DB2 Information Center 上獲得這些信息。DB2 Information Center 會不斷更新,您還可以下載 DB2 Information Center 的最新版本並將它安裝在專用的服務器上,或者獲得所有 DB2 UDB 產品手冊。注意,DB2 Information Center 是 Linux、UNIX 和 Windows 上所有 DB2 UDB 版本通用的,所以要認識到某些高級特性,比如 Database Partitioning Feature(DPF),不能應用於 DB2 Express-C 環境。
如果打算在 Linux 上使用 DB2 Express-C,那麼最好實現檢查經過測試的最新的 Linux 發行版。關於 DB2 Linux 版的另一個參考資料是 DB2 Universal Database Version 8.2 for Linux HOWTO。
設置和運行
安裝 DB2 Express-C
DB2 Express-C 的最小內存需求是 256MB(不帶圖形化工具)或 512MB(帶圖形化工具)。本文使用的機器具有超過 2GB 的內存。對於本文,我下載了 DB2 Express-C for Windows(32位)。這個下載包有 391MB,安裝非常簡單。將 zip 文件解壓之後(在我的系統上解壓後的目錄並沒有大多少,只有 412MB),執行可執行文件 setup。這會啟動 DB2 Express Launchpad,如 圖 1 所示。這個圖形化安裝程序詢問的問題只有安裝 DB2 Express-C 的位置以及 DB2 Administration Server 的用戶 id 和密碼。我執行的是 typical 安裝,這包括開發工具和庫。整個安裝過程花費的時間小於四分鐘。
圖 1. DB2 Express-C Launchpad
圖片看不清楚?請點擊這裡查看原圖(大圖)。
在安裝之後,顯示一個 First steps 窗口(見 圖 2)。現在您可以開始創建第一個 DB2 數據庫。DB2 Express-C 提供了一個示例數據庫,名稱為 SAMPLE。我們將使用 DB2 Express-C 提供的一些工具針對生產環境的級別配置 SAMPLE 數據庫,並解決當表增長到一百萬行數據時出現的一個性能問題。
圖 2. DB2 First steps
圖片看不清楚?請點擊這裡查看原圖(大圖)。
工具
DB2 Express-C 是一個維護成本很低的數據庫服務器。它附帶一組完整的圖形化工具和命令行工具,幫助數據庫管理員(DBA)進行管理。最常用的圖形化工具是 DB2 Control Center,最常用的命令行工具是 DB2 CLP(Command Line Processor)。這些工具的名稱很一般,但是它們的背後有許多先進的特性。
DB2 Express-C 提供的圖形化工具可以分成幾類,如 圖 3 所示。可以在 General Administration Tools 類別中找到 DB2 Control Center。大多數其他圖形化工具可以從 DB2 Control Center 中訪問。
圖 3. DB2 工具
DB2 Control Center(如 圖 4 所示)向 DBA 提供數據庫的操作狀態。在這個示例中,SAMPLE 數據庫的大小是 25MB,還沒有備份。還沒有配置自動維護。
圖 4. DB2 Control Center - 自動化之前的 SAMPLE 數據庫
圖片看不清楚?請點擊這裡查看原圖(大圖)。
可以使用 DB2 圖形化工具向導快速學習如何對 DB2 執行常見的管理任務。對於 DB2 Control Center 中的每個對象,可以通過在對象上右擊 進行操作。有許多向導(如 圖 5 所示)可以幫助 DB2 DBA 執行常見的任務,比如創建備份數據庫映像和恢復以前的映像。
圖 5. DB2 工具向導
在 圖 6 中,可以看到 SAMPLE 數據庫已經增長到 537MB。這個數據庫已經配置了自動備份和維護。DB2 Express-C 識別出了一個警告狀況,如 圖 6 所示。我們現在研究這個狀況並快速解決它。
圖 6. DB2 Control Center - 自動化之後的 SAMPLE 數據庫
圖片看不清楚?請點擊這裡查看原圖(大圖)。
DB2 的一個獨特特性是它能夠動態地監視環境,並將異常情況通知 DBA,DBA 應該及時解決這些問題,從而實現理想的環境。在 圖 7 中,DB2 探測到 SAMPLE 數據庫每小時的鎖數量大量增加。DB2 使用數據庫對象上的鎖來確保事務的一致性。在這個示例中,DB2 在一小時中增加了 1150 個鎖。利用分配給 DB2 服務器的內存,DB2 無法維護大量的行鎖。通過增加用於鎖管理的 DB2 服務器內存,就很容易解決這個問題。糾正措施可以由 DBA 執行,也可以自動執行。從 DB2 Express-C 到更大規模的 DB2 Enterprise Server Edition(ESE)環境都可以利用這種 DB2 狀態監視功能。DB2 Express-C 總是為應用程序維護事務的一致性。對每個事務進行日志記錄,從而確保數據庫中數據的完整性。
圖 7. DB2 Health Center - 鎖增加
圖片看不清楚?請點擊這裡查看原圖(大圖)。
分析場景
數據庫應用程序的性能直接影響顧客對解決方案的滿意度,實現優化的性能被認為是藝術和科學的結合。DB2 Express-C 提供了非常優秀的工具(包括圖形化工具和非圖形化工具)來幫助您實現高性能和可靠的應用程序。在這個場景中,我們嘗試判斷公司中工資最高的部門。為了實現優化的性能,我們將使用 DB2 Express-C 提供的一些工具。
這個場景中使用的工具包括:
db2batch
Visual Explain
Design Advisor
Activity Monitor
db2batch 實用程序是對查詢的運行時性能進行分析的好工具。在這個場景中,使用以下 SQL 語句執行分析:
SELECT DECIMAL(AVG(salary),12,2) as average_sal, location, deptname
FROM staff a, org b
WHERE b.deptnumb=a.dept
GROUP BY dept,location, deptname
ORDER BY average_sal DESC
STAFF 表已經增長到一百萬條記錄以上,因此這個查詢花費的時間比以前長了。在 圖 8 中顯示,這個查詢的執行時間是 18 秒(紐約總部辦公室是工資最高的部門 —— 這並不意外)。
圖 8. db2batch - 查詢執行
圖 9 顯示,在 STAFF 表上會執行昂貴的表掃描,然後根據來自 ORG 和 STAFF 表的數據執行 Hash Join 操作。這些表上沒有在執行查詢期間 DB2 可用的索引。我們將使用 DB2 Design Advisor,讓 DB2 在 ORG 或 STAFF 表上創建適當的新索引,從而改進這個查詢的性能。
圖 9. Visual explain - 查詢分析
圖 10 顯示來自 DB2 Design Advisor 的反饋。它建議使用 DEPT 和 SALARY 列在 STAFF 表上創建一個索引。Design Advisor 的查詢工作負載可以在一個文件中提供,也可以在應用程序執行期間捕獲。
圖 10. DB2 Design Advisor - 索引建議
圖片看不清楚?請點擊這裡查看原圖(大圖)。
圖 11 顯示這個索引確實對這個查詢的執行有好處。它顯示查詢的執行時間得到了顯著改進,現在只花費了 7 秒。
圖 11. db2batch - 查詢執行的改進
圖 12 確認查詢的訪問計劃中使用了 STAFF 表上的新索引。執行查詢的估計開銷也顯著降低了。
圖 12. Visual explain - 查詢計劃的改變
最後,我們希望判斷在這個查詢執行期間使用的系統資源總量。DB2 UDB V8.2 中增加了一個新工具,稱為 Activity Monitor。它使用各種 SQL 函數和過程獲得性能數據,對系統進行分析。在 圖 13 中看到,查詢執行了兩個排序,花費的時間少於 12 秒。Activity Monitor 還提供許多其他報告,可以用來分析 DB2 Express-C 環境。
圖 9. Visual explain - 查詢分析
圖 10 顯示來自 DB2 Design Advisor 的反饋。它建議使用 DEPT 和 SALARY 列在 STAFF 表上創建一個索引。Design Advisor 的查詢工作負載可以在一個文件中提供,也可以在應用程序執行期間捕獲。
圖 10. DB2 Design Advisor - 索引建議
圖片看不清楚?請點擊這裡查看原圖(大圖)。
圖 11 顯示這個索引確實對這個查詢的執行有好處。它顯示查詢的執行時間得到了顯著改進,現在只花費了 7 秒。
圖 11. db2batch - 查詢執行的改進
圖 12 確認查詢的訪問計劃中使用了 STAFF 表上的新索引。執行查詢的估計開銷也顯著降低了。
圖 12. Visual explain - 查詢計劃的改變
最後,我們希望判斷在這個查詢執行期間使用的系統資源總量。DB2 UDB V8.2 中增加了一個新工具,稱為 Activity Monitor。它使用各種 SQL 函數和過程獲得性能數據,對系統進行分析。在 圖 13 中看到,查詢執行了兩個排序,花費的時間少於 12 秒。Activity Monitor 還提供許多其他報告,可以用來分析 DB2 Express-C 環境。
圖 13. Activity Monitor - 運行時分析
圖片看不清楚?請點擊這裡查看原圖(大圖)。
開發人員、開發人員、開發人員
DB2 Express-C 的典型安裝提供了開發 C/C++、Java 和 .NET 應用程序所需的驅動程序和接口。如果想為 DB2 開發 PHP 或 Perl 應用程序,也有 PHP 和 Perl 驅動程序可用。這些 PHP 和 Perl 接口由 DB2 團隊中的工程師開發和維護。DB2 支持許多種數據庫服務器端編程語言,包括存儲過程、觸發器和函數(表函數和標量函數)。可以使用 C/C++、COBOL、Java(JDBC 或 SQLJ)、.Net(CLR 兼容語言)和 SQL Procedure Language(SQL PL)編寫 DB2 存儲過程。存儲過程語言由開發人員自己選擇;但是,最常用的語言是 Java 和 SQL PL。
SQL Procedure Language(SQL PL) 存儲過程被認為是本機的,因為它們作為對象存儲在 Linux 和 Windows 上的 DB2 數據庫中。SQL PL 已經發展成惟一的基於 ANSI SQL 標准的存儲過程語言。Linux、UNIX、Windows、iSerIEs 和 z/OS 上的所有 DB2 數據庫服務器都支持 SQL PL。DB2 Express-C 提供了一個非常有用的圖形化工具 Development Center,它用於管理 SQL 存儲過程的開發、測試和部署,包括 Java 和 SQL PL 過程。在 圖 14 中,使用 DB2 Development Center 來構建、測試和部署 SQL PL 過程。這裡顯示的過程稱為 high_rollers,它將在 DB2 Express-C 中存儲並執行。因為可以在 DB2 中嚴密地控制存儲過程的執行,所以它提供了一種控制用戶對 DB2 進行訪問的簡便技術。
圖 14. Development Center - SQL PL
圖片看不清楚?請點擊這裡查看原圖(大圖)。
Java
為 DB2 開發 Java 應用程序是很容易的,因為每個 DB2 客戶機和服務器都提供了兼容 JDBC 3 的(類型 4)驅動程序。實際上,DB2 當前包含兩種不同的 JDBC 驅動程序。根據體系結構的不同,原來的驅動程序(db2java.zip)有時候稱為 Application(類型 2)和 Network(類型 3)驅動程序。更靈活的新 JDBC 驅動程序(db2jcc.jar)可以用於類型 2 或類型 4 模式,而且最新的 Java 客戶機/服務器工業基准測試中已經使用了它,比如針對 DB2 和 WebSphere® Application Server 的 SPECjAPPServer 2004。DB2 的 JDBC 驅動程序(db2jcc.jar)綁定在 DB2 Run-time 客戶機中。如果應用程序是純 Java 的,那麼可以將 db2jcc_license_cu.jar 和 db2jcc.jar 放進 CLASSPATH 中。這些文件位於 <DB2 Installation location>\SQLLIB\java 目錄。Java 2 Platform Enterprise Edition(J2EE)服務器(比如 IBM WebSphere Application Server)以及 DB2 數據服務器,提供了一種任務關鍵的分布式應用程序體系結構,可以支持可伸縮的應用程序。
PHP
PHP(“PHP: Hypertext Preprocessor” 的縮寫)是一種被廣泛使用的開放源碼的通用腳本編程語言,尤其適合進行 Web 開發並可以嵌入 Html 中。PHP 已經被廣泛地用來開發可伸縮 Web 應用程序。DB2 對 PHP 開發人員的支持近來得到了增強,增加了由 IBM 支持的 DB2 PHP 本機擴展。 PHP 是一種開放源碼的腳本編程語言,這推動了數百萬 Web 應用程序的開發,而且自 1995 年問世以來 PHP 一直在發展。DB2 PHP 擴展也是開放源碼的。如果希望在 Windows 上使用這個擴展,又不願意對代碼進行編譯,那麼也可以找到必要的 Windows 庫。
要設置 DB2 環境並運行 PHP,最容易的辦法是下載 IBM 和 Zend TechnologIEs 開發的免費的 Zend Core™ for IBM。Zend Core for IBM 是一個 PHP 開發和生產環境,它與 DB2(IBM Cloudscape 數據庫服務器)緊密地集成。它為快速開發和部署數據庫驅動的應用程序提供了基礎。如果需要受到全面支持的 Web 技術組合(包括 PHP 支持和 DB2 支持),也可以從 Zend TechnologIEs 獲得 Zend Core for IBM 的支持選項。Zend Core for IBM 內嵌了 Cloudscape 數據庫服務器和 DB2 Express 的免費版本,這簡化了部署工作。如果以後決定購買完整的 DB2 Express Edition 許可證,也可以獲得對綁定的 DB2 Express 產品的支持。在 圖 15 中,Zend Core for IBM 管理 Web 控制台顯示已經正確地配置了 DB2 PHP 本機擴展。
圖 15. Zend Core for IBM
圖片看不清楚?請點擊這裡查看原圖(大圖)。
.Net
DB2 Express-C 提供了一個 DB2 .NET 1.1 Data Provider 和一組用於 Microsoft Visual Studio .NET 2003 的插件。Visual Studio 中的 IBM explorer 和集成的 DB2 幫助如 圖 16 所示。在安裝 DB2 Express-C 時,它會檢查 Visual Studio .NET 2003 是否存在;如果存在,就將 DB2 特有的功能添加到 Visual Studio 中。這些插件可以減少 .NET 應用程序的開發時間。隨著 DB2 UDB v8.2 的發布,增加了 .Net(CLR,Common Language Runtime)存儲過程支持。