在 Ubuntu 下对 IBM Informix 进行排错,通常需要从 日志、系统资源、配置、权限、网络、SQL 本身 等多个层面入手。下面给你一套常用、实用的排错思路(偏运维向,适合现场快速定位问题)。
ps -ef | grep oninit
正常至少应看到:
informix ... oninit
informix ... oninit -P
如果看不到:
onstat -
若返回:
shared memory not initialized
说明 实例未启动。
oninit -vy
-v:显示过程-y:自动确认cd $INFORMIXDIR
find . -name online.log
常见位置:
$INFORMIXDIR/tmp/online.log
$INFORMIXDIR/log/online.log
查看最近错误:
tail -n 200 online.log
| 错误 | 说明 |
|---|---|
Could not open log file |
路径/权限错误 |
No free disk space |
磁盘满 |
Assertion Failure |
严重错误,可能数据损坏 |
shared memory |
实例未启动或版本不匹配 |
Cannot open chunk |
数据空间文件权限/路径错误 |
onstat -
正常:
IBM Informix Dynamic Server Version ...
Status: On-Line
onstat -m
等价于 online.log 最近内容。
onstat -d
flags = Offline / Recovery → 磁盘异常Informix 错误码格式:
-244 Could not do a physical order read
-951 User not found
-329 Database not found
查看含义:
finderr 244
或:
finderr -244
SET EXPLAIN ON;
生成执行计划,排查慢 SQL。
确认:
id informix
Ubuntu 可能缺少:
sudo useradd -r -m informix
chown -R informix:informix $INFORMIXDIR
chmod 755 $INFORMIXDIR
✅ chunk / data 文件权限:
chmod 660 dbspace_file
netstat -tulnp | grep 1526
或:
ss -lntp
cat $INFORMIXDIR/etc/sqlhosts
示例:
demo_on onsoctcp 127.0.0.1 1526
检查:
df -h
free -h
Informix 依赖共享内存,内存不足会导致启动失败。
确认:
env | grep INFORMIX
至少应有:
INFORMIXDIR=/opt/informix
INFORMIXSERVER=demo_on
PATH=$INFORMIXDIR/bin:$PATH
建议写入:
~informix/.bashrc
| 现象 | 排查点 |
|---|---|
| oninit 失败 | online.log |
| 连接失败 | sqlhosts / 端口 / 用户 |
| SQL 报错 | finderr |
| 表打不开 | onstat -d |
| 磁盘满 | df -h |
| 权限拒绝 | informix 用户/文件权限 |
| 实例频繁宕机 | online.log + Assertion Failure |
你可以直接贴出:
oninit -vy 输出online.log 报错片段-244)onstat - 状态我可以 逐行帮你分析,甚至给你 修复命令。