1. 明确问题现象
记录故障的具体表现(如数据库无法启动、查询超时、报错信息)、发生时间及触发条件(如执行某SQL后出现),尝试在测试环境重现问题以定位触发因素。
2. 收集系统与数据库日志
/var/log/messages、/var/log/syslog、dmesg输出,查看内核错误、硬件报警或系统资源异常(如OOM Killer杀死进程);/opt/IBM/informix/log/或数据库目录下,如<dbname>.log),获取错误代码(如SQLCODE)、错误描述及发生时间;ps -ef | grep informix确认oninit(数据库引擎)、onstat(监控工具)等关键进程是否运行,onmode -m查看数据库运行模式(在线/离线)。3. 检查系统资源使用情况
df -h检查数据库目录(如/opt/IBM/informix/dbs)、日志目录(如/opt/IBM/informix/log)的磁盘使用率,若超过80%可能导致写入失败;free -m查看内存剩余量,top/htop识别内存占用过高的进程(如Informix缓冲池耗尽);top查看CPU使用率,iostat -x 1监控磁盘I/O负载(如%util接近100%表示磁盘瓶颈)。4. 验证配置文件正确性
$INFORMIXDIR/etc/onconfig.<dbname>(如onconfig.tramsserver),确认关键参数设置(如ROOTPATH(根dbspace路径)、LOGPATH(逻辑日志路径)、BUFFERPOOL(缓冲池大小))是否符合当前环境;echo $INFORMIXDIR(数据库安装目录)、echo $ONCONFIG(onconfig文件名)、echo $LD_LIBRARY_PATH(库文件路径)验证环境变量是否正确;/opt/IBM/informix/etc/sqlhosts文件,确认主机名、端口(默认1526)、连接类型(onsoctcp/onipcshm)配置正确,使用ping、telnet <ip> <port>测试网络连通性。5. 使用Informix诊断命令排查常见故障
onstat -l查看逻辑日志状态,若flags列显示U------(未备份),需检查备份流程(如ontape/onbar是否正常);若日志包含活动事务(通过onstat -x查看beginlg),需等待事务结束或手动终止(onmode -z <sid>);若日志空间不足,可通过onparams -a -d dbspace_name -s size添加新日志。onstat -u查看当前会话及锁信息,识别锁拥有者(locker)及被锁对象(tabl);调整隔离级别(如SET ISOLATION TO DIRTY READ降低锁粒度)、设置锁等待时间(onconfig中LOCKWAIT参数)或优化SQL(减少长事务、批量操作)。onstat -d查看chunk状态,若flags列显示down,需检查chunk路径(onstat -d中的path)是否存在、权限是否正确(chown informix:informix <chunk_path>)、磁盘是否正常(dd if=<chunk_path> of=/dev/null bs=2048k测试可读性);修复后使用onspaces -s <dbspace> -p <chunk_path> -o <offset> -s <size>重新激活chunk。onstat -g trs查看事务状态,若事务长时间运行(超过LTxHWM/LTxEHWM阈值),需终止会话(onmode -z <sid>)或拆分事务(将大操作分解为多个小提交)。6. 解决常见错误代码
alter dbspace <name> add chunk <path> size <size>)或清理无用数据;select * from systables where tabname='<table_name>')。7. 预防与监控措施
ontape -s每日增量备份、onbar每周全量备份),测试备份恢复流程;cron脚本或监控工具(如Zabbix、Prometheus)监控磁盘空间、内存、CPU、数据库状态(onstat -g ses),设置阈值告警;update statistics更新统计信息(优化查询计划)、defragment整理表碎片(alter table <name> defragment)、重建索引(rebuild index <name>);