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

從 SQL Server 遷移至 Oracle 完整指南:架構轉換、語法差異與常見坑點

     編輯:關於SqlServer

遷移概覽:兩大核心工作面向

資料庫遷移不僅是腳本轉換,更涉及應用程式 SQL 改寫。本案例環境為 SQL Server 2008 → Oracle 9i,工具採用 Sybase PowerDesigner 12 試用版 進行模型逆向/正向工程,PL/SQL Developer 7.1.5 驗證腳本正確性。

階段一:透過 PowerDesigner 生成 Oracle DDL 腳本

  1. 連接 SQL Server,執行逆向工程生成物理資料模型(PDM)。
  2. 由 PDM 衍生邏輯模型(LDM),剔除平台專屬屬性。
  3. 針對 Oracle 產生新的物理模型(Oracle PDM)。
  4. 由 Oracle PDM 正向生成CREATE TABLE / INDEX / CONSTRAINT 腳本。
  5. 人工修正:依 Oracle 命名規則(30 字元上限)、資料型別對照表調整腳本。
  6. 在 PL/SQL Developer 執行腳本,修正編譯錯誤直到全部通過。

階段二:應用層 SQL 改寫關鍵對照表

SQL ServerOracle說明
[TableName], [Column]TableName, Column移除方括號,Oracle 不支援
參數前綴 @參數前綴 :如 @UserID → :UserID
GETDATE()SYSDATE / CURRENT_TIMESTAMP日期時間函數對照
ISNULL(expr, val)NVL(expr, val) / COALESCE建議用 ANSI 標準 COALESCE
TOP NROWNUM <= N 或 FETCH FIRST N ROWS ONLY (12c+)分頁寫法差異大,需重構
IDENTITYSEQUENCE + TRIGGER / IDENTITY (12c+)自增欄需建立序列與觸發器
NVARCHAR(4000)NVARCHAR2(2000) (字元語意)Oracle NVARCHAR2 以字元計,實際位元組上限較小

遷移過程常見阻礙與對策

1. 保留字衝突

SQL Server 允許的識別碼(如 ORDER, GROUP, USER)在 Oracle 為保留字。解法:PowerDesigner 產生腳本時自動加雙引號 "ORDER",但建議統一重新命名避免後續維護麻煩。

2. 字元長度語意差異

  • SQL Server NVARCHAR(4000) 可存 4000 個中文字(雙位元組)。
  • Oracle NVARCHAR2(4000) 以字元為單位,但受限於 4000 位元組上限,實際僅能存約 2000 個中文字。
  • 對策:改用 CLOB 或評估是否需擴充欄位長度。

3. 索引/外鍵名稱超過 30 字元

Oracle 物件名稱上限 30 字元。PowerDesigner 產生的名稱常超標,需建立命名規範對照表,批次重命名。

4. PowerDesigner 產生雙引號識別碼

預設輸出 CREATE TABLE "SCHEMA"."TABLE",導致大小寫敏感且需永遠加引號。建議在模型層級關閉「加引號」選項,或腳本後處理移除。

驗證與上線清單

  • ✅ 所有 DDL 在 PL/SQL Developer 無錯誤執行
  • ✅ 應用程式所有動態 SQL 經參數化改寫並通過測試
  • ✅ 預存程序/函數/觸發器逐一移植並回歸測試
  • ✅ 數據遷移腳本(BCP → SQL*Loader / Data Pump)驗證筆數、檢查碼
  • ✅ 效能基準測試:關鍵查詢在 Oracle 執行計畫與耗時達標

參考資源

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