CentOS 上 Informix 故障诊断与处置
一 快速定位流程
- 收集环境与进程信息:查看系统日志 /var/log/messages、/var/log/syslog,内核日志 dmesg;确认进程 oninit 是否在运行(如 ps -ef | grep informix);检查资源 top、vmstat 1、iostat -x 1、free -m。
- 校验配置与连通:核对 $INFORMIXDIR、$ONCONFIG、$INFORMIXSERVER 与 /opt/informix/etc/onconfig.、/opt/informix/etc/sqlhosts;用 dbaccess - 测试本地连接,用 ping/telnet 测试网络。
- 使用数据库诊断工具:用 onstat 观察事务、锁、逻辑日志、空间;用 oncheck 校验对象一致性;必要时用 onmode 做紧急处置(如切换单用户、终止会话)。
- 备份与变更控制:任何修复前先做可用备份,变更遵循“小步可回滚”。
二 常见故障与处置要点
- 长事务导致回滚或“卡住”
现象:出现 “Aborting Long Transaction”,大量会话阻塞。
诊断:onstat -x -r 10 观察回滚进度;onstat -c | grep MSG 定位运行日志;onstat -u 找到会话,再用 onstat -g ses 查看 SQL。
处置:拆分大事务、缩短事务持有时间;必要时扩容逻辑日志;在 IDS 9.3x 及以上可用 onparams -a -d -s -i 在线追加日志。
- 逻辑日志满
现象:实例几乎无响应;onstat -l 显示多数日志 flags 为 U------。
诊断:检查备份链路(空间满、设备异常等);用 onstat -x 的 beginlg 定位占用日志的事务;注意 flags 末位为 L 的日志用于快速恢复,即使备份也不可复用。
处置:立即执行日志备份(如 ontape -s 或第三方工具)释放空间;无法及时备份时,先在线追加日志;若由长事务引起,优先终止该事务(见下)。
- 频繁锁冲突
现象:应用报 -243/-244 等锁错误。
诊断:用 onstat -k | grep 定位锁对象;通过 onstat -u | grep 找到持有者;用 onstat -g ses 查看正在执行的 SQL。
处置:优化 SQL、缩短事务;调整隔离级别与锁等待(如 LOCKWAIT);必要时用 onmode -z 终止阻塞会话。
- Chunk I/O 失败
现象:日志出现 chunk I/O error;onstat -d 显示 chunk 状态 down。
诊断:核对设备是否存在、权限是否正确;用只读 dd if=/dev/sdX of=/dev/null bs=1M count=100 验证可读。
处置:修复或更换磁盘;修正权限;用 onspaces 添加新 chunk 并迁移数据。
- 连接失败
现象:客户端报 Connection refused/Network unreachable。
诊断:核对 sqlhosts 与端口;用 firewall-cmd 放行端口(示例:firewall-cmd --permanent --add-port=1521/tcp && firewall-cmd --reload);必要时检查 SELinux 策略。
- 安装或启动失败(环境变量/权限)
现象:提示 INFORMIXDIR not set 或 Permission denied。
处置:在 informix 用户环境设置 INFORMIXDIR、ONCONFIG、INFORMIXSERVER;确保安装与数据目录属主为 informix:informix。
三 关键命令速查表
| 目标 |
命令示例 |
要点 |
| 查看事务与回滚 |
onstat -x -r 10 |
关注回滚进度与长事务 |
| 查运行日志路径 |
onstat -c |
grep MSG 获取 MSGPATH |
| 会话与 SQL |
onstat -u;onstat -g ses |
定位阻塞者与正在执行的 SQL |
| 锁与对象 |
onstat -k;onstat -k |
grep partnum 定位锁对象 |
| 逻辑日志 |
onstat -l |
识别 U------、末位 L 的日志 |
| 表/索引一致性 |
oncheck -p ;oncheck -u |
校验物理/逻辑一致性 |
| 空间与 Chunk |
onstat -d;onspaces |
发现 down 的 chunk 并扩容 |
| 在线追加日志 |
onparams -a -d -s -i |
IDS 9.3x+ 支持在线扩容 |
| 终止会话 |
onmode -z |
谨慎使用,先确认会话与影响 |
| 本地连接测试 |
dbaccess - |
排除应用侧因素 |
四 应急与安全建议
- 处置顺序建议:先保命(备份/只读)> 定位根因(日志/工具)> 恢复服务(追加日志/释放空间/终止会话)> 验证与复盘(监控、SQL 优化、容量规划)。
- 变更风险控制:任何 onmode/onparams/onspaces 操作前确保有可用备份;生产环境尽量在维护窗口执行。
- 监控与预防:持续监控 逻辑日志使用率、长事务、锁等待、I/O 错误、磁盘空间;优化大事务与慢 SQL,合理设置 LOCKWAIT 与隔离级别。
- 连接安全:仅开放必要端口;使用 sqlhosts 主机名解析或正确 IP;必要时调整 firewall-cmd/SELinux 策略。
五 常见错误码速查
| 错误码 |
含义 |
快速处置 |
| -113 |
没有当前记录 |
确认查询能生成当前列表 |
| -116 |
不能分配内存 |
检查可用内存,简化语句/表 |
| -118 |
不能读事务日志 |
用 dblog 定位问题记录 |
| -119 |
不能打开日志文件 |
校验文件路径与权限 |
| -121 |
不能写日志文件 |
校验日志文件写权限 |
| -123 |
不允许 NFS 操作 |
检查网络文件访问 |
| -200 |
标识符过长 |
缩短至不超过 18 个字符 |
| -201 |
语法错误 |
检查拼写、关键字与保留字 |
| -206 |
表不存在 |
校验表名拼写与所在库 |
| -209 |
数据格式不兼容 |
在库上运行 DBUPDATE 升级兼容 |