温馨提示×

Linux Informix怎么恢复数据

小樊
32
2026-07-05 15:39:59
栏目: 智能运维

Informix 数据库的数据恢复,取决于你有没有备份、数据库日志模式、以及损坏的类型。下面按最常见场景给你一个完整、可操作的恢复思路(适用于 Linux 上的 IBM Informix)。


一、恢复前必须确认的关键信息

先确认以下 4 点(非常重要):

  1. 数据库日志模式
SELECT name, logmode FROM sysdatabases;

常见模式:

  • U:Unbuffered Logging
  • B:Buffered Logging
  • N:No Logging(最麻烦)
  • A:ANSI
  1. 是否有备份
  • ontape 备份?
  • onbar 备份?
  • 操作系统级冷备?
  1. 是否还能启动实例
onstat -
  1. 数据损坏类型
  • 实例无法启动
  • 表被误删
  • 表数据被误更新
  • 磁盘损坏

二、使用备份恢复(最推荐)

✅ 场景 1:有 ontape 备份(最常见)

1️⃣ 恢复整个实例

ontape -r

过程:

  • 提示选择备份设备
  • 依次恢复:
    • Level 0(必须)
    • Level 1(如果有)
    • Level 2(如果有)
  • 最后选择 逻辑日志回滚

✅ 恢复完成后:

onmode -m   # 进入多用户模式

2️⃣ 恢复单个数据库

ontape -r -D dbname

⚠️ 注意:

  • 目标数据库必须存在
  • 日志模式必须兼容
  • 会覆盖现有数据

✅ 场景 2:使用 onbar 备份(企业级)

onbar -r

恢复单个数据库:

onbar -r -D dbname

恢复时间点(PITR):

onbar -r -t "2025-01-01 10:00:00"

三、没有备份的恢复方案(风险高)

⚠️ 场景 3:无备份,但实例还能启动

1️⃣ 表被误删(DROP TABLE)

如果表在 N 日志模式之外,基本无法恢复

可尝试:

  • systables / syscolumns 恢复表结构
  • 从旧的导出文件恢复数据

2️⃣ 表数据被误删(DELETE / UPDATE)

✅ 如果 事务未提交

ROLLBACK WORK;

✅ 如果已提交,但 有逻辑日志

  • 使用 onlog 分析日志
  • 或第三方工具(如 AGS、RMC)

⚠️ 不建议手工解析逻辑日志,风险极高


⚠️ 场景 4:实例无法启动

1️⃣ 检查 online.log

$INFORMIXDIR/tmp/online.log

2️⃣ 常见修复方式

  • 修复 chunk 权限
chown informix:informix *
chmod 660 *
  • 修复受损 chunk
onmode -ky
oninit -iy   # ⚠️ 会清空数据

四、操作系统级冷备恢复(物理拷贝)

适用于:

  • 数据库关闭状态
  • 直接拷贝了 chunk + 配置文件

恢复步骤:

onmode -ky
cp -a backup/* $INFORMIXDIR/
oninit

⚠️ 要求:

  • chunk 路径完全一致
  • Informix 版本一致
  • 关闭数据库时拷贝

五、数据恢复优先级建议

最安全

ontape / onbar 备份 → 恢复

⚠️ 次选

冷备 + 日志

最危险

无备份 + 无日志

六、常见错误与解决

错误 原因 解决
No backup found 备份路径错误 检查 TAPEDEV
Log full 逻辑日志未备份 onbar -b -l
Chunk missing chunk 损坏 从备份恢复
Cannot open chunk 权限问题 chown informix

七、我可以帮你进一步定位

你可以直接告诉我:

  1. Informix 版本(onstat -V
  2. 数据库日志模式
  3. 是否有备份
  4. 报错信息

我可以给你精确到命令级别的恢复方案,甚至帮你判断数据是否还能救回来

0