本文主要介紹如何完成基於 DB2 的 PHP 應用系統從 AIX 平台到 Linux 平台的移植過程。文中包含了底層的 DB2 資料庫移植、上層的 PHP 應用系統移植的詳細步驟以及移植過程中可能遇到的問題和解決方案。
任務概述
系統遷移的工作主要分為以下幾個方面:
1.DB2 資料庫系統的跨平台遷移
2.Apache 伺服器與 php 應用系統的安裝和配置
下面我們就分 2 個方面分別介紹遷移和配置的具體步驟。
DB2 資料庫系統的跨平台遷移
資料庫環境
源環境:AIX+DB2 v8.1
目標環境:Linux+DB2 v8.1
其中來源資料庫中包含了 2 個資料庫 Instance:SRCDB1 與 SRCDB2。在 SRCDB1/SRCDB2 資料庫中,均包含了上百張資料庫表,並有很多的索引、外鍵約束、觸發器、預存程序以及一些含有自增欄位的表(含有 GENERATED ALWAYS AS IDENTITY 定義欄位的表)。更為困難的是,我們並沒有關於這些資料庫物件的準確建立指令碼。
遷移方案的選擇
如果遷移的源系統與目的系統屬於同一類型作業系統,例如 Linux 之間的遷移,或者 AIX 系統之間的遷移,則情況相對簡單,DB2 本身已經提供相關的工具 + 生產力來實現這種同類型平台之間的資料庫移植,如: BACKUP 和 RESTORE 命令。當然,根據不同的情況還需要對工具 + 生產力所提供的參數有比較清楚的瞭解,譬如源系統與目標系統使用不同的資料表空間,就會涉及到資料表空間重新導向的問題。由於本文的重點在於跨平台的移植,這種方案顯然無法滿足需求,在此不再熬述。
那麼,如何處理跨平台的資料庫遷移問題?是不是可以使用工具 + 生產力 db2move 呢? db2move 只能遷移表中的資料,而無法對索引、外鍵約束、觸發器和預存程序等資料庫物件也實現遷移操作,而且對於包含自增欄位資料的表來說,db2move 也有一定的限制。並且 db2move 只能把資料匯入到已存在的資料庫的表中,無法顯示指定資料表空間的位置。由於在資料庫的系統遷移過程中,不僅需要遷移表中的資料,還有索引、外鍵約束、觸發器和預存程序等資料庫物件,與本文所選方案相比,還是後者更具優勢。可以將 db2move 僅作為遷移表資料的一種備用方案。
而對於 export 和 import 來說,一次只能針對一張表進行匯出匯入操作,並且需要手動輸入 export 和 import 的命令以及需要匯入匯出的資料表名,在資料庫表的數量不多的情況下,這種方案也許還可以考慮,但也不並是最佳的方案。而在資料庫中表數量眾多的情況下,這種做法則是基本不現實的,而且 import 命令並不能保證自增欄位的資料與原來的表資料保持一致。
本文根據 DB2 對資料庫物件的處理機制,採用將 db2look 與 DDL、DML 指令碼相結合的方式,並針對原資料庫中的觸發器、預存程序以及外鍵約束等分別處理,給出了一種跨平台 DB2 資料庫系統移植的可行方案。
下面我們以 SRCDB1 為例介紹一下這種情況下的資料庫整體遷移過程。SRCDB1 資料庫中有 SRCDB1、ASN、DB2DBG 和 SQLDBA 這四個資料庫模式。假設 SRCDB1 資料庫的使用者名稱為 user_srcdb1,密碼:pw_srcdb1。