Ubuntu 上 Informix 启动失败排查与修复
一 快速定位
- 切换到 informix 用户并检查环境:
- 确认关键变量:echo $INFORMIXDIR $INFORMIXSERVER $ONCONFIG $INFORMIXSQLHOSTS $LD_LIBRARY_PATH
- 典型值:INFORMIXDIR=/opt/IBM/informix,ONCONFIG=onconfig.<实例名>,INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts
- 查看引擎日志与系统日志:
- 引擎日志:tail -n 200 $INFORMIXDIR/tmp/<实例名>.log(很多发行版也会软链到 /var/log/informix/ 或直接使用 $INFORMIXDIR/tmp 下的 online.log)
- 系统日志:tail -n 200 /var/log/syslog | grep -i informix
- 先做一次带诊断的启动:oninit -ivy(交互式输出更利于定位)
- 检查进程与监听:
- ps -ef | grep oninit;onstat -g srv;netstat -tlnp | grep <端口>(sqlhosts 中配置的端口)
- 如端口不通,先用 ping/telnet 测试网络与端口连通性
二 常见根因与对应修复
- 环境变量缺失或错误
- 典型现象:找不到 onconfig、找不到库、sqlhosts 解析失败
- 修复:在 informix 用户的 ~/.bash_profile 或 /etc/profile.d/informix.sh 中正确设置 INFORMIXDIR、INFORMIXSERVER、ONCONFIG、INFORMIXSQLHOSTS、LD_LIBRARY_PATH,执行 source 使其生效
- 权限与目录安全设置不当
- 典型报错:
- “permissions 0777 include public write access” → 目录被设为 0777,需改为更安全的 0750/0700
- “/opt/informix (path is not trusted)” → 目录属主/权限或 ACL 导致引擎不信任
- “directory /opt/informix/tmp is too secure (has mode 755, needs 770)” → tmp 需 770
- 修复:
- chown -R informix:informix $INFORMIXDIR
- find $INFORMIXDIR -type d -exec chmod 755 {} ;
- find $INFORMIXDIR -type f -exec chmod 640 {} ;
- chmod 770 $INFORMIXDIR/tmp
- 共享内存/资源限制
- 典型报错:Fatal error in shared memory creation、Allocating and attaching to shared memory…FAILED
- 修复:
- 当前会话放宽:ulimit -n 65535;ulimit -c unlimited
- 永久放宽:/etc/security/limits.conf 增加
- informix soft nofile 65535
- informix hard nofile 65535
- informix soft core unlimited
- informix hard core unlimited
- 检查内核共享内存参数(/proc/sys/kernel/shmmax、shmall 等)是否足够,必要时调大后重启
- 逻辑日志满
- 典型现象:实例卡在恢复或拒绝新事务
- 诊断:onstat -l(查看 unbacked/unused 状态)
- 处理:先备份再切换/清理逻辑日志(如 onmode -c backuplog;必要时增加逻辑日志或调整自动备份策略)
- 磁盘空间或 chunk 异常
- 典型现象:I/O 失败、chunk down、无法分配空间
- 诊断:onstat -d;df -h;检查 $INFORMIXDIR 所在磁盘剩余空间与挂载选项
- 处理:释放空间、修复文件系统、必要时恢复 chunk 或调整路径到可用磁盘
- 配置文件错误
- 典型现象:启动即退出,oninit 提示未知参数或路径错误
- 修复:核对 $ONCONFIG 指向的 onconfig 文件,检查 ROOTPATH/DBSPACETEMP、NETTYPE、TAPEDEV/LTAPEDEV、LOG_INDEX_BUFFERS 等关键项;确保 sqlhosts 中服务器名、协议与端口一致
- 安全启动/内核兼容(少数新平台)
- 现象:驱动/内核模块限制导致引擎初始化失败
- 处理:在 BIOS 关闭 Secure Boot,或尝试切换至较旧的稳定内核后启动
三 最小可用环境示例
- 创建用户与目录:
- sudo groupadd -g 3000 informix
- sudo useradd -u 3000 -g 3000 -d /opt/IBM/informix -m informix
- sudo chown -R informix:informix /opt/IBM/informix
- 配置环境变量(写入 /opt/IBM/informix/etc/informix.rc 或 ~/.bash_profile):
- export INFORMIXDIR=/opt/IBM/informix
- export INFORMIXSERVER=ol_informix
- export ONCONFIG=onconfig.ol_informix
- export INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts
- export LD_LIBRARY_PATH=$INFORMIXDIR/lib:$LD_LIBRARY_PATH
- export PATH=$INFORMIXDIR/bin:$PATH
- 修正关键目录权限:
- find $INFORMIXDIR -type d -exec chmod 755 {} ;
- find $INFORMIXDIR -type f -exec chmod 640 {} ;
- chmod 770 $INFORMIXDIR/tmp
- 启动与验证:
- su - informix
- oninit -ivy
- onstat -g srv;onstat -l;tail -n 200 $INFORMIXDIR/tmp/online.log
四 仍未恢复时的建议
- 保留现场:保存 oninit -ivy 完整输出、$INFORMIXDIR/tmp/*.log、/var/log/syslog 相关片段
- 简化复现:临时使用最小化 onconfig(仅保留 ROOTPATH、必要的 NETTYPE/端口、TAPEDEV 指向 /dev/null),排除磁盘/磁带等外设因素
- 回退与更新:尝试较旧内核或补丁级别,确认是否为平台兼容性问题
- 寻求支持:携带上述日志与配置到 IBM/专业社区渠道,可显著缩短定位时间