MySQL 與 PostgreSQL 以易用、強大、免費著稱,但 DB2 Express-C 同樣具備這些特質,更提供企業級的自管理、高可用、安全合規與 XML 原生支援。本文系統對比三大資料庫架構與特性差異,詳細說明數據類型映射規則,並提供基於 IBM 遷移工具的三步遷移法(安裝 → 工具遷移 DDL/數據 → 目標端微調),助您零成本升級至企業級資料庫平台。
| 維度 | MySQL | PostgreSQL | DB2 |
|---|---|---|---|
| 架構模型 | 執行緒模型 | 進程模型 | 進程模型 (UNIX) / 執行緒模型 (Windows) |
| 儲存引擎 | 可插拔 | 專用 | 專用 |
| 表空間 | InnoDB/NDB 支援 | 跨資料庫 | 屬單一資料庫 |
| Schema 支援 | 無真正 Schema (Database 即 Schema) | 完整支援 | 完整支援 |
| 大小寫敏感度 | Linux 區分大小寫 | Linux 區分大小寫 | 全平台不敏感 (內部大寫存儲) |
| 陣列欄位 | 不支援 | 支援 | 不支援 |
| 認證機制 | 資料庫級加密 | pg_hba.conf 靈活配置 | OS/PAM/Kerberos/LDAP/AD + 可插拔第三方 |
| 實例概念 | 類似 DB2 Database | 類似 Database Cluster | 管理多個 Database,可多實例共存 |
關鍵遷移啟示:
| 特性 | MySQL | PostgreSQL | DB2 |
|---|---|---|---|
| 緩衝池 | innodb_buffer_pool_size | shared_buffers | CREATE BUFFERPOOL,多緩衝池,頁面 4/8/16/32K |
| 備份恢復 | InnoDB WAL,全量/崩潰恢復 | WAL,全量/時間點/事務恢復 | WAL,全量/增量/增量/表空間級 線上/離線,時間點恢復 |
| JDBC 驅動 | Type 4 | Type 4 | Type 2 + Type 4 (Universal Driver 內建) |
| 分區表 | NDB 支援 | Range/List | Range/Hash/MDC 多維叢集 |
| 索引類型 | B-Tree | B-Tree/Hash/R-Tree/GiST | B-Tree/位圖 |
| 檢查約束 | 解析但不強制 | 完整支援 | 完整支援 |
| 存儲過程語言 | SQL/C++ | PL/pgSQL/SQL/C | SQL PL/C/Java/COBOL/REXX |
| 觸發器 | 行/語句級 | 行/語句級 | 行/語句/INSTEAD OF + SQL PL 複合語句,可呼叫 SP |
| XML 支援 | 有限 | 有限 | 原生 XML (pureXML),Viper/V9 首創混合型 |
| 並發隔離級別 | 4 級 (InnoDB) | Read Committed/Serializable | RR/RS/CS(預設)/UR,會話/語句/資料庫級可設 |
| MySQL | DB2 目標類型 | 備註 |
|---|---|---|
| BIT | CHAR(n) FOR BIT DATA | 需 UDF 輔助 |
| BOOLEAN/TINYINT(1) | SMALLINT 或 CHAR(1) | 加 CHECK 約束 |
| TINYBLOB | VARCHAR(255) FOR BIT DATA | <32K 用 VARCHAR 效率高 |
| BLOB | BLOB(64K) | <32K 考慮 VARCHAR FOR BIT DATA |
| MEDIUMBLOB | BLOB(16M) | 可用 NOT LOGGED 提效 |
| LONGBLOB | BLOB(2G) | 最大 2GB,LOGGED 限 1GB |
| CHAR/VARCHAR | CHAR/VARCHAR | DB2 CHAR 最大 254 |
| DATE/DATETIME/TIMESTAMP | DATE/TIMESTAMP | 可用 CURRENT TIMEZONE 轉換 |
| YEAR | SMALLINT | 加 CHECK 約束限制範圍 |
| DECIMAL(p,s) | DECIMAL(p,s) | p>31 改用 DOUBLE |
| FLOAT/DOUBLE/REAL | REAL/DOUBLE | |
| TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT | SMALLINT/SMALLINT/INTEGER/INTEGER/BIGINT | MEDIUMINT→INTEGER 加 CHECK |
| TEXT/MEDIUMTEXT/LONGTEXT | CLOB(64K)/CLOB(16M)/CLOB(2G) | 指定長度勿用 T/M/L 前綴 |
| ENUM/SET | VARCHAR + CHECK | |
| BINARY/VARBINARY | CHAR/VARCHAR FOR BIT DATA | 長度閾值 254/32K |
| PostgreSQL | DB2 目標類型 | 備註 |
|---|---|---|
| BIGSERIAL/SERIAL8 | BIGINT + IDENTITY | 模擬自增 |
| BIT/VARBIT | CHAR/VARCHAR FOR BIT DATA | 長度 ≤254/≤32672 |
| BOOLEAN | CHAR(1) 或 SMALLINT | 無原生 Boolean |
| BYTEA | BLOB | 32K-2GB |
| CHAR/VARCHAR/TEXT | CHAR/VARCHAR/CLOB | CHAR 最大 254,VARCHAR 需指定長度 |
| DATE/TIME/TIMESTAMP | DATE/TIME/TIMESTAMP | 忽略時區資訊 |
| DECIMAL/NUMERIC | DECIMAL | 精度>31 用 DOUBLE |
| FLOAT4/FLOAT8 | REAL/DOUBLE PRECISION | |
| SMALLINT/INTEGER/BIGINT | SMALLINT/INTEGER/BIGINT | |
| SERIAL/SERIAL4 | INTEGER + IDENTITY | |
| OID | INTEGER |
特殊遷移提醒:
db2admin,Linux db2inst1 + fenced userDB2,Linux db2inst1兩組件協作:
schema.table:SELECT * FROM ...),可手動刪減表或改寫查詢pg_hba.conf 允許遠程連接,啟動 pg_ctl -o -iCLASSPATH 包含 IBMExtract.jar + 兩套 JDBC 驅動# 1. 生成輸入檔
./geninput <dbname> # 產生 input/<dbname>.tables
# 2. 並行卸載數據並生成 DDL
./unload <dbname> # 產生 output/<dbname>/ 目錄
關鍵參數:NUM_THREADS=5、FETCHSIZE=100、COLSEP=~、GENDDL=true、UNLOAD=true
| 檔案/目錄 | 用途 |
|---|---|
| ama_data/ | 卸載數據檔 (供 LOAD 使用) |
| ama_dump/ | LOAD 拋錯數據 |
| ama_msg/ | LOAD 訊息日誌 |
| ama_db2tables.sql | 建表腳本 |
| ama_db2cons.sql | PK/UK/索引 (不含 CHECK 約束) |
| ama_db2fkeys.sql | 外鍵約束 |
| ama_db2load.sql | LOAD 腳本 (含統計資訊收集) |
| ama_db2.sh / .cmd | Linux/Windows 一鍵部署腳本 |
| ama_db2tabcount.sql | 行數驗證 |
| ama_db2tabstatus.sql | LOAD 後表狀態檢查 |
| ama_db2fkdrop.sql | 刪除所有 FK |
| ama_db2drop.sql | 刪除所有表 |
| ama_db2checkpending.sql | 解除 CHECK PENDING 狀態 |
| ama_db2runstats.sql | 重新收集統計資訊 |
CREATE DATABASE <dbname> AUTOMATIC STORAGE YES
根據工具輸出的最大行長度,預建 4K/8K/16K/32K 頁面表空間 (自動儲存 DMS);若有 LOB 需建 LARGE 表空間。建議至少建一個 32K + 一個 4K 表空間覆蓋所有情況。
db2 connect to <db>
db2 autoconfigure using mem_percent 85 workload_type simple num_stmts 20 tpm 3000 admin_priority performance is_populated yes num_local_apps 0 num_remote_apps 500 isolation cs bp_resizeable yes apply db and dbm
db2 connect reset
建議在 Control Center GUI 執行,直觀互動。
./ama_db2.sh <target_dbname>
腳本依序執行:建表 → PK/索引 → LOAD 數據 → FK → 行數驗證 → 表狀態檢查。
Control Center 配置自動備份、RUNSTATS、REORG,指定維護時間窗;Task Center 排程具體執行時刻。
數據導入後再次執行,依實際負載微調。
| 問題 | 解決方案 |
|---|---|
| 建表報錯 | 缺少對應頁面大小表空間,補建 8K/16K/32K 表空間 |
| Missing data map for ... | 從 JAR 提取 mapping.properties,補全類型映射,重打包 |
| FK 建立失敗 | 源庫數據不符合參照完整性,清洗源數據後重試 |
| 如何取得源碼? | 承諾回饋改進可聯繫作者獲取 |
本工具以極低記憶體佔用、多執行緒並行設計追求極致遷移速度。誠邀社群回饋 Bug 與改進,共建更強遷移利器。立即下載 DB2 Express-C,以零成本擁抱世界級企業資料庫!