Ubuntu 下 Informix 自定义脚本实用指南
一 环境准备与约定
二 常用脚本模板
#!/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 查看简要状态。
#!/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 中捕获与解析结果。
#!/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,适合数据交换与备份。
#!/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 跳过前几行(如含表头),适合大批量数据装载。
三 自动化与运维脚本
自动创建实例脚本要点(示例片段)
定时启停与监控
四 排错与最佳实践