數百張表,手工不可行;現有工具 (MySQL Migration Tool) 欄位型別映射不準、數據不全,自寫可控、可即時調整。
PHP 5 + OCI8 擴充 + MySQL 5.1
SELECT table_name FROM user_tables
SELECT column_name, data_type, data_length, nullable, data_default FROM user_tab_columns WHERE table_name = UPPER(:tbl) ORDER BY column_iduser_constraints + user_cons_columns,CONSTRAINT_TYPE P=PK, R=FK, U=UK。user_ind_columns + user_indexes。CREATE TABLE,Oracle 無自增欄位,權宜將 PK 設為 MySQL AUTO_INCREMENT。SELECT view_name, text FROM user_views
MySQL 不允許 FROM (subquery) 建視圖,需將子查詢另建視圖再引用。
SELECT 拼裝 INSERT,批次執行。TO_CHAR(date_col, 'YYYY-MM-DD')。oci_fetch_array($stid, OCI_ASSOC|OCI_RETURN_NULLS|OCI_RETURN_LOBS) 取出寫入 MySQL TEXT。my.ini 設 max_allowed_packet = 16M (預設 1M 導致大數據寫入失敗);Linux 預設已 16M。觸發器、預存程序:語法差異極大,需人工重寫。
結構遷移後以 ALTER 微調;大數據導入前檢查 max_allowed_packet;核心業務跑測試案例驗證數據一致性。