Вот простой скрипт, который должен запускаться от владельца экземпляра Db2.
Предполагается, что экземпляр Db2 запускается автоматически.Если это не так, просто закомментируйте db2gcf -s
и раскомментируйте db2gcf -u
.
Сценарий ожидает запуска экземпляра заданное количество секунд и активирует все локальные базы данных, найденные в системном каталоге экземпляра Db2.
Запуск сценария может быть запланирован при запуске ОС через запись crontab владельца экземпляра Db2, как показано.
В домашнем каталоге владельца экземпляра 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 $0).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