DB2 9.7引入革命性SQL兼容性特性,大幅降低Oracle遷移成本。通過啟用兼容性向量,DB2原生支援Oracle數據類型、PL/SQL語法、內置包、並發語義。本文系統梳理核心特性與啟用實戰。
-- 實例級配置(需實例擁有者執行)
db2set DB2_COMPATIBILITY_VECTOR=ORA
db2stop
db2start
-- 創建數據庫(自動繼承兼容性設置)
db2 create database mydb
db2 connect to mydb
關鍵參數解析:DB2_COMPATIBILITY_VECTOR位掩碼控制兼容性特性組合,ORA預設開啟Oracle核心兼容集。
| Oracle類型 | DB2映射 | 備註 |
|---|---|---|
| NUMBER(p,s) | DECIMAL(p,s) | 精確數值,財務首選 |
| VARCHAR2(n) | VARCHAR(n) | 語義一致 |
| DATE | TIMESTAMP(0) | Oracle DATE含時間,DB2 DATE不含 |
| RAW/BLOB | BLOB | 二進制兼容 |
| CLOB/NCLOB | CLOB | 大文本兼容 |
實戰:
CREATE TABLE employee (
EMPNO NUMBER(5),
ENAME VARCHAR2(50),
DEPTNO NUMBER(5)
); -- 無需修改類型定義
僅Enterprise Server Edition和Workgroup Edition支援(Express-C/Express/Personal Edition不支援)。
DBMS_OUTPUT.PUT_LINE、DBMS_PIPE、DBMS_UTILITY等%ROWTYPE、%TYPE屬性引用DUAL虛擬表支援:SELECT SYSDATE FROM DUALSYSDATE、SYSTIMESTAMP函數NVL、DECODE、TRUNC(date)等函數ROWNUM偽列(分頁查詢)(+)語法(不推薦新代碼使用)AUTONOMOUS_TRANSACTION編譯指令)db2mtk(遷移工具包)分析Oracle Schema、代碼兼容度clpplus db2admin@localhost:50000/mydb
SQL> CREATE TABLE test (id NUMBER, name VARCHAR2(20));
SQL> BEGIN
DBMS_OUTPUT.PUT_LINE('Hello Oracle on DB2');
END;
/
Hello Oracle on DB2
PRAGMA部分不支援DB2 9.7兼容性特性讓Oracle遷移從「重寫」變為「調適」。啟用DB2_COMPATIBILITY_VECTOR=ORA、使用Enterprise/Workgroup版、充分測試PL/SQL邏輯是成功關鍵。建議遷移項目建立兼容性驗證清單,逐項確認核心業務邏輯行為一致。