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

基於 DB2 與 PHP 的跨平台遷移實戰(一):AIX 端資料庫物件導出與腳本生成

     編輯:DB2 教學

任務概覽

將基於 DB2 UDB v8.1 的 PHP 應用系統從 AIX 遷移至 Linux,核心工作包含:

  1. DB2 資料庫跨平台遷移(含上百張表、索引、外鍵、觸發器、預存程序、自增欄位)
  2. Apache + PHP 應用層安裝配置

源環境:AIX + DB2 v8.1(雙實例 SRCDB1/SRCDB2),缺乏準確建立腳本。

遷移方案選型

  • BACKUP/RESTORE:僅適用同類 OS,不符跨平台需求
  • db2move:僅遷移資料,無法處理索引/約束/觸發器/預存程序,自增欄位受限
  • EXPORT/IMPORT:單表操作,表量大時不切實際,IMPORT 不保證自增值一致
  • 本文方案:db2look 導出 DDL + Shell 腳本批量 EXPORT/LOAD,分類處理觸發器/預存程序/外鍵,支援自增欄位覆寫,適用異構平台。

AIX 端操作步驟(以 SRCDB1 為例)

1. 使用 db2look 導出完整 DDL

# db2look -d SRCDB1 -e -o srcdb1.ddl -a -i user_srcdb1 -w pw_srcdb1

關鍵參數:-e 產生 DDL,-a 所有物件,-i/-w 認證。

注意:DB2 v8.1 的 db2look 不支援導出預存程序 DDL。解決辦法:從一台 DB2 v8.2+ 系統對 SRCDB1 執行 CATALOG 再跑 db2look,即可獲得完整物件定義。

2. 分類拆分 DDL 腳本

為確保資料一致性,依建立順序將 srcdb1.ddl 手工拆分為四檔:

檔案內容
srcdb1_tables.ddlSEQUENCE、UDF、TABLE、VIEW、INDEX 等
srcdb1_foreignkeys.ddlALTER TABLE ADD CONSTRAINT FOREIGN KEY
srcdb1_triggers.ddlCREATE TRIGGER
srcdb1_procedures.ddlCREATE PROCEDURE (SQL/Java)

範例片段:

-- srcdb1_tables.ddl
CREATE SEQUENCE "SRCDB1"."SAMPLE_SEQ_1" AS INTEGER MINVALUE 1 MAXVALUE 9999999999 START WITH 1 INCREMENT BY 1;
CREATE FUNCTION "SRCDB1"."SAMPLE_FUNC_1" (...) RETURNS VARCHAR(254) ...;
CREATE TABLE "SRCDB1"."SAMPLE_TAB_1" ("TAB_COL1" CHAR(20) NOT NULL, "TAB_COL2" VARCHAR(70) NOT NULL);
CREATE VIEW SRCDB1.SAMPLE_VIEW_1 ...;

-- srcdb1_foreignkeys.ddl
ALTER TABLE "SRCDB1"."SAMPLE_FK_1" ADD CONSTRAINT "SQL030903143850120" FOREIGN KEY ("FK_COL1") REFERENCES "SRCDB1"."SAMPLE_TABLE" ("COL1");

-- srcdb1_triggers.ddl
CREATE TRIGGER SRCDB1.SAMPLE_TRIG_1 AFTER UPDATE OF col1 ON SRCDB1.SAMPLE_TAB REFERENCING NEW AS n FOR EACH ROW MODE DB2SQL WHEN (n.col1 > 3) BEGIN ATOMIC UPDATE SAMPLE_TAB SET (col2) = 'anotherValue' WHERE col1 = n.col1; END;

-- srcdb1_procedures.ddl
CREATE PROCEDURE "SRCDB1"."JAVA_PROCEDURE_1" (...) LANGUAGE JAVA EXTERNAL NAME 'Submit_batch!submit_batch' ...;
CREATE PROCEDURE SRCDB1.SQL_PROCEDURE_1 (...) LANGUAGE SQL P1: BEGIN ... END P1;

3. 生成批量 EXPORT 腳本

# db2 "select 'export to ' || rtrim(tabname) || '.ixf of ixf select * from ' || rtrim(tabname) || ';' from syscat.tables where tabschema in ('SRCDB1','ASN','SQLDBA','DB2DBG')" > srcdb1_export.sql

編輯檔案,移除首尾統計資訊,保留純 db2 export to ... 指令。

4. 生成批量 LOAD 腳本

# db2 "select 'load from ' || rtrim(tabname) || '.ixf of ixf insert into ' || rtrim(tabname) || ';' from syscat.tables where tabschema in ('SRCDB1','ASN','SQLDBA','DB2DBG')" > srcdb1_load.sql

同樣清理首尾,得到 db2 load from ... 指令集。後續將在第二部分於 Linux 端執行並加入 identityoverride 參數。

小結

本部分完成了源端所有資料庫物件 DDL 導出、分類拆分、資料匯出腳本與載入腳本生成。第二部分將詳述 Linux 端資料庫重建、資料載入、自增欄位處理及 Apache/PHP 環境建置全過程。

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