IBM Db2:如何在(重新)启动后自动激活数据库?
IBM Db2: How to automatically activate databases after (re)boot?
我有几个 Db2 数据库,我想在系统重新启动后自动 activate。重新启动后重新启动 Db2 服务不是问题,但激活数据库需要访问实例配置文件。
服务start/stop 由系统/systemctl 控制。在这些脚本中包含一些用户控制的设置脚本似乎不是一个好主意。我简要地查看了 enable-linger for the Db2 instance user or to use EnvironmentFile 以设置实例配置文件。
如何在重启后激活所有或一组数据库?你在 systemd 中使用 user/group/EnvironmentFile 吗?是开启linger还是有其他方法?
这是一个简单的脚本,必须 运行 来自 Db2 实例所有者。
它假设 Db2 实例是自动启动的。如果不是这种情况,只需注释掉 db2gcf -s
并取消注释 db2gcf -u
.
该脚本等待实例启动配置的秒数,并激活在 Db2 实例系统目录中找到的所有本地数据库。
脚本可以在 OS 启动时通过 Db2 实例所有者的 crontab 条目安排到 运行,如图所示。
在 Db2 实例所有者的主目录中创建包含命令历史记录的日志文件(请参阅 ${LOG} 变量)。
#!/bin/sh
#
# Function: Activates all local DB2 databases
# Crontab entry:
# @reboot /home/scripts/db2activate.sh >/dev/null 2>&1
#
TIMEOUT=300
VERBOSE=${1:-"noverbose"}
export LC_ALL=C
if [ ! -x ~/sqllib/db2profile ]; then
echo "Must be run by a DB2 instance onwer" >&2
exit 1
fi
[ -z ${DB2INSTANCE} ] && . ~/sqllib/db2profile
if [ "${VERBOSE}" != "verbose" ]; then
LOG=~/.$(basename [=10=]).log
exec 1>>${LOG}
exec 2>>${LOG}
fi
set -x
printf "\n*** %s ***\n" $(date +"%F-%H.%M.%S")
# Wait for the instance startup
# (or even start it with 'db2gcf -u' instead of checking status: 'db2gcf -s')
TIME1=${SECONDS}
while [ $((SECONDS-TIME1)) -le ${TIMEOUT} ]; do
db2gcf -s
# db2gcf -u
rc=$?
[ ${rc} -eq 0 ] && break
sleep 5
done
if [ ${rc} -ne 0 ]; then
echo "Instance startup timeout of ${TIMEOUT} sec reached" >&2
exit 2
fi
for dbname in $(db2 list db directory | awk -v RS='' '/= Indirect/' | grep '^ Database alias' | sort -u | cut -d'=' -f2); do
db2 activate db ${dbname}
done
必须来自 Db2 实例所有者 运行 的简单脚本。
su - <INSTANCE>
db2iauto-on <INSTANCE>
退出
退出
运行 用户 root
./<INSTANCE>
/sqllib/bin/db2fmcu -d;
cd /<INSTANCE>
/sqllib/bin/
./db2fmcu -u -p /opt/ibm/db2/<VERSION DB2>
/bin/db2fmcd
./db2fm -i <INSTANCE>
-U
./db2fm -i <INSTANCE>
-u
./db2fm -i <INSTANCE>
-f on
ps-ef | grep db2fm|grep <INSTANCE>
完成
我有几个 Db2 数据库,我想在系统重新启动后自动 activate。重新启动后重新启动 Db2 服务不是问题,但激活数据库需要访问实例配置文件。
服务start/stop 由系统/systemctl 控制。在这些脚本中包含一些用户控制的设置脚本似乎不是一个好主意。我简要地查看了 enable-linger for the Db2 instance user or to use EnvironmentFile 以设置实例配置文件。
如何在重启后激活所有或一组数据库?你在 systemd 中使用 user/group/EnvironmentFile 吗?是开启linger还是有其他方法?
这是一个简单的脚本,必须 运行 来自 Db2 实例所有者。
它假设 Db2 实例是自动启动的。如果不是这种情况,只需注释掉 db2gcf -s
并取消注释 db2gcf -u
.
该脚本等待实例启动配置的秒数,并激活在 Db2 实例系统目录中找到的所有本地数据库。
脚本可以在 OS 启动时通过 Db2 实例所有者的 crontab 条目安排到 运行,如图所示。
在 Db2 实例所有者的主目录中创建包含命令历史记录的日志文件(请参阅 ${LOG} 变量)。
#!/bin/sh
#
# Function: Activates all local DB2 databases
# Crontab entry:
# @reboot /home/scripts/db2activate.sh >/dev/null 2>&1
#
TIMEOUT=300
VERBOSE=${1:-"noverbose"}
export LC_ALL=C
if [ ! -x ~/sqllib/db2profile ]; then
echo "Must be run by a DB2 instance onwer" >&2
exit 1
fi
[ -z ${DB2INSTANCE} ] && . ~/sqllib/db2profile
if [ "${VERBOSE}" != "verbose" ]; then
LOG=~/.$(basename [=10=]).log
exec 1>>${LOG}
exec 2>>${LOG}
fi
set -x
printf "\n*** %s ***\n" $(date +"%F-%H.%M.%S")
# Wait for the instance startup
# (or even start it with 'db2gcf -u' instead of checking status: 'db2gcf -s')
TIME1=${SECONDS}
while [ $((SECONDS-TIME1)) -le ${TIMEOUT} ]; do
db2gcf -s
# db2gcf -u
rc=$?
[ ${rc} -eq 0 ] && break
sleep 5
done
if [ ${rc} -ne 0 ]; then
echo "Instance startup timeout of ${TIMEOUT} sec reached" >&2
exit 2
fi
for dbname in $(db2 list db directory | awk -v RS='' '/= Indirect/' | grep '^ Database alias' | sort -u | cut -d'=' -f2); do
db2 activate db ${dbname}
done
必须来自 Db2 实例所有者 运行 的简单脚本。
su - <INSTANCE>
db2iauto-on <INSTANCE>
退出
退出
运行 用户 root
./<INSTANCE>
/sqllib/bin/db2fmcu -d;
cd /<INSTANCE>
/sqllib/bin/
./db2fmcu -u -p /opt/ibm/db2/<VERSION DB2>
/bin/db2fmcd
./db2fm -i <INSTANCE>
-U
./db2fm -i <INSTANCE>
-u
./db2fm -i <INSTANCE>
-f on
ps-ef | grep db2fm|grep <INSTANCE>