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

DB2 資料庫移植遷移全攻略:安裝配置、連線、存儲過程、備份恢復、資料操作、工具使用 150+ 實戰 FAQ

     編輯:DB2 教學

一、安裝與配置篇

問題現象根因解決方案
Linux 重裝 DB2 無法建立 db2inst1,提示已存在未先 db2idrop 刪除舊實例刪除 /var/db2/v81 目錄,或執行 /opt/IBM/db2/V8.1/instance/db2idrop db2inst1 後重建
Solaris 5.8 安裝後建實例失敗,提示 shmmax 需調整核心共享記憶體/訊息佇列參數不足編輯 /etc/system 依 db2diag.log 記錄值調整,重啟 OS
Runtime Client 是否含開發包?不含Runtime Client 僅提供連線組件,適合模擬生產客戶端環境
單一裸裝置能否同時給兩資料庫?容器不可雙活掛載建立兩實例,輪流停啟實例並掛載裸裝置,實現冷備共享
Linux 安裝後綁定 License 報 DBI1430N系統時間錯誤date 校時後 ./db2licm -a db2ese.lic
Linux 建實例報 DBI1281E主機名解析失敗檢查 hostname、/etc/hosts、ping 確認正確

二、連線問題篇

問題現象根因解決方案
SuSE Linux C Shell 無法連線環境變數未載入source /sqllib/db2cshrc 或寫入 .cshrc
CLP 修改 codepage 後仍無法連線codepage 變更需重連生效執行 db2 terminate 後重新連線
Solaris 命令列連線報 SQL1084C訊息佇列核心參數過小調整 /etc/system 訊息佇列至 65535,重啟
Linux C Shell 新用戶無法連線缺 .cshrc 載入 db2cshrc建立 .cshrc 含 source /sqllib/db2cshrc

三、存儲過程篇

  • 判斷系統檔案是否存在: Java UDF 接收檔名參數回傳代碼,SP 呼叫 UDF (SP 不直接操作檔案系統)。
  • SQL PL HANDLER 無法捕捉 SQLCODE -727/-911: 升級至 DB2 V8 FixPack 9 以上。
  • 異常處理語法:
    DECLARE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND BEGIN ... END;
    或針對特定 SQLSTATE:
    DECLARE condition_name CONDITION FOR SQLSTATE 'value';
    DECLARE EXIT HANDLER FOR condition_name BEGIN ... END;

四、備份與恢復篇

  • 查詢最近一次完整備份時間/路徑: CLP LIST HISTORY BACKUP ALL FOR dbname;SP 使用 SELECT * FROM TABLE(SNAPSHOT_DATABASE('sample', -2)) AS T。
  • 恢復時重導向表空間:
    RESTORE DATABASE SAMPLE FROM "C:\TEMP" TAKEN AT 20050626155952 REDIRECT;
    SET TABLESPACE CONTAINERS FOR 0 IGNORE ROLLFORWARD CONTAINER OPERATIONS USING (PATH "C:\DB2NODE0000\SQL00005\SQLT0000.0");
    RESTORE DATABASE SAMPLE CONTINUE;

五、資料操作篇 (Oracle/DB2 差異對照)

六、工具使用篇

  • CLP 查表結構: db2 describe table tabname
  • 開發中心遠端除錯 SP 失敗: 遠端資料庫必須安裝 DB2 Application Development Client。
  • 導出 SP 為腳本部署他機: 開發中心導出,前提建立時未指定 HIDE BODY。
  • 自動 RUNSTATS: db2 update db cfg using auto_runstats on

遷移黃金法則

  1. 先建立參數對照表 (型別、函數、系統包、鎖行為、隔離級別)。
  2. 以「最小可驗證單元」迭代遷移:Schema → 資料 → PL/SQL → 應用連線。
  3. 善用 db2look、db2move、db2cfexp/imp 原生工具鏈。
  4. 效能基線對比:同等硬體跑標準負載,關注 Bufferpool 命中率、Sort 溢寫、Lock 等待。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
Oracle 語法/功能DB2 對應方案
INSERT BULKLOAD 命令
VARGRAPHIC 欄位預設值建立 UTF-8 資料庫
SELECT DISTINCT VARCHAR(long_col) 編譯失敗移除 DISTINCT;建議改 VARCHAR + 擴大 pagesize 至 16K/32K
TRUNCATE TABLE (不記日誌、極快)DROP TABLE + 重建 (同樣不記日誌);ALTER 僅改結構
大量匯入避免日誌影響ALTER TABLE ACTIVATE NOT LOGGED INITIALLY 同一事務內載入,事務結束自動恢復日誌
定時維護任務任務中心排程 (需 Tool Catalog DB)
DMS 表空間自動擴容腳本快照查可用頁數 < 閾值 → ALTER TABLESPACE ADD (...)
UDF 轉換型別用於 GROUP BY 失敗WITH t1(col1) AS (SELECT func1(ts_col) FROM t2) SELECT col1 FROM t1 GROUP BY col1
VARGRAPHIC 用於 LOCATE先 CAST(... AS VARCHAR),需 Unicode codepage 資料庫
JDBC Type 4 連線Driver: com.ibm.db2.jcc.DB2Driver; URL: jdbc:db2://host:port/alias; 需 db2jcc.jar
Timestamp 轉 yyyymmdd自寫 UDF (文中提供完整 ts_fmt 函數碼)
SQL PL 中中文串連編譯失敗客戶端 codepage 設 1386 (GBK)
字串分隔符拆分成陣列 (Oracle DBMS_SQL.VARCHAR2_TABLE)使用 DGTT: DECLARE GLOBAL TEMPORARY TABLE SESSION.temp_emp_list (num INT, EmpName VARCHAR(30)) ...
可空欄位建唯一索引失敗設為 NOT NULL (NULL 不具唯一性)
同表索引放不同表空間CREATE TABLE ... INDEX IN tbsp_name
UDF 呼叫 SP 編譯衝突UDF 僅支援靜態 SQL 子集,不可動態呼叫 SP → 改寫為 SP