Ubuntu 上 Informix 启动失败的定位与修复步骤
一、快速定位
ps -ef | grep informixonstat -(若返回 “shared memory not initialized”,说明引擎未起来)tail -n 200 $INFORMIXDIR/tmp/online.logjournalctl -xe、tail -n 200 /var/log/syslogecho $INFORMIXDIR $ONCONFIG $INFORMIXSERVER $LD_LIBRARY_PATHINFORMIXDIR=/opt/IBM/informixINFORMIXSERVER=informixONCONFIG=onconfig.informixLD_LIBRARY_PATH=$INFORMIXDIR/lib:$LD_LIBRARY_PATHPATH=$INFORMIXDIR/bin:$PATHcat $INFORMIXDIR/etc/sqlhostsss -lntp | grep <端口> 或 netstat -lntp | grep <端口>ping/nslookup 测试主机名解析free -m、df -h、iostat -x 1 检查内存、磁盘空间与 I/O 错误二、常见错误与修复对照表
| 症状关键词 | 可能原因 | 快速修复 |
|---|---|---|
| online.log 报 “Problem: the permissions 0777 include public write access” | 目录/文件权限过宽(如 0777) | chmod -R 755 $INFORMIXDIR;chown -R informix:informix $INFORMIXDIR |
| “/opt/informix (path is not trusted)” | 目录受信任属性或权限不当 | 确保目录属主为 informix:informix,权限 755,必要时检查挂载选项与 ACL |
| “directory /opt/informix/tmp is too secure (has mode 755, needs 770)” | 临时目录权限不足 | chmod 770 $INFORMIXDIR/tmp;确认属主为 informix:informix |
| “The number of file descriptors is limited by your shell” 或 “Fatal error in shared memory creation” | 文件描述符/共享内存不足 | 当前会话:ulimit -n 65535;持久化:/etc/security/limits.conf 增加 * soft/hard nofile 65535,退出重登或重启 |
| “Allocating and attaching to shared memory… FAILED” | 内存不足、SHM 参数不当、段冲突或权限问题 | 释放内存/停占用进程;核对 onconfig 中 SHMBASE/SHMVIRTSIZE/SHMADD;必要时调大系统共享内存参数并重启系统 |
| “WARNING: server initialization failed or timed out.” 且 online.log 含 “Could not determine encryption mode from page zero.” | IDS 12.10.xC6 在 Linux x86_64 上启用 ROOTOFFSET/MIRROROFFSET 后重启失败 | 升级到 12.10.FC6X5 及以上;或作为规避将 ROOTOFFSET=0、MIRROROFFSET=0、FULL_DISK_INIT=0 后执行 oninit -iy(会重建实例,数据丢失) |
| onmonitor 报 “Termcap entry too long … The type of your terminal is unknown” | 终端定义缺失 | 在 informix 用户环境添加:INFORMIXDIR、TERMINFO=$INFORMIXDIR/etc/typetab、TERMCAP=$INFORMIXDIR/etc/termcap 并重新登录 |
三、按序执行的标准恢复流程
切换到 informix 用户并校验环境:su - informix,确认 INFORMIXDIR/ONCONFIG/INFORMIXSERVER/LD_LIBRARY_PATH 正确。
查看日志定位错误:tail -n 200 $INFORMIXDIR/tmp/online.log 与 journalctl -xe,优先处理日志中首个报错。
修正权限与属主(按需执行):
chown -R informix:informix $INFORMIXDIRchmod -R 755 $INFORMIXDIRchmod 770 $INFORMIXDIR/tmp调整资源限制(持久化):
/etc/security/limits.conf 增加:
* soft nofile 65535* hard nofile 65535ulimit -n 65535 后重试启动清理共享内存残留(若疑似段冲突):
ipcs -m | grep informix 查看共享内存段ipcrm -m <shmid> 删除残留段(谨慎,确保无其他实例使用)启动引擎并观察:
oninit -ivy(会重建系统表,谨慎用于生产)oninit -vonstat - 应显示引擎已 up网络连通性验证:
dbaccess - 测试本地连接telnet <host> <port> 或 ss -lntp | grep <port> 验证监听端口可达四、预防与后续
权限基线化:安装后统一设置 $INFORMIXDIR 755、关键子目录(如 tmp)770,属主 informix:informix,并纳入变更管控。
资源与内核参数:为数据库实例预留充足内存与文件描述符;必要时调整系统共享内存参数并重启,避免多实例资源争用。
变更风险控制:修改 ROOTOFFSET/MIRROROFFSET 等磁盘布局参数前先备份;如为 IDS 12.10.xC6,优先升级到 12.10.FC6X5+ 以避免已知重启缺陷。
监控与备份:建立对 online.log、syslog、磁盘空间与连接数的监控;定期做 0 级备份,并验证可恢复性。