Oracle Migration Workbench (OMWB) 是 Oracle 官方免費遷移工具,支援從 Access、SQL Server、MySQL、Sybase、DB2 等異構資料庫遷移至 Oracle。本文以 Access 2000 → Oracle 9.2.0.1.0 為例,記錄完整遷移流程、中文亂碼與字串截斷兩大難題的解決方案。
\Omwb\msaccess_exporteromwb2000.mde.xml 檔,含資料表欄位、關聯、視圖定義OMWB 預設生成 XML 編碼為 ISO-8859-1,不支援中文。必須修改兩處:
檔案:\Omwb\msAccess_exporter\schema.dtd
第一行:encoding="ISO-8859-1" → encoding="GBK"
(繁體中文環境建議用 Big5 或 UTF-8)
用文字編輯器開啟匯出的 .xml
第一行:encoding="ISO-8859-1" → encoding="GBK"
儲存
原理:OMWB 讀取 XML 時依編碼解析中文表名、欄位名。錯誤編碼會導致亂碼或遷移失敗。
現象:長中文字串遷移後被截斷(如 VARCHAR2(100) 只存進 50 個中文字)。
嘗試無效的方法:
根因:Access 本身的欄位長度定義就是按「位元組」而非「字元」計算,中文佔 2 位元組,導致實際字元容量減半。
omwb2000.mde 匯出 XML → 欄位定義已更新-- 檢查表結構
DESC USER_TABLES;
-- 抽樣查詢中文資料
SELECT * FROM TARGET_TABLE WHERE ROWNUM <= 10;
-- 檢查字元集
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%';
-- 確認 NLS_CHARACTERSET = AL32UTF8 或 ZHS16GBK
文章提到 Oracle 9i 企業管理器與應用伺服器 Web 介面存在相同問題:修改 Repository 根本無法解決介面顯示的中文截斷/亂碼,屬於圖形介面工具本身的缺陷,需透過 SQL*Plus 或 PL/SQL Developer 等字元介面驗證實際資料。
| 步驟 | 關鍵動作 | 避坑重點 |
|---|---|---|
| 安裝 | OMWB 核心 + Access 外掛,目錄分離 | 不可裝在 Oracle Home 底下 |
| 匯出 XML | 執行 omwb2000.mde | 生成 XML 後必改編碼 |
| 編碼修正 | schema.dtd + 匯出 XML 皆改 GBK/Big5/UTF-8 | 這是中文不亂碼的前提 |
| 遷移執行 | 載入 XML → 生成模型 → 遷移 | 可同步生成腳本備審 |
| 長度問題 | Access 端先加倍欄位長度 → 重新匯出 XML → 重新遷移 | OMWB 型別對應介面無效,必須從源頭解決 |
| 驗證 | 用字元介面工具查實際資料 | Web 介面不可信 |