Linux 上 Informix 故障恢复实战指南
一 恢复前快速定位与准备
- 收集关键信息:查看 /var/log/informix/ 与系统日志 /var/log/messages、/var/log/syslog;确认环境变量 INFORMIXDIR、ONCONFIG、LD_LIBRARY_PATH 正确;核对 $INFORMIXTMP 目录权限与剩余空间。
- 检查实例状态与资源:用 onstat -g act/-g srv 看活跃与会话,onstat -l 看逻辑日志,onstat -d 看 dbspace/chunk,top/vmstat/iostat/free -m 查 CPU、内存、I/O 与磁盘。
- 网络与连通性:用 ping、telnet 验证客户端到实例端口可达;必要时检查 /etc/hosts、DNS 与防火墙。
- 配置核对:确认 $ONCONFIG 指向的配置文件(如 onconfig.)与 sqlhosts 正确;必要时以 informix 用户执行操作。
二 常见故障的恢复操作
- 实例无法启动(共享内存/临时目录/权限问题)
- 以 informix 用户执行 oninit -p 做物理恢复;若仍失败,使用 oninit -i 重新初始化实例(会清空数据,谨慎)。
- 检查 /INFORMIXTMP 与实例目录权限、磁盘空间;确保 rootdbs 等关键文件权限正确(如 chmod 600 rootdbs)。
- 查看 onconfig 中 TAPEDEV/LTAPEDEV 等路径是否可写,必要时修正后再启动。
- 逻辑日志满(UNAVAIL/TOO FULL)
- 立即用 onstat -l 确认状态;若有可用备份,先备份并归档已用逻辑日志,释放空间。
- 临时扩容:用 onparams -a -d -s 增加逻辑日志;或按需调整逻辑日志总数与大小。
- 恢复后务必建立持续的逻辑日志备份(ontape 或 onbar),避免再次满。
- 磁盘/Chunk 故障或 I/O 错误
- 用 onstat -d 定位异常 chunk;检查磁盘挂载、设备是否存在、权限与 I/O 错误。
- 从最近可用备份恢复受影响 dbspace/chunk;若仅元数据不一致,可用 oncheck 做一致性检查与修复。
- 长事务/锁等待导致阻塞
- 用 onstat -k/-u 查锁与事务,定位持有锁的会话。
- 评估后使用 onmode -z 终止问题会话,或将大事务拆分为小事务,减少锁占用与日志压力。
三 从备份恢复的标准流程
- 准备
- 干净停机:onmode -ky;确认 INFORMIXDIR、ONCONFIG、LD_LIBRARY_PATH、TAPEDEV/LTAPEDEV 正确。
- 归档当前可用逻辑日志,避免恢复后无法前滚。
- 整库恢复(ontape 示例)
- 物理恢复:ontape -r(按提示选择要恢复的 dbspace,先从 rootdbs 开始)。
- 前滚日志:恢复完成后按提示回放逻辑日志,直至“无更多日志可回放”。
- 指定空间/时间点恢复
- 仅恢复部分 dbspace:在 ontape -r 过程中仅勾选目标空间。
- 时间点恢复:确保有覆盖目标时间点的逻辑日志备份,恢复时按提示前滚到指定时间点。
- 使用 onbar(可选,适合大规模并行)
- 配置 BAR_BSALIB、BAR_MAX_BACKUP 等参数,执行 onbar -r 按策略恢复。
- 重要注意
- 跨机恢复时,目标机在 机型、操作系统、onconfig、非临时 dbspace 数量与大小 应尽量一致,否则可能恢复失败。
- 恢复前备份当前 onconfig;恢复后及时做 0 级备份 作为新的基线。
四 高可用与切换场景的恢复
- HDR 主备切换与回切
- 切换行为由 DRAUTO 控制:0 手动、1 retain、2 reverse(主恢复后自动变备)。
- 关键参数:DRINTERVAL(建议 1 秒,平衡性能与数据丢失风险)、DRTIMEOUT(握手超时,网络异常时易触发主备状态异常)。
- 主库异常且 DRAUTO=2 时,备库会自动升主;原主恢复后自动回切为备。
- 回切前确保主备数据一致(逻辑日志已同步/归档),避免脑裂与数据丢失。
五 预防与演练清单
- 备份策略:定期执行 0/1/2 级 备份;对关键库建议更频繁 0 级;确保逻辑日志连续备份且可恢复。
- 配置与变更管理:保留每次 0 级备份 时的 onconfig 副本;变更前评估对恢复的影响。
- 监控与告警:监控 逻辑日志使用率、磁盘空间、锁等待、长事务、I/O 错误 等关键指标。
- 定期演练:在测试环境定期做全量+日志恢复演练,验证备份可用性与恢复时间目标(RTO/RPO)。