首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實作 Oracle 到 MySQL 資料遷移完整案例:結構、視圖、數據與兼容性處理

     編輯:PHP 相關知識

遷移動機

  • 營運成本:MySQL 免費/低成本,Oracle 授權昂貴。
  • 功能成熟:MySQL 5.1+ 支援多節點、分區、複寫,滿足大多數業務。
  • 易用性:MySQL 管理、備份、調優門檻較低。

為何自寫腳本?

數百張表,手工不可行;現有工具 (MySQL Migration Tool) 欄位型別映射不準、數據不全,自寫可控、可即時調整。

技術棧

PHP 5 + OCI8 擴充 + MySQL 5.1

核心遷移步驟

1. 取得所有表名

SELECT table_name FROM user_tables

2. 逐表遷移結構

  • 欄位資訊:SELECT column_name, data_type, data_length, nullable, data_default FROM user_tab_columns WHERE table_name = UPPER(:tbl) ORDER BY column_id
  • 型別映射表:
    NUMBER(<11) → INT
    NUMBER(>11) → BIGINT
    VARCHAR2(<255) → VARCHAR
    VARCHAR2(>255) / CLOB → TEXT
    DATE → DATE
  • 主鍵/外鍵/唯一鍵:查 user_constraints + user_cons_columns,CONSTRAINT_TYPE P=PK, R=FK, U=UK。
  • 索引:查 user_ind_columns + user_indexes。
  • 組裝 CREATE TABLE,Oracle 無自增欄位,權宜將 PK 設為 MySQL AUTO_INCREMENT。

3. 視圖遷移

SELECT view_name, text FROM user_views

MySQL 不允許 FROM (subquery) 建視圖,需將子查詢另建視圖再引用。

4. 數據遷移

  • SELECT 拼裝 INSERT,批次執行。
  • 日期轉換:TO_CHAR(date_col, 'YYYY-MM-DD')。
  • CLOB 欄位:oci_fetch_array($stid, OCI_ASSOC|OCI_RETURN_NULLS|OCI_RETURN_LOBS) 取出寫入 MySQL TEXT。
  • 關鍵配置:Windows my.ini 設 max_allowed_packet = 16M (預設 1M 導致大數據寫入失敗);Linux 預設已 16M。

5. 無法自動遷移項目

觸發器、預存程序:語法差異極大,需人工重寫。

驗收建議

結構遷移後以 ALTER 微調;大數據導入前檢查 max_allowed_packet;核心業務跑測試案例驗證數據一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved