IBM Db2:如何在(重新)引导后自动激活数据库?

时间:2019-07-05 07:43:18

标签: cron db2 systemd db2-luw

我有几个Db2数据库,我想在系统重启后自动activate。重新启动后重新启动Db2服务不是问题,但是激活数据库需要访问实例配置文件。

服务启动/停止由system / systemctl控制。在这些脚本中包含一些用户控制的安装脚本似乎不是一个好主意。我为Db2实例用户简要地研究了enable-linger或使用EnvironmentFile来设置实例配置文件。

重启后如何激活全部或一组数据库?您是否在systemd中使用user / group / EnvironmentFile?您是否启用了延迟或有其他方法?

2 个答案:

答案 0 :(得分:1)

这是一个简单的脚本,必须从Db2实例所有者运行。
假定Db2实例是自动启动的。如果不是这种情况,只需注释掉db2gcf -s并取消注释db2gcf -u
该脚本将等待实例启动配置的秒数,然后激活Db2实例系统目录中找到的所有本地数据库。
该脚本可以安排为通过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 $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

答案 1 :(得分:1)

必须从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>

完成