Informix 数据库在 Linux 环境下的迁移可以通过多种方式实现,以下是几种常见的迁移方法及其详细步骤:
这是 Informix 最传统的迁移方式,适用于同版本或兼容版本间的迁移。
步骤:
准备工作
# 在源服务器创建导出目录
mkdir -p /informix/backup/export
chown informix:informix /informix/backup/export
卸载数据
su - informix
onunload -c -d <数据库名> -l /informix/backup/export/<数据库名>.unl
传输文件到目标服务器
scp /informix/backup/export/<数据库名>.unl informix@目标服务器:/informix/backup/import/
在目标服务器加载数据
onload -c -d <数据库名> -l /informix/backup/import/<数据库名>.unl
这种方法更适合迁移整个数据库,包括模式和数据。
步骤:
导出数据
dbexport <数据库名> -ss -c -o /informix/backup/export
传输文件
scp -r /informix/backup/export/<数据库名> informix@目标服务器:/informix/backup/import/
导入数据
dbimport <数据库名> -c -i /informix/backup/import/<数据库名>
适用于大规模数据库或需要最小停机时间的迁移。
步骤:
配置备份参数
# 编辑 $INFORMIXDIR/etc/$ONCONFIG 文件
TAPEDEV /informix/backup
执行0级备份
ontape -s -L 0
传输备份文件到目标服务器
在目标服务器恢复
ontape -r
检查版本兼容性
onmode -V
检查版本信息迁移前准备
# 收集源数据库信息
onstat - > onstat.out
oncheck -ce > oncheck_ce.out
特殊对象处理
dbschema
导出 DDL 语句数据一致性检查
oncheck -cD <数据库名>
oncheck -cI <数据库名>:表名
记录数比对
# 对关键表执行
echo "select count(*) from 表名" | dbaccess <数据库名>
字符集问题
权限问题
dbschema -u all -p all -d <数据库名> > grants.sql
空间不足
onstat -d
检查 chunk 使用情况#!/bin/bash
# Informix 数据库迁移脚本
# 变量设置
SRC_DB="源数据库名"
TGT_DB="目标数据库名"
BACKUP_DIR="/informix/backup"
LOG_FILE="/tmp/informix_migration.log"
# 开始日志
echo "迁移开始于 $(date)" > $LOG_FILE
# 导出数据库
echo "开始导出数据库..." >> $LOG_FILE
dbexport $SRC_DB -c -ss -o $BACKUP_DIR >> $LOG_FILE 2>&1
if [ $? -ne 0 ]; then
echo "导出失败!" >> $LOG_FILE
exit 1
fi
# 传输文件
echo "传输文件到目标服务器..." >> $LOG_FILE
scp -r $BACKUP_DIR/$SRC_DB informix@目标服务器:$BACKUP_DIR/ >> $LOG_FILE 2>&1
if [ $? -ne 0 ]; then
echo "文件传输失败!" >> $LOG_FILE
exit 1
fi
# 导入数据库
echo "在目标服务器导入数据库..." >> $LOG_FILE
ssh informix@目标服务器 "dbimport $TGT_DB -c -i $BACKUP_DIR/$SRC_DB" >> $LOG_FILE 2>&1
if [ $? -ne 0 ]; then
echo "导入失败!" >> $LOG_FILE
exit 1
fi
echo "迁移成功完成于 $(date)" >> $LOG_FILE
根据您的具体环境和需求,可以选择最适合的迁移方法。对于大型生产环境,建议先在测试环境进行演练,并确保有完整的备份方案。