温馨提示×

Ubuntu Informix如何自定义脚本

小樊
38
2025-12-21 01:50:47
栏目: 智能运维

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 pipefail
source ~/.bash_profile

case "$1" in
  start)
    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 pipefail
source ~/.bash_profile

DB="${1:-testdb}"
SQL="$2"

# 无标题输出到 stdout,便于脚本解析
dbaccess "$DB" <<EOF 2>/dev/null
output to pipe cat without headings
$SQL
EOF

说明:通过 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.tmp
set -Eeuo pipefail
source ~/.bash_profile

DB="${1:-testdb}"
SQL="$2"
OUT="$3"
TMP="$4"

cat >"$TMP" <<EOF
unload to '$OUT' delimiter ','
$SQL
EOF

dbaccess "$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 100
set -Eeuo pipefail
source ~/.bash_profile

DB="$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.stdsqlhosts.example,添加条目:
      • example onsoctcp localhost 9088
    • informix 用户执行脚本完成实例初始化与验证。
      该流程适合批量部署与标准化交付。
  • 定时启停与监控

    • 使用 crontab -e(以 informix 用户)安排例行维护:
      • 每天 02:00 关闭:0 2 * * * onmode -ky
      • 每天 02:30 启动:30 2 * * * oninit
    • 结合日志轮转(如 logrotate)与 onstat 检查点,构建健康检查与告警脚本。

四 排错与最佳实践

  • 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 与客户端一致,避免连接失败。

0