最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Ubuntu Informix脚本如何自定义
时间:2026-06-16 09:27:54 编辑:袖梨 来源:一聚教程网
Ubuntu 下 Informix 自定义脚本实用指南

一 环境准备与约定
- 以专用用户运行:建议创建 informix 用户与组,所有脚本与实例操作在该用户下执行,避免权限与锁文件问题。
- 环境变量模板(写入 ~/.bash_profile 或专用 env 脚本):
- export INFORMIXDIR=/opt/IBM/informix
- export INFORMIXSERVER=ol_informix1170
- export ONCONFIG=onconfig.ol_informix1170
- export INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts.ol_informix1170
- export LD_LIBRARY_PATH=$INFORMIXDIR/lib:$LD_LIBRARY_PATH
- export PATH=$INFORMIXDIR/bin:$PATH
- 使环境生效:执行 source ~/.bash_profile。上述变量确保脚本能找到 oninit/onmode/dbaccess 等工具与配置文件。
二 常用脚本模板
- 启停与状态
#!/usr/bin/env bash# 用法:./infctl.sh {start|stop|status}set -Eeuo pipefailsource ~/.bash_profilecase "$1" instart)echo "[$(date)] Starting Informix ..."oninit -v;;stop)echo "[$(date)] Stopping Informix ..."onmode -ky;;status)echo "[$(date)] Informix status:"onstat -i;;*)echo "Usage: $0 {start|stop|status}"exit 1;;esac说明:oninit 用于初始化/启动实例,onmode -ky 安全关闭实例,onstat -i 查看简要状态。
- 执行 SQL 并获取结果(dbaccess)
#!/usr/bin/env bash# 用法:./runsql.sh "select tabname from systables limit 5"set -Eeuo pipefailsource ~/.bash_profileDB="${1:-testdb}"SQL="$2"# 无标题输出到 stdout,便于脚本解析dbaccess "$DB" <<EOF 2>/dev/nulloutput to pipe cat without headings$SQLEOF说明:通过 dbaccess 在指定库执行 SQL,使用“output to pipe cat without headings”抑制标题与多余日志,便于在 Shell 中捕获与解析结果。
- 导出查询结果到 CSV(unload)
#!/usr/bin/env bash# 用法:./unload.sh "select c1,c2 from t1" t1.csv /tmp/t1.tmpset -Eeuo pipefailsource ~/.bash_profileDB="${1:-testdb}"SQL="$2"OUT="$3"TMP="$4"cat >"$TMP" <<EOFunload to '$OUT' delimiter ','$SQLEOFdbaccess "$DB" < "$TMP"rm -f "$TMP"echo "Exported to $OUT"说明:使用 unload to … delimiter ‘,’ 将查询结果导出为 CSV,适合数据交换与备份。
- 批量导入数据(dbload)
#!/usr/bin/env bash# 用法:./load.sh mydb /path/load.ctl /path/load.log 1000 100set -Eeuo pipefailsource ~/.bash_profileDB="$1"CTL="$2"LOG="$3"COMMIT_EVERY="${4:-1000}"SKIP_LINES="${5:-0}"dbload -d "$DB" -c "$CTL" -l "$LOG" -n "$COMMIT_EVERY" -i "$SKIP_LINES"echo "Load finished, see $LOG"说明:dbload 从控制文件批量导入,-n 指定每多少行提交,-i 跳过前几行(如含表头),适合大批量数据装载。
三 自动化与运维脚本
自动创建实例脚本要点(示例片段)
- 生成环境文件并 source;复制并改写 $INFORMIXDIR/etc/onconfig.std 为自定义名称(如 onconfig.example),用 sed 调整关键参数:
- DBSERVERNAME、ROOTPATH、ROOTSIZE、ROOTNAME、FULL_DISK_INIT、MULTIPROCESSOR、NETTYPE、PHYSFILE、LOGFILES、LOGSIZE、SBSPACENAME、TAPEDEV/LTAPEDEV 等。
- 创建所需 dbspaces(如 rootdbs、sbspace、datadbs1),并设置合适权限。
- 复制并修改 $INFORMIXDIR/etc/sqlhosts.std 为 sqlhosts.example,添加条目:
- example onsoctcp localhost 9088
- 以 informix 用户执行脚本完成实例初始化与验证。该流程适合批量部署与标准化交付。
- 生成环境文件并 source;复制并改写 $INFORMIXDIR/etc/onconfig.std 为自定义名称(如 onconfig.example),用 sed 调整关键参数:
定时启停与监控
- 使用 crontab -e(以 informix 用户)安排例行维护:
- 每天 02:00 关闭:0 2 * * * onmode -ky
- 每天 02:30 启动:30 2 * * * oninit
- 结合日志轮转(如 logrotate)与 onstat 检查点,构建健康检查与告警脚本。
- 使用 crontab -e(以 informix 用户)安排例行维护:
四 排错与最佳实践
- 以 informix 用户执行与测试所有脚本;涉及启停、装载等 DBA 操作避免使用 root。
- 在脚本开头统一 source ~/.bash_profile,确保 INFORMIXDIR/INFORMIXSERVER/ONCONFIG/INFORMIXSQLHOSTS 等变量正确。
- 对 dbaccess 的输出使用“output to pipe cat without headings”以简化解析;导入导出时统一 CSV 分隔符与换行符,避免字段内分隔符冲突。
- 为 dbload 准备严谨的控制文件(字段顺序、类型、引号、分隔符、日期格式等),先小样本验证再全量导入。
- 关键操作前备份 $INFORMIXDIR/etc/onconfig. 与 $INFORMIXDIR/etc/sqlhosts**;变更后使用 onstat - 系列命令与日志核验。
- 在 /etc/services 中登记实例端口,确保 sqlhosts 与客户端一致,避免连接失败。