Ubuntu 上使用 Informix 的脚本化操作指南
一 环境准备与变量配置
sudo groupadd informix && sudo useradd -g informix -d /opt/informix -m informix/opt/informix,权限:chown -R informix:informix /opt/informixexport INFORMIXDIR=/opt/informix
export INFORMIXSERVER=ifxserver
export ONCONFIG=onconfig.ifxserver
export INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts
export PATH=$INFORMIXDIR/bin:$PATH
export LD_LIBRARY_PATH=$INFORMIXDIR/lib:$LD_LIBRARY_PATH
source ~/.bash_profile./ids_install 或 ./installserver)cp $INFORMIXDIR/etc/onconfig.std $INFORMIXDIR/etc/onconfig.ifxserver$INFORMIXDIR/etc/sqlhosts(示例:ifxserver onsoctcp your_host your_service)oninit -ivy,必要时 onmode -ky 后再启动/etc/services 增加如 sqlexec 1526/tcp 的条目(端口以实际规划为准)二 SQL 脚本与批量执行
#!/usr/bin/env bash
source /opt/informix/.bash_profile
dbaccess testdb <<'EOF'
CREATE TABLE IF NOT EXISTS t(id INT, name VARCHAR(50));
INSERT INTO t VALUES (1, 'Alice'), (2, 'Bob');
SELECT * FROM t;
EOF
CREATE TABLE IF NOT EXISTS t(id INT, name VARCHAR(50));
INSERT INTO t VALUES (1, 'Alice'), (2, 'Bob');
SELECT * FROM t;
dbaccess testdb init.sqlisql -v your_database your_user your_password < init.sqldbaccess testdb <<'EOF'
LOAD FROM '/path/employees.csv' DELIMITER ',' INSERT INTO employees;
EOF
BEGIN WORK; ... COMMIT; 或 ROLLBACK;三 Shell 运维脚本示例
#!/usr/bin/env bash
source /opt/informix/.bash_profile
case "$1" in
start)
oninit -v
;;
stop)
onmode -ky
;;
status)
onstat -
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
;;
esac
#!/usr/bin/env bash
source /opt/informix/.bash_profile
LOG=/opt/informix/log/monitor_$(date +%F).log
{
echo "=== $(date) ==="
onstat -g seg
onstat -g sql
onstat -l
} >> "$LOG" 2>&1
chmod +x monitor.shcrontab -e,示例(每小时执行):0 * * * * /opt/informix/monitor.sh#!/usr/bin/env bash
source /opt/informix/.bash_profile
BACKUP_DIR=/opt/informix/backup
mkdir -p "$BACKUP_DIR"
ontape -s -L 0 -t STDIO > "$BACKUP_DIR/backup_$(date +%F).tar"
四 存储过程脚本示例
CREATE PROCEDURE get_employee_name (
IN p_emp_id INT,
OUT p_emp_name VARCHAR(100)
)
RETURNING INT
AS
BEGIN
SELECT name INTO p_emp_name FROM employees WHERE id = p_emp_id;
IF SQLCODE = 0 THEN
RETURN 0;
ELSE
RETURN -1;
END IF;
END PROCEDURE;
CALL get_employee_name(101, ?);
ALTER PROCEDURE ... COMPILE 重新编译SQLCODE/SQLSTATE 判断执行结果,必要时打印日志或返回值五 常见问题与排查要点
INFORMIXSERVER、sqlhosts 配置、网络与端口(如 1526/tcp)、实例是否运行(onstat -)INFORMIXDIR、PATH、LD_LIBRARY_PATH 是否正确加载online.log、MSGPATH 指定文件,配合 onstat -g ses、onstat -g sql 定位会话与 SQL 问题