原文地址:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0602tham2/index.html
簡介
管理不同類型的數據庫是大多數數據庫管理員的一種工作方式。很少出現 DBA 只管理一組同類數據庫的情形。在企業的數據中心,會有各種不同的後端存儲庫來存放數據,比如數據庫中的電子表格、圖像、視頻/音頻形式的數據,而這些後端存儲庫包括 DB2 Universal Database™、Oracle、Microsoft® SQL Server、Informix®、Sybase 或者諸如 MySQL 之類的開放源碼數據庫。大多數公司要求 DBA 具有跨數據庫管理這些不同的數據庫的技能,對於企業數據中心而言,對各種數據源具有豐富知識的人才是不可或缺的。
本系列文章將幫助您根據現有的 MySQL DBA 技能學習 DB2 Express。本文是這一系列的第一部分,將帶領您快速瞭解 DB2 Express,文中主要將介紹 DB2 Express 的特性和功能,以及與開放源代碼數據庫 MySQL 相比 DB2 Express 所具有的優勢。
本文對一般性管理任務進行了比較,但並沒有深入討論可管理性、穩定性和可伸縮性的問題,也不會討論兩種數據庫引擎的編寫方式,或者優化程序的工作方式。本文的目的是通過概括開始瞭解技能轉移過程,或者爲那些希望進行這種比較的人描述一下這兩種產品。
對於關心成本的入門級用戶,IBM 提供了 DB2 Express 的免費版本,該版本稱爲 DB2 Express-C。DB2 Express-C 與 DB2 Express、Workgroup Edition 和 Enterprise Edition 具有相同的代碼基礎。隨着業務的增長,客戶往往轉而採用 DB2 Workgroup 或 Enterprise,這些產品通過 Data Partitioning Feature (DPF) 和 High Availability Disaster Recovery (HADR) 提供了真正滿足企業需求的高可用性和高性能。DB2 Express-C 適合 C/C++、Java™、.NET® 和 PHP 開發人員,可以免費 下載 使用。不過要注意的是,DB2 Express-C 有 2-WAY CPU 和 4GB RAM 的限制。關於不同版本的比較,請參閱 DB2 UDB 分佈式平臺的 比較表 來獲得版本比較。
主題
本文包括以下內容:
- 安裝
- 系統結構
- 可執行文件
- 數據庫表的類型
- 數據庫配置
- 圖形用戶界面(GUI)
- 命令行處理程序(CLP)
- SQL 比較
- 授權和權限
- 鎖定機制
- PHP 開發支持
- LOB 和視頻/音頻管理
- 數據類型
- 備份和恢復
下面我們來詳細說明各個主題。
安裝
首先來看看 MySQL 和 DB2 Universal Database Express 的安裝步驟。兩者的安裝過程都很簡單。
MySQL 安裝
與 DB2 Express 相比,安裝 MySQL 服務器的步驟略多一些(安裝代碼後還需要配置)。不過,兩種數據庫服務器都很容易安裝。MySQL 和 DB2 Express 都允許在安裝後使用 GUI 管理工具配置數據庫。
關於 MySQL 安裝程序的一點說明 —— 包含內容
對於 MySQL 5.0.18 Windows® 安裝程序,服務器安裝沒有包含 GUI 管理程序或查詢瀏覽器。安裝 MySQL 服務器後,機器上將包括:
- MySQL Command Line Client
- MySQL Manual
- MySQL Server Instance Configuration Wizard
如下面的 圖 1 所示:
圖 1. MySQL 安裝內容
要使用 GUI Administrator 和 Query Browser,則必須單獨下載安裝程序。要注意的是,不同平臺需要下載不同的安裝程序。而 DB2 Express 一次就安裝了所有必需的管理工具和設施,無需另外下載。
DB2 Universal Database 安裝
DB2 Universal Database Express 安裝非常簡單,參照下列步驟即可。
-
在歡迎屏幕上單擊 Install Product。
圖 2. 歡迎屏幕
-
單擊 Next。
圖 3. 選擇要安裝的產品
-
單擊 Next。
圖 4. 安裝嚮導
-
接受許可協議,然後單擊 Next。
圖 5. 接受許可協議
-
作爲例子,我選擇了 Typical。您還可以選擇 Custom 或 Compact。然後單擊 Next。
圖 6. 安裝選項 —— Typical、Compact 和 Custom
-
需要安裝的驅動器和目錄。可以保留默認值。
圖 7. 安裝目錄
-
輸入 db2admin 口令。db2admin ID 是爲 DB2 服務器管理創建的默認用戶。
圖 8. 用戶信息
-
單擊 Next。注意,在這裏可以配置協議和啓動選項。
圖 9. 配置實例
-
單擊 Next開始安裝。
圖 10. 開始安裝
-
單擊 Next。注意,在這裏可以配置協議和啓動選項。
圖 11. 完成安裝
完成安裝後,DB2 Express 的安裝佈局如下表所示(概括性的)。默認的 DB2 Express 安裝目錄是 C:\Program
Files\IBM\SQLLIB
。下表只是 DB2 Express 在 Windows 平臺上的佈局,Linux® 和 UNIX® 具有不同的路徑設置。
目錄名 | 內容 |
---|---|
/adsm | 包括用於口令加密的 dsmapipw.exe |
/BIN | 包含啓動、停止和管理數據庫所需的所有二進制文件 |
/bnd | 包含所有的綁定包 |
/conv | 包含代碼頁的轉換表 |
/DB2 | DB2 實例相關文件,比如,其中包括 db2 日誌文件 db2diag.log |
/DB2DAS00 | 包含 DB2 Admin Server- (DAS) 相關文件,如 dump 目錄中的 db2dasdiag.log。如果有多個 DAS,該目錄名將帶有數字,如 DB2DAS01 等。通常一個 DAS 就足夠用了 |
/java | 包含 JDBC™ 驅動程序 |
/samples | 包含大量實例代碼 |
/TOOLS | 包含 DB2 工具的多數 JAR 文件 |
/tutorials | 包含各種教程 |
系統結構
本文中將討論兩種系統結構:
- 內存結構
- 容器
首先來看看 DB2 Express 主要內存佈局的基本結構。關於內存管理的詳細說明,請參閱 developerWorks 文章 “The DB2 UDB memory model: How DB2 uses memory”(鏈接請參見 參考資料 部分)。
內存結構
圖 12. DB2 Express 內存結構
各部分的功能如下:
- Package Cache —— 用於存儲靜態和動態 SQL 語句的內存
- Buffer Pool —— 用於在寫入磁盤之前暫存數據的內存
- Log Buffer —— 在日誌寫入磁盤前存儲所有數據庫更改的內存
容器
根據使用的表類型不同,MySQL 可以使用單個文件、多個文件或者表空間來存儲數據。在這一節的最後,表 2 總結了 MySQL 和 DB2 Express 使用的容器。
圖 13. MySQL 容器
與 MySQL 不同,DB2 Express 總是存儲在表空間中。表空間是文件系統中的物理容器的邏輯表示。下面是表空間的一些特點:
-
一個數據庫至少要有一個表空間。默認情況下,標準 DB2 Express 安裝將創建三個表空間:
- Syscatspace —— 存儲系統目錄信息
- Tempspace1 —— 存儲系統臨時表。臨時表空間可以是系統定義的,也可以是用戶定義的。最好從系統臨時表空間創建用戶臨時表空間
- Userspace1 —— 存儲系統臨時表。臨時表空間可以是系統定義的,也可以是用戶定義的。最好從系統臨時表空間創建用戶臨時表空間
物理文件系統中的 DB2 Express 容器佈局如下。
C:\DB2\
是數據庫管理的默認數據庫路徑。也可以使用命令list active databases
找到數據庫路徑。DB2 數據庫結構是按以下這種方式安排的,其中每一層分別表示:圖 14. DB2 Express 容器佈局
- Drive/Directory —— CREATE DATABASE 命令中指定的驅動器或目錄
- DB2 Instance Name —— DB2 Instance 所有者的名字
- NODE0000 —— 數據庫分區號,0 表示沒有分區的數據庫
- SQL00001 —— 數據庫 ID,從 1 開始編號
- SQLOGDIR —— 數據庫的默認日誌目錄
- SQLT0000.0 —— 目錄表空間,SYSCATSPACE
- SQLT0001.0 —— 臨時表空間,TEMPSPACE1
- SQLT0002.0 —— 用戶表空間,USERSPACE1
管理員可以隨時創建更多的表空間,例如使用 清單 1 和 清單 2 中所示命令。(關於完整的 創建表空間的語法,請訪問 Information Center。)
清單 1. 在 DB2 Express 中創建系統表空間
Create System Temporary Tablespace systemp1_space managed by system using ('c:\systemp1_space','d:\systemp1_space')
清單 2. 在 DB2 Express 中創建用戶表空間
Create User Temporary Tablespace usertemp1_space managed by database using (file 'c:\userdata1\usertemp1_space' 10000, file 'd:\userdata2\usertemp1_space' 20000)
- 可以將表分解到不同的表空間中。
- 視圖、觸發器和存儲過程也可以保存在表空間中。
- 管理員可以根據需要創建任意多個表空間和任意多個容器。支持自動擴展特性。
- 表空間可以是系統管理的(SMS),也可以是數據庫管理的(DMS)。
DB2 數據庫管理員經常要決定容器是由系統管理,還是由數據庫管理。這種決策由幾方面因素決定,如可管理性、業務需求(如數據庫的規模和增長速度)和性能問題。通常 SMS 更適合較小的環境,需要的時候,系統可以提供更多的空間。對於更繁瑣龐大的環境,最好使用 DMS,因爲管理員可通過自動擴展特性來分配空間。不過在一個數據庫中結合使用兩種方法的例子也不少見,比如把目錄和臨時表放在 SMS 中,而索引和數據則放在 DMS 中。
表 2 MySQL 和 DB2 Express 容器的差別。
數據庫 | 表類型 | 說明 |
---|---|---|
MySQL | MyISAM | 索引文件用 .MYI,數據文件用 .MYD。索引和數據分別使用一個文件。 |
MySQL | InnonDB | 在路徑參數 innodb_data_file_path 指定的表空間中存儲數據。默認情況下該值爲 ibdata1:10M:autoextend。可使用多個數據文件。 |
MySQL | Merge | .MRG 文件包含應該只作爲一個表使用的表的名稱,.FRM 包含表的定義。使用多個數據文件。 |
DB2 Express | 所有類型 |
存儲在可跨越多個磁盤的表空間中。有兩種類型的容器:
要確定使用哪一種表空間,SMS 還是 DMS,請閱讀 DB2 Information Center 上的 SMS 與DMS 的比較。 |
可執行文件
首先看一看 MySQL 中主要的可執行文件和 DB2 Express 中的對應文件。然後重點介紹後者特有的可執行文件。本文主要討論 Windows 操作系統上的可執行文件。這兩種數據庫在 Linux 和 UNIX 上的可執行文件可能不一樣。
MySQL 的可執行文件名 | DB2 Express 的可執行文件名 | 說明 |
---|---|---|
MySQLInstanceConfig.exe | DB2 Control Center | MySQLInstanceConfig 用於配置實例。DB2 使用 Control Center 配置實例。請參閱本文中的 數據庫配置 一節。 |
myisamchk.exe | 檢查 MyISAM 表的完整性 |
DB2 使用 Control Center 完成同樣的檢查。對於索引可使用 Index 窗口中的 Check Index,或者使用 Tablspace 窗口中的 Check Index。對於表,可以使用CHECK 約束來確保完整性。SET
INTEGRITY 也用於表的完整性。比如通過對錶執行 Control Center 操作可以設置表的完整性。
db2dart 工具可用於檢查數據庫的結構完整性。與 db2dart 類似的是 inspect。檢查備份鏡像的完整性使用 db2ckbkp 命令。要檢查整個數據庫的健康狀況,可使用 Health Center GUI。 |
myisampack.exe | 壓縮 MyISAM 表 | 在創建表的語句中使用 VALUE COMPRESSION ,可以在列或表級別上使用節省空間的行格式來減少空間佔用。需要使用 Backup & Restore 數據庫 API 來提供壓縮,從而減少空間。 |
mysql.exe | MySQL 的 Windows 客戶機 | DB2 Runtime Client —— 一種單獨的產品,可訪問遠程 DB2 數據庫單獨安裝。 |
mysqladmin.exe |
MySQL Admin 客戶機 —— 使用該命令可以執行的管理任務包括:
|
DB2 命令提示符基本上可用於客戶機和管理任務。要訪問 DB2 命令提示符,可切換到 All Programs -> IBM DB2 -> Command Line Tools。 |
mysqlbinlog.exe |
Mysqlbinlog 至少有三種用途:
|
DB2 Express 支持聯機日誌和存檔日誌。出於 MySQL 相同的目的,所有事務都被記錄下來。DB2 Express 支持單個事務的無限多個活動日誌,所以長期事務永遠不會失敗(只要物理磁盤空間足夠)。支持的最大日誌空間爲 256 GB。
此外,默認情況下 DB2 把錯誤記錄到 db2diag.log 中。可使用工具 db2diag 分析這個日誌文件。根據嚴重程度,錯誤可分爲以下級別:
|
mysqlcheck.exe |
檢查數據庫是否健康,比如檢查、修復、分析或優化表。比如mysqlcheck
-u root -p awt |
DB2 沒有直接匹配的程序檢查表錯誤。所有的表錯誤都被寫入 db2diag.log 文件,用時間戳指向轉儲記錄。這個轉儲文件不是爲膽小的人準備的,它們是供 DB2 支持代表使用的。不過可以對錶執行一些操作,比如:
|
mysqld.exe | 運行 MySQL 服務器 —— 有很多選項(若想了解更多信息,請輸入mysqld --help --verbose) |
可使用 db2start 啓動 DB2 Express 數據庫實例。也可通過將 db2instance 環境參數設置爲需要啓動的實例來啓動多個實例。停止實例使用 db2stop。
注意,啓動和停止 DB2 實例需要 SYSADM、SYSCTRL 或 SYSMAINT 權限。 |
mysqldump.exe | 該工具導出表、表中的某些行、整個數據庫或者一組數據庫 |
DB2 Export —— DB2 Express 支持導出四種格式的表或表中的某些行。受支持的四種文件格式爲:
導出操作很簡單,比如要從 Employee 表導出數據:export to employee.del of del messages emp.log select * from allanwtham.employee。 |
mysqlimport.exe | 該工具用於在純文本文件中導入數據 | DB2 Import —— 支持與 DB2 Export 相同的四種格式 |
NA | Load | DB2 Load —— 向數據庫中高速加載數據 |
NA | Audit | db2audit —— 用於檢查未知的或者意料之外的數據訪問的審計設施 |
NA | Explain | db2expln —— 解釋靜態 SQL 語句選擇的訪問計劃 |
NA | Configuration Assistant | db2ca —— 配置遠程訪問 |
NA | db2admin | DB2 Admin Server (DAS) —— 有關的管理任務 |
數據庫表類型
MySQL 對不同的用途使用不同的表。可以在一個數據庫中混合使用這些不同的表。具體使用哪種表取決於用戶的需要。表類型如下(最常見的是 MyISAM 和 InnoDB):
-
SAM
SAM 是較早期的表類型。這種表類型主要用於支持遺留數據庫。它已經被 MyISAM 表類型代替,並且計劃不再支持這種表類型。
-
MyISAM
MyISAM 是默認的表類型。要在 MyISAM 中創建表,可以保留默認值或者用 ENGINE 關鍵字明確指定,比如:
清單 3. 使用 MyISAM 創建表
Create table employee ( empno int not null auto_increment primary key, firstnme varchar(30), lastname varchar(30), deptno int ) engine=MYISAM;
MyISAM 表類型是非事務安全的表類型。對於高度併發的多重讀/寫,不應該選擇這種表類型。MyISAM 不能保證原子性、一致性、隔離和持久性 (ACID)。不過,MyISAM 允許進行壓縮和全文搜索。對於 MyISAM 類型,索引存儲在 .MYI (MyIndex) 文件中,數據本身存儲在 MYD(MyData) 文件中。MyISAM 表類型沒有表空間的概念 —— 所有的數據/索引都存儲在文件中。檢查/修復 MyISAM 使用工具 myisamchk,壓縮表使用 myisampack。MyISAM 中只有一種鎖定機制,即表級鎖定,因此不適用於訪問比較頻繁的環境。
-
InnoDB
越來越多的企業需要使用這種表類型。InnoDB 是一種兼容 ACID 的表類型。InnoDB 表類型在表空間中存儲數據和索引,允許使用不同文件系統中的多個表。最初由 InnoBase Oy 開發的這種表類型適合於快速、高性能、事務安全的環境。InnoDB 使用更小粒度的鎖定機制 —— 行級別的鎖定。詳情請參閱 鎖定機制 一節。
創建 InnoDB 類型的表要在 ENGINE 表創建語句選項中指定關鍵字 Innodb,請參閱下面的例子。
ENGINE
Create table employee ( empno int not null auto_increment primary key, firstnme varchar(30), lastname varchar(30), deptno int ) engine=InnoDB;
-
BerkeleyDB (BDB)
這種表類型的用途與 InnoDB 相同。由 Sleepycat 開發的這種表類型存儲在 B 樹中,它支持頁級鎖定。
-
Merge
Merge 類型是 MyISAM 的衍生物,用途是繞開單個巨大文件問題。它允許位於不同磁盤上的多個 MyISAM 文件根據創建表語句中的 MERGE規範來執行查詢。要插入合併表,則必須將 INSERT_METHOD 選項指定爲 first 或 last。默認情況下只能執行 Select、Update 和 Delete。
-
Heap
將整個表保存在內存中。使用這種類型速度很快,但是一旦崩潰就會造成數據丟失。最好暫時性地使用這種類型。
DB2 Express 將數據存儲在容器中,無論該容器是系統管理的容器,還是數據庫管理的容器。默認情況下,在 DB2 Express 中創建的表與 ACID 兼容。沒有用於創建與 ACID 不兼容的表的選項。創建表的語法非常類似。
比如要創建表 employee:
清單 5. 在 DB2 Express 中創建表
Create sequence sq1; Create table employee1 (empno int not null default next_value of sq1, firstnme varchar(30), lastname varchar(30), deptno int, primary key (empno))
DB2 Express 支持四種表類型,即:
-
臨時表 ——
也稱爲公用表表示,這種表是 SQL 語句執行期間存在的臨時表。可以根據需要引用任意多次,不需要重新計算。可使用這種表類型代替視圖。
-
類型化的表 ——
使用結構化類型定義的表。結構化類型是包含一系列屬性的數據類型。
-
概括表 ——
定義從查詢中派生的表。主要在數據倉庫環境中使用。
-
物化查詢表 ——
定義從多表查詢中派生的表。主要用於數據倉庫環境。
除了表以外,還有其他類型的數據庫對象,如索引、函數、觸發器和存儲過程等,這些對象共同組成了實用的關係數據庫。表 4 比較了兩種數據庫的這些對象:
對象名 | MySQL 中的可用對象 | DB2 Express 中的可用對象 | 說明 |
---|---|---|---|
用戶定義表 | × | √ |
兩種類型的用戶定義表
|
用戶定義函數 | √ | √ | 兩者都支持標量和列用戶定義函數 |
用戶定義數據類型 | × | √ |
三種用戶定義的數據類型 ——
|
存儲過程 | √ | √ | DB2 Express 支持 SQL 和 Java 存儲過程 |
視圖 | √ | √ | MySQL 從版本 5 開始支持視圖 |
可更新視圖 | √ | √ | DB2 Express 還支持類型化視圖 |
觸發器 | √ | √ | MySQL 從版本 5 開始支持觸發器 |
遞歸 SQL | × | √ | 與遞歸函數類似,DB2 Express 的遞歸 SQL 可遞歸地使用結果集來得到最終結果 |
序列 | × | √ | MySQL 本身不支持序列,但是可以 模擬一個序列 |
數據庫配置
MySQL 中需要在配置文件 my.cnf 的 [mysqld] 節指定配置參數。Windows 系統上提供了多個配置樣板,如 my-medium.ini,還提供了其他 my-xxx.ini 文件。MySQL 在 Windows 上提供了示例配置文件 *.ini。下面給出了 my-medium.ini 中的一節。注意,不需要取消所選相關表類型的註釋。
清單 6. MySQL 示例配置文件
... # The MySQL server [mysqld] port = 3306 socket = /tmp/mysql.sock skip-locking key_buffer = 16M max_allowed_packet = 1 M table_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M ... # Uncomment the following if you are using InnoDB tables #innodb_data_home_dir = /usr/local/var/ #innodb_data_file_path = ibdata1:10M:autoextend #innodb_log_group_home_dir = /usr/local/var/ #innodb_log_arch_dir = /usr/local/var/ # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 16M #innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 5M #innodb_log_buffer_size = 8M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50
對於 DB2 Express,可使用 Control Cenrter 或者命令行處理程序(CLP)獲取和設置數據庫或者實例的配置文件。要使用 Control Center 配置數據庫,請右擊選中的數據庫並選擇 Configure Parameters。
圖 15. 右擊配置參數
可以動態改變這些值(一些參數只有在數據庫管理程序停止並重新啓動後才生效)。配置參數可分爲以下幾類:
- 應用程序
- 環境
- 日誌
- 維護
- 性能
- 恢復
請參閱 DB2 Information Center 中完整的 參數列表。
圖 16. DB2 Express 數據庫配置參數
也可用 CLP 查詢和設置配置參數。更新數據庫配置的語法如下:
清單 7. 更新 db 配置的語法
>>-UPDATE--+-DATABASE-+--+-CONFIGURATION-+----------------------> '-DB-------' +-CONFIG--------+ '-CFG-----------' .----------------------. V | >--+---------------------+--USING----config-keyword value-+-----> '-FOR--database-alias-' .-IMMEDIATE-. >--+-----------+----------------------------------------------->< '-DEFERRED--'
比方說,如果要查詢管理服務器參數,可使用 db2
get admin cfg
命令。要獲得數據庫 SAMPLE
的
db 配置,則可以使用 db2
get db cfg for SAMPLE
命令。
因爲 IBM 也在致力於 DB2 UDB 產品的自動化研究,DB2 UDB Express 通過 DB2 Control Center 提供了自動化特性。使用嚮導(如 Create Database with Automation、Design Advisor、Configuration Advisor、Configure Automatic Maintenance 等)是自動化常見管理任務所採用的步驟,這些管理任務包括備份、配置和數據庫對象自動維護等。比如,管理員可使用 Configuration Advisor 配置數據庫。這一特性就避免了管理員費盡心思地去尋找最適合數據庫的配置參數。Configuration Advisor 能夠建議最適用的配置參數。爲了獲得最優的數據庫性能,建議管理員儘量使用該特性。
圖形用戶界面 (GUI)
GUI 管理不可避免將成爲很多管理員的首選。GUI 不僅能夠快捷方便地執行某些任務,而且可以在忘掉了命令語法(或者如果根本沒有學習過這種命令)的時候提供幫助。通常,易用性是推動用戶使用 GUI 管理工具的主要因素。
MySQL 提供的兩種主要 GUI 是 MySQL Administration 和 Query Browser。那些原來管理 MySQL 的管理員並不是非常喜歡 GUI 管理。命令行通常仍然是他們的最愛。目前最新的 MySQL Administrator 是 1.1.6 版。圖 17 中顯示了 MySQL 的登陸頁面:
圖 17. MySQL Admin —— 登錄
登錄後就可以在 GUI Administrator 中執行下列任務(只是一部分):
- 服務控制 —— 啓動和停止服務
- 啓動參數 —— myISAM 和 InnoDB 的參數、緩衝區和緩存、日誌文件、安全和網絡設置
- User Admin —— 爲用戶和組分配權限,口令管理
- Health —— 內存和連接的健康性檢查
- 備份和恢復
圖 18. MySQL Admin —— 任務
也可使用 WAMP(目前爲 1.6.0 版)提供的 phpMyAdmin。
關於 DB2 Express GUI,有很多方面值得一說。所有的管理任務都可使用該 GUI 完成,其中包括一般管理、健康檢查和設置等,如 圖 19 所示:
圖 19. DB2 Express GUI 管理 —— 不同的方面
在所有的管理 GUI 工具中,您可能會發現 DB2 Control Center 是最常用的。可以通過單擊 Windows 桌面上右下角托盤上的綠色硬盤啓動 DB2 Control Center:
圖 20. DB2 Express GUI Administration - Control Center
DB2 Express Control Center 是與上下文有關的。右擊一個項目會根據上下文產生不同的下拉菜單。比如,右擊某個數據庫會看到下列任務選項:
圖 21. DB2 Express Control Center —— 與數據庫有關的任務列表
DB2 Control Center 的一個優點是可使用 SHOW COMMAND 按鈕查看對該任務等效的命令。有時候可以選擇將命令保存到腳本中,讓它在指定的時候運行。事實上,很多有用的特性這裏沒有提到,其中包括 Design Advisor 和 Configuration Advisor。這些特性將在後面的文章中介紹。
命令行處理程序
MySQL 提供了命令行控制檯 (mysql.exe)。可以使用這個控制檯執行管理任務。
圖 22. MySQL 命令提示符
DB2 Express 提供了與 MySQL 類似的控制檯。啓動該控制檯的一種方法是 All Programs -> IBM DB2 -> Command line tools -> Command Windows。
所有管理任務都可以在這個控制檯中執行。
圖 23. DB2 Express 命令提示符
SQL 比較
必須承認,並非所有的 SQL 語句都能夠真正從一個數據庫移植到另一個數據庫。對於將 SQL 從 MySQL 遷移到 DB2 Express 而言也是如此。本文將通過下面幾個方面說明 SQL 語句的差別。這些只是爲了緩解兩種系統之間的區別、避免手足無措而進行的小小嚐試。此外要注意的是,並不是 DB2 Express 支持的所有數據庫特性目前都獲得了 MySQL 的支持。比如,外鍵約束能力只能在爲 MySQL 5.1 提供以下支持的情況下用於 InnoDN,如下所示:
- 適用於除 InnoDB 之外的所有表類型的外鍵
- MyISAM 表的熱備份
- 重命名數據庫
- 列級約束
我們從以下角度看一看兩者的異同:
-
Select 語句
標準 SQL 支持 DISTINCT、GROUP BY、ORDER BY 和 HAVING 這些關鍵字。MySQL 和 DB2 Express 都在這一點上提供了很好的支持。但是爲了限制返回的結果集,MySQL 使用了關鍵字 LIMIT,而 DB2 Express 使用 FETCH FIRST n ROWS 來限制返回的結果集。如 圖 24 中顯示的示例 fetch:
圖 24. 在 DB2 Express 中使用 Fetch n Rows
MySQL 和 DB2 Express 都支持在 SQL 語句中使用 CASE 表達式進行條件檢查。例如,可以指定符合特定條件的查詢結果。下面的示例將根據收入對僱員進行分類:
清單 7. Set Transaction 的語法
Select empno, firstnme, lastname, case when integer (salary) > 40000 then 'High' when integer (salary) > 30000 and integer (salary) < 40000 then 'Medium' else 'Low' end from employee
此外,DB2 Express 還支持嵌套表表達式。嵌套表可以看成是在一個 SQL 語句中定義和使用的局部臨時表。
MySQL 中的單值子查詢 (single value subquery) 等同於 DB2 Express 中的標量全選擇 (scalar full select)。
-
連接 —— 下表總結了 MySQL 和 DB2 Express 中的連接特性:
表 5. 連接類型 連接類型 MySQL DB2 Express 說明 內連接 √ √ 內連接表示存在於連接表中的行。傳統上兩者都對這種連接使用逗號。它是指定表的笛卡爾積。但在 MySQL 中也稱爲叉積。DB2 Express 不使用關鍵字 cross。 交叉連接 √ √ 與內連接相同。 左[外]連接 √ √ 左連接或左外連接表示匹配值和只出現在左表中的的值。比如在 MySQL 中,如果需要從 tableA 中選擇所有不在 tableB 中的行,則使用的 SQL 語句是: select tableA.* from tableA left join tableB on tableA.id=tableB.id where tableB.id is null。 右[外]連接 √ √ 與左連接正好相反。表示連接表中出現的匹配值和那些僅在右表中出現的匹配值。 全[外]連接 × √ 全外連接表示連接表中出現的匹配值和那些僅在左表或右表中的某一個表中出現的匹配值。其使用具有惟一性。 直接連接 √ × MySQL 中的 Straight join 等同於 join,只不過左表總是先於右表讀取。雖然 DB2 Express 中沒有使用這個關鍵字,但在 DB2 Express 可以完成同樣的目標。 自然連接 √ × MySQL 中的自然連接 相當於內連接。雖然 DB2 Express 中沒有使用這個關鍵字,但在 DB2 Express 可以完成同樣的目標。 可使用 GUI SQL Assist 指定連接類型。下面的例子說明如何使用 SQL Assist 設置連接選項。
圖 25. 使用 SQL Assist 建立 DB2 連接
授權和權限
MySQL 中有兩種級別的權限 —— 管理和用戶。所有權限都可分別使用 GRANT 和 REVOKE 語句授予和收回。可以授予用戶 create、select、update、delete、insert、execute、index 等權限,也可授予 alter、drop 和 shutdown 等系統權限。(請參閱 MySQL 提供的權限。)根用戶在默認情況下具有下列權限:
圖 26. MySQL 中的權限
DB2 Express 同時提供了授權(authorization)和權限(privileges)。授權是一組預定義的更高的管理權限,可以授予執行一般任務的用戶或用戶組,比如連接數據庫、創建、撤銷、備份和恢復數據庫,而權限則包括用戶權限和系統權限,通常用於對象操作。新安裝的 DB2 Express 提供下列授權級別:
- SYSADM - System Administration
- SYSCONTROl - System Control
- SYSMAINT - System Maintenance
- DBADM - Database Administrator
雖然 SYSADM 具有最高的權限,但用戶執行備份和恢復這類任務通常只需要 SYSMAINT 授權。因此,充分了解授權對爲用戶分配適當的權限非常重要。瞭解發出 get
authorizations
命令需要什麼權限,該命令用於查詢系統編目表 SYSCAT.DBAUTH。圖
27 顯示了使用 get
authorizations
命令的結果:
圖 27. DB2 Express —— 當前用戶的授權
DB2 Express 權限和 MySQL 非常類似。權限(包括用戶和系統權限)可使用 GRANT 或 REVOKE 命令授予和收回。有三種類型的權限:
- 控制權限 —— 該權限通常保留給對象的創建者。這是所有者權限。比如,如果用戶 A 創建了表 B,用戶 A 就被自動授予表 B 的控制 權限。
- 一般權限 —— 該權限允許執行特定的任務。可通過明確或暗中授予該權限來對數據庫對象執行 SELECT、UPDATE、DELETE 等任務。
- 暗含權限 —— 在將更高的權限授予用戶時授予該權限。比如當用戶執行一個包時,雖然沒有明確授權,但爲了使包能夠成功執行,應立即自動授予隱含權限。
圖 28 顯示了一些可授予用戶的權限。
圖 28. DB2 Express —— 使用 Control Center 管理權限
注意,也可用 CLP 執行 GRANT 和 REVOKE 語句。
鎖定機制
MySQL InnoDB 提供了事務安全的語句,支持標準 SQL-1992 中所述的四種隔離級別。爲了達到事務安全,MySQL 實現了 ACID 的要求。默認情況下,MySQL 對所有事務使用 Repeatable Read 隔離級別。但可使用 Set
Transaction
語句更改後續會話的隔離級別。也可在 SQL 語句中使用 SESSION 或 GLOBAL。SESSION 表示下一個鏈接將使用特定的隔離設置,而 GLOBAL 表示以後的所有連接都是某個隔離設置。Set
Transaction
語法如 清單
8 中所示:
清單 8. Set Transaction 的語法
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
針對受支持的四種隔離級別,表 6 列出了出現幻像讀、髒讀或不可重複讀的可能性(從高到低)。
- √ —— 會發生
- × —— 不會發生
隔離級別 | 幻像讀 | 不可重複讀 | 髒讀 |
---|---|---|---|
可序列化 | × | × | × |
可重複讀 | √ | × | × |
讀取提交的結果 | √ | √ | × |
讀取未提交的結果 | √ | √ | √ |
DB2 Express 提供了類似的隔離級別。按照從強到弱的次序分,DB2 Express 支持的四種隔離級別依次爲:
- 可重複讀 —— RR
- 讀穩定 —— RS
- 遊標可靠性 —— CS
- 未提交讀 —— UR
每種隔離級別都提供了特定的事務安全,隔離級別的選擇是根據更嚴格的隔離級別對性能的影響進行的一種權衡。比如,讀取只讀的查找表不需要可重複讀級別,未提交讀級別就足夠了。嵌入式 SQL 語句的默認隔離級別爲遊標可靠性 (CS)。更改隔離級別的方法有兩種(視情況而定):
-
在標準 DML 語句中可使用關鍵字 With 來更改級別。比如
select * from employee with UR
。 -
如果使用命令行,那麼可以輸入
change isolation level
命令。 - 如果使用 DB2 調用級接口,那麼可在 db2cli.ini 文件中指定隔離級別。
表 7 列出了 DB2 的隔離級別和讀特徵,按照從強到弱的順序依次爲:
- √ —— 會發生
- × —— 不會發生
隔離級別 | 幻像讀 | 不可重複讀 | 髒讀 |
---|---|---|---|
可重複讀(RR) | × | × | × |
讀穩定(RS) | √ | × | × |
遊標可靠性(CS) | √ | √ | × |
未提交讀(UR) | √ | √ | √ |
DB2 Express 支持表空間和表的顯式鎖定。如果 DB2 發現鎖定某一個表比鎖定該表中多個行的代價要小,那麼 DB2 Express 會提供鎖擴展。Locklist 和 Maxlocks 這些參數會影響鎖擴展的方式。
PHP 開發支持
隨着 PHP 在 Web 開發平臺上的應用越來越廣泛,開發人員常常希望獲得能夠快速安裝且功能強大的開發環境,以避免爭議。MySQL 在分發包中提供了一種快速安裝工具 WAMP(目前版本爲 1.6.1)。IBM 和 Zend Core 共同提供了類似的 PHP 開發組合。
Zend Core for IBM 是一種無縫集成、開箱即用、易於安裝並且支持 PHP 的開發和生產環境。該產品包括與 IBM DB2 Universal Database 和 IBM Cloudscape® 的緊密集成、對 XML 和 Web 服務的本機支持、支持日漸廣泛被採用的 Service Oriented Architectures (SOA)。Zend Core for IBM 爲數據庫驅動的應用程序提供了快速開發和部署的基礎。通過提供一致的 API,它提供了從易於使用的輕量級 Cloudscape 數據庫到戰略數據庫 DB2 的升級路徑。有關的更多信息,請參閱 Zend Core for IBM 頁面。
LOB、視頻/音頻管理
雖然目前數據管理領域中呼聲最高的是企業內容管理(ECM)領域,但 MySQL 在很大程度上是一種結構化數據管理產品。ECM 用戶必須設法找到支持 MySQL 作爲後端系統的 ECM 處理程序。MySQL 使用 BLOB 數據類型系列處理非結構化數據。
另一方面,IBM 提供了 DB2 Content Manager 作爲結構化和非結構化數據的內容資料庫。爲了滿足目前的隨需應變業務要求 —— 80% 的數據都是非結構化形式的,人們認爲企業內容管理(ECM)在企業環境中是不可或缺的。如果對企業內容¹管理(ECM)有正確的理解,那麼您可能認爲從頭建立一個企業內容管理系統很簡單。我們來看看一家典型企業中的各種數字內容、遇到的困難以及 IBM DB2 Content Manager 提供的豐富功能如何滿足這些需要。
內容可能指:
- 發票、結算表、報告
- 傳真和掃描的書面內容
- SCM、CRM 和 ERP 數據
- 電子郵件和桌面文檔
- 音頻、視頻和圖片
- Web 內容
客戶經常面臨的問題是數據使用不同的格式,存在於不同的位置。沒有集中的資料庫,用戶就無法有效地共享數據,更不用說通過協作確保暢通的業務連續性了。無法使用業務過程工作流,用戶就很難創建或者搜索 Web 內容。這是多數企業都會遇到的困境。
構建時要考慮可伸縮性,DB2 Content Manager 採用了一個三層的體系結構,其中包括 Library Server 中的幾種索引和 Resource Manager 中的對象存儲。靈活的用戶授權許可允許爲適應業務的需要部署任意多個 Resource Managers。比方說,紐約的總部可使用兩個 Resource Manager,而西雅圖、亞特蘭大和範庫弗各有一個 Resource Manager。爲降低網絡通信量,可以提供局域網緩衝。IBM DB2 Content Manager 支持層次化存儲管理,可以按照適當的週期定期將對象遷移到外部設備上。比方說,可以在 DASD 上保存六個月後將對象遷移到外部磁盤上,保存三年後再遷移到磁帶上保存七年。
IBM DB2 Content Manager 還提供了身份驗證、權限和訪問控制,保證用戶和用戶組操作的安全。從文檔級動作,創建、讀取、更新、刪除、打印的細粒度權限和註釋修改,到 Resource Manager 集合訪問控制,IBM DB2 Content Manager 都可以保證正確實現訪問和使用。用戶可打開事件日誌來進一步審計內容系統。
從內容的創建到管理和分發,IBM 生命期管理主要依賴於 IBM DB2 Content Manager 提供的豐富特性。下面是 IBM DB2 Content Manager 的一些特性:
- 即時掃描
- 成批裝載不同格式的內容
- 通過 Windows 客戶機、web 客戶機和 portlet 提供了本機內容查看器
- 檢入/檢出
- 過程工作流(可用 GUI 工作流創建程序建立)
- 版本化
- 註釋
- LDAP 集成
- 事件日誌(用戶活動和管理活動)
- 與 SAP & Siebel 的集成
- 與記錄管理(如 IBM DB2 Record Management)的集成,以確保符合規章
- 與客戶現有業務線的集成
- 包括在應用程序內部或者其他 Web 服務中使用的 Web 服務接口
- XML 模式映射
如果進行內部內容系統開發,IBM DB2 Express 會爲此提供 LOB/CLOB 數據類型。
數據類型
MySQL 和 DB2 Express 具有類似的數據類型。要注意的是,DB2 Expess 同時支持內建數據類型和用戶定義數據類型(前面已經提到)。關於 DB2 Express 數據類型如何組織的概述,請參見 圖 29:
圖 29. DB2 Express —— 數據類型層次結構
在進行了上面的查看之後,現在讓我們將 MySQL 數據類型映射到 DB2 Express 中的等效類型(或者最匹配的類型),然後比較以下三個主要種類。
- 數字
- 字符串
- 時間和日期
關於數據庫對象的異同,請參閱 表 8。
關於 DB2 SQL Limits 的完整說明,請參閱 Information Center。
備份和恢復
備份和恢復是在介質失效的情況下確保業務連續性的基本要求。MySQL 備份和恢復選項在很大程度上依賴於底層的表類型。比如 MyISAM 和 InnoDB 表類型都允許進行數據庫冷備份。不過從 MySQL 4.0 版開始,還以商業附件的形式提供了 InnoDB 熱備份(InnoDB 是 Oracle Corp. 的產品),但 MySQL 5.1 仍然不支持 MyISAM 的熱備份。
DB2 Express 從一開始就提供了冷備份和熱備份。所謂冷備份,就是當用戶處於離線狀態時,不訪問正在備份的數據庫。這就意味着,使用冷備份時,如果遇到介質失效的情況,上一次備份以後的數據將丟失。而熱備份允許事務繼續寫入日誌,無需關閉正在備份的數據庫。通過適當的規劃,熱備份可以確保介質失效的情況下不損失數據。24x7 環境需要這種備份。
DB2 Express 有兩種記錄法,即循環記錄法和存檔記錄法。循環記錄法(循環寫入,寫滿後覆蓋)可以進行冷備份,檔案記錄法(存檔已經提交的內容)支持熱備份。
選擇冷備份還是熱備份取決於在 db config 中設置的參數:
- LOGFILSIZ —— 日誌文件大小。總數爲 4KB(默認 250)
- LOGPRIMARY —— 主日誌個數(模認爲 3)
- LOGSECOND —— 主日誌填滿時可以分配的次級日誌個數。
- NEWLOGPATH —— 更改後續日誌文件存儲的位置。只在數據庫重新激活時生效。
- MIRRORLOGPATH —— 寫入日誌的後備路徑,以免單點失效。
- OVERFLOWLOGPATH —— 指定前滾操作中的日誌位置,以便在多個位置訪問日誌。
冷備份很簡單。首先關閉數據庫,然後發出備份命令,如 db2 backup database <db_name> to c:\backup。
熱備份同樣簡單。首先打開日誌保留參數,然後發出命令,如 db2 backup database online <db_name> to c:\backup。
冷備份和熱備份都可以通過在 DB2 Express Control Center 中點擊幾下鼠標來完成。另外,DB2 Express 還提供了增量備份和 delta 備份。
- 增量備份 —— 備份最近一次成功的完全備份以後的所有更改。
- Delta 備份 —— 備份上一次成功的完全備份、增量備份或 delta 備份以後的所有更改
關於備份和恢復問題,將在以後的文章進行更詳細的討論。
結束語
本文考察了 MySQL 和 DB2 Express 數據庫服務器的某些方面,並從安裝、系統結構(如內存和容器)、備份和恢復方法等方面進行了簡單的比較。前面已經提到,本文的目的是讓現在的 MySQL 數據庫管理員對 DB2 Express 有一般性的瞭解。