温馨提示×

Linux Informix如何迁移数据

小樊
39
2026-08-27 03:02:02
栏目: 智能运维

Linux 环境下迁移 Informix 数据,常见做法取决于 数据量大小、停机窗口、是否跨版本/跨平台。下面按最常用 → 高级方案给你一个完整梳理。


一、迁移前准备(必做)

  1. 确认 Informix 版本
onstat -V
  1. 确认页大小
onstat -d

不同页大小(2K / 4K / 8K)不能直接物理恢复

  1. 确认字符集
echo $DB_LOCALE
echo $CLIENT_LOCALE
  1. 备份原库
ontape -s -L 0
# 或
onbar -b -L 0

二、最常用方案(推荐)

✅ 方案一:dbexport / dbimport(最稳妥)

适用场景

  • 同平台或跨版本
  • 数据量不大(几十 GB 以内)
  • 可接受停机

1️⃣ 导出数据

dbexport dbname -o /backup/exp

生成:

/backup/exp/dbname.exp
├── dbname.sql
├── tab1.unl
├── tab2.unl

2️⃣ 传输到目标服务器

scp -r /backup/exp user@newhost:/data/exp

3️⃣ 导入数据

dbimport dbname -i /data/exp

优点

  • 不依赖页大小
  • 可跨小版本
  • 操作简单

缺点

  • 速度慢
  • 需要停机

三、物理迁移(最快)

✅ 方案二:ontape / onbar 物理恢复

适用场景

  • 同版本
  • 同页大小
  • 大数据量(TB 级)

1️⃣ 原库做 0 级备份

ontape -s -L 0

2️⃣ 拷贝备份文件 + ONCONFIG

scp -r /informix/backup newhost:/informix/backup
scp $INFORMIXDIR/etc/onconfig newhost:$INFORMIXDIR/etc/

3️⃣ 新机器恢复

ontape -r

优点

  • 速度快
  • 适合大库

缺点

  • 版本/页大小必须一致
  • 风险高

四、表级迁移(不停机)

✅ 方案三:unload / load

导出

UNLOAD TO '/data/tab1.unl'
SELECT * FROM tab1;

导入

LOAD FROM '/data/tab1.unl'
INSERT INTO tab1;

dbload -d dbname -c cmd.txt

优点

  • 可分批
  • 不停机

缺点

  • 工作量大
  • 索引/触发器需单独处理

五、跨版本 / 跨平台迁移(推荐)

✅ 方案四:外部表(External Table)

CREATE EXTERNAL TABLE ext_tab1
LIKE tab1
USING (
  DATAFILES ("DISK:/data/tab1.unl"),
  FORMAT "DELIMITED"
);

INSERT INTO tab1 SELECT * FROM ext_tab1;

优点

  • 灵活
  • 可并行

六、迁移步骤建议(标准流程)

  1. 新环境安装 同版本 Informix
  2. 创建 相同 dbspace
  3. 使用 dbexport/dbimport
  4. 重新创建:
    • 索引
    • 触发器
    • 存储过程
  5. 更新统计信息
update statistics;

七、常见问题

❓ 页大小不一致

✅ 只能用 逻辑迁移(dbexport / unload)

❓ 字符集乱码

export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8

❓ 表空间不够

onstat -d

八、方案选择速查表

场景 推荐方案
小库 dbexport/dbimport
大库 ontape/onbar
不停机 unload/load
跨版本 dbexport
表级迁移 external table

如果你愿意,可以告诉我:

  • Informix 版本
  • 数据量
  • 是否跨版本
  • 停机时间要求

我可以给你 一套精确迁移命令方案

0