確保源數據庫與目標Debian環境的**操作系統(如Debian 11/12)、硬件配置(CPU、內存、磁盤空間)及Informix版本(如11.70.FC3DE、11.50UC5)**兼容。通過onstat -
命令確認源數據庫版本,目標環境需安裝對應或更高版本的Informix Dynamic Server(IDS)。
informix
),并授予DBA權限(用于創建對象、導入數據);dbexport
/dbimport
、unload
/load
;二進制遷移需ontape
、on-bar
;高性能遷移需High Performance Loader(HPL)。根據數據量大小選擇遷移方法:
dbexport
/dbimport
),操作簡單、可跨平臺;ontape
/on-bar
)或高性能加載工具(HPL),速度快、停機時間短;unload
/load
或HPL。使用dbschema
命令導出源數據庫的表結構、索引、觸發器、存儲過程等對象:
# 導出所有表結構到db_schema.sql
dbschema -d 源數據庫名 -t all > db_schema.sql
# 導出所有存儲過程到proc_schema.sql
dbschema -d 源數據庫名 -f all > proc_schema.sql
導出后需檢查SQL文件,調整數據類型兼容性(如Informix的DECIMAL(10,2)
在PostgreSQL中為NUMERIC(10,2)
)、約束定義(如外鍵、唯一鍵)及存儲過程語法(如EXECUTE PROCEDURE
改為CALL
)。
將調整后的SQL文件導入目標數據庫:
# 登錄目標數據庫服務器
dbaccess 目標數據庫名 <
db_schema.sql
創建完成后,驗證對象是否完整(如SELECT * FROM systables WHERE tabname='表名'
)。
使用dbexport
工具將源數據庫導出為ASCII格式:
# 創建導出目錄
mkdir -p /informix/db_export
# 導出數據庫(生成exp.dat數據文件和dbexport.exp控制文件)
dbexport -o /informix/db_export 源數據庫名
導出完成后,/informix/db_export
目錄下會生成.unl
數據文件(如testtable.unl
)和.exp
控制文件。
使用scp
或rsync
將導出目錄傳輸到目標服務器:
scp -r /informix/db_export 目標服務器IP:/home/informix/
使用dbimport
工具將數據導入目標數據庫:
cd /home/informix/db_export
dbimport -i . 目標數據庫名 -c -l buffered update statistics
參數說明:
-c
:創建數據庫(若目標數據庫不存在);-l buffered
:使用緩沖日志(提升導入速度);update statistics
:更新統計信息(優化查詢性能)。使用ontape
工具制作0級備份(全量備份):
# 設置onconfig文件中的備份路徑(/informix/backup/ontape_dev為磁帶設備路徑)
onconfig.myconf中的TAPEDEV=/informix/backup/ontape_dev
LTAPEDEV=/informix/backup/ltape_dev
# 執行0級備份
ontape -s -L 0
備份文件會保存到TAPEDEV
指定的路徑(如/informix/backup/
)。
將備份文件、onconfig
文件及sqlhosts
文件傳輸到目標服務器:
scp /informix/backup/*.dat 目標服務器IP:/informix/backup/
scp $INFORMIXDIR/etc/onconfig 目標服務器IP:$INFORMIXDIR/etc/
scp $INFORMIXDIR/etc/sqlhosts 目標服務器IP:$INFORMIXDIR/etc/
在目標服務器上:
onconfig
文件中的路徑(如ROOTPATH
、MIRRORPATH
)正確;/informix/chunks/chunk1
),并設置權限為660
(chown informix:informix chunk1; chmod 660 chunk1
);ontape -r -L 0
恢復完成后,目標數據庫會自動聯機。
更新應用程序的連接字符串,指向目標數據庫服務器:
# 原連接字符串(源服務器)
jdbc:informix-sqli://源服務器IP:1533/源數據庫名:INFORMIXSERVER=源服務器名;user=informix;password=xxx
# 新連接字符串(目標服務器)
jdbc:informix-sqli://目標服務器IP:1533/目標數據庫名:INFORMIXSERVER=目標服務器名;user=informix;password=xxx
TODAY
改為CURRENT DATE
,VARCHAR
改為CHAR
);COMMITTED READ
,目標數據庫可能需要調整為REPEATABLE READ
);en_US.819
,目標數據庫為zh_CN.gb18030
,需統一字符集)。SELECT COUNT(*) FROM 表名
);dbaccess
執行校驗SQL,確保數據無遺漏或錯誤。SELECT * FROM 大表 WHERE 條件
),對比源和目標數據庫的執行時間;onstat -g ses
監控目標數據庫的會話性能,檢查是否有鎖等待或資源瓶頸。EXECUTE PROCEDURE 存儲過程名(參數)
)。onstat
工具監控數據庫狀態(如onstat -
查看系統概要,onstat -g sql
查看SQL執行情況);UPDATE STATISTICS
),優化查詢計劃;BUFFERPOOL
參數),提升性能。ontape
或on-bar
工具;