事前に用意するDR_ONLINE_RCV1.shについて説明します。
[名称]
使用中アーカイブログの取得と表のDSIの退避
[形式]
DR_ONLINE_RCV1.sh
[機能説明]
現在使用中のアーカイブログ通番を、システムロググループおよびユーザロググループごとに取得し、作業ディレクトリ配下にファイルとしてアーカイブログを保存します。
また、すべての表のDSIをrdbdmpコマンドで退避します。
[注意事項]
本シェルスクリプトを実行する際、環境変数設定ファイルは本シェルスクリプトと同じディレクトリに配置してください。
本シェルスクリプトが異常終了した場合、出力されたSymfoware Serverのqdgメッセージに従い、エラー原因を排除したのち、本シェルスクリプトを再実行してください。
[復帰値]
0:正常終了
0以外:異常終了
[シェルスクリプト内容]
本シェルスクリプトの内容を以下に示します。
#!/bin/sh
PATH=/opt/FJSVrdb2b/bin:/opt/FJSVrdb2b/sbin:/opt/FJSVlnkexp/bin:/opt/FJSVlnkre/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin;export PATH
LD_LIBRARY_PATH=/opt/FJSVrdb2b/lib:/opt/FJSVlnkre/lib;export LD_LIBRARY_PATH
CUR=$PWD
source ${CUR}/DR_ONLINERCV_ENV.def
source /opt/FJSVlnkre/sbin/lxrepdrcom.sh
#
# Define
#
INSTPATH="/opt/FJSVrdb2b"
ARC_LIST_F=${WORKPATH}/dr_dbcopy_${RDBNAME:='RDBII'}_arclist.wk;export ARC_LIST_F
WKFILE=${WORKPATH}/dr_dbcopy_${RDBNAME:='RDBII'}.$$.wk;export WKFILE
#
# Recovery of RLP
#
for DRREP_DEFFILE_TMP in ${DRREP_DEFFILE_LIST[@]}
do
DRREP_DEFFILE=`echo ${DRREP_DEFFILE_TMP} | cut -f 1 -d ","`
RLPNAME=`echo ${DRREP_DEFFILE_TMP} | cut -f 2 -d ","`
lxrepdrrlp -V -O -p ${RLPNAME} > ${WKFILE} 2>&1
if [ $? -eq 0 ]; then
if [ "`grep "Online/Offline" ${WKFILE} | awk '{print $3}'`" = "build" ]; then
lxrepdrrlp -V -D -p ${RLPNAME} > ${WKFILE} 2> /dev/null
if [ $? -eq 0 ]; then
RLC_FIN_PATH=`tail -n 2 ${WKFILE} | head -n 1 | awk '{print $2}'`
if [ -f ${RLC_FIN_PATH} ]; then
rm ${WKFILE}
continue
fi
fi
fi
else
grep "qdg20230u" ${WKFILE} > /dev/null 2>&1
if [ $? -eq 0 ]; then
RLPDEF_FILE="`get_parameter ${DRREP_DEFFILE} RLPDEF`"
RLM_OWN_SEND_DEVICE="`get_parameter ${RLPDEF_FILE} RLM_OWN_SEND_DEVICE`"
rm ${RLM_OWN_SEND_DEVICE} > /dev/null 2>&1
RLM_OWN_RECV_DEVICE="`get_parameter ${RLPDEF_FILE} RLM_OWN_RECV_DEVICE`"
rm ${RLM_OWN_RECV_DEVICE} > /dev/null 2>&1
RLC_NUM="`get_parameter ${RLPDEF_FILE} RLC_NUM`"
i=1
while [ ${i} -le ${RLC_NUM} ]
do
RLC_OWN_DEVICE="`get_parameter ${RLPDEF_FILE} RLC_OWN_DEVICE${i}`"
rm ${RLC_OWN_DEVICE} > /dev/null 2>&1
i=$(( i + 1 ))
done
fi
fi
rm ${WKFILE} > /dev/null 2>&1
lxrepdrrlpcr -p ${RLPNAME} -G -k capture -d ${DRREP_DEFFILE}
if [ $? -ne 0 ]; then
echo "ERROR: lxrepdrrlpcr -G (RLPname:${RLPNAME}) is failed."
exit 1
fi
done
#
# check rdb
#
rdbpid > /dev/null 2>&1
if [ $? -ne 0 ]; then
rdbstart > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "ERROR: RDB is not active."
exit 1
fi
sleep 1
fi
#
# Create BCMNDB
#
case X${RDBNAME} in
X)
SYSCONFIG=${INSTPATH}/etc/rdbsysconfig
;;
*)
SYSCONFIG=${INSTPATH}/etc/${RDBNAME}.cfg
;;
esac
BCENV="`get_parameter ${SYSCONFIG} RDBBC`"
BCMNDB="`get_parameter ${BCENV} BCMNDB`"
if [ "${BCMNDB}" = "" ];then
echo "ERROR: BCMNDB parameter is not found in BC onfiguration parameter file."
exit 1
fi
for DRREP_DEFFILE_TMP in ${DRREP_DEFFILE_LIST[@]}
do
DRREP_DEFFILE=`echo ${DRREP_DEFFILE_TMP} | cut -f 1 -d ","`
RLPNAME=`echo ${DRREP_DEFFILE_TMP} | cut -f 2 -d ","`
lxrepdrrlp -V -D -p ${RLPNAME} > ${WKFILE} 2>&1
if [ $? -eq 0 ];then
RLPID=`grep "RLPid" ${WKFILE} | awk '{print$3}'`
rdbinf -i ${BCMNDB}.BC_DSI_"${RLPID}"_TL_CODE > ${WKFILE} 2>&1
if [ $? -eq 0 ];then
rm ${WKFILE}
continue
fi
fi
rm ${WKFILE} > /dev/null 2>&1
lxrepdrcrt -p ${RLPNAME} -m mndb -k capture -d ${DRREP_DEFFILE} -e nocntf
if [ $? -ne 0 ]; then
echo "ERROR: lxrepdrcrt -m mndb (RLPname:${RLPNAME}) is failed."
exit 1
fi
done
#
# Extract map
#
for DRREP_DEFFILE_TMP in ${DRREP_DEFFILE_LIST[@]}
do
DRREP_DEFFILE=`echo ${DRREP_DEFFILE_TMP} | cut -f 1 -d ","`
RLPNAME=`echo ${DRREP_DEFFILE_TMP} | cut -f 2 -d ","`
MAPFILE_PATH=`get_parameter ${DRREP_DEFFILE} MAPFILE`
if [ ! -f ${MAPFILE_PATH} ]; then
lxrepdrmap -p ${RLPNAME} -E ${MAPFILE_PATH}
if [ $? -ne 0 ]; then
echo "ERROR: lxrepdrmap (RLPname:${RLPNAME}) is failed."
exit 1
fi
fi
done
#
# Get Loggroup List and Arcive Log using number
#
ls ${DSI_BK_DEV}/*.dsiback > /dev/null 2>&1
if [ $? -ne 0 ]; then
rm ${ARC_LIST_F} > /dev/null 2>&1
LOGGRP_LST=( `cat ${DSI_LIST} | cut -f 2 -d "," | sort | uniq` )
for LOGGRP_NAME in ${LOGGRP_LST[@]}
do
ARC_USE=`rdblog -V -a -g ${LOGGRP_NAME} | grep "using" | awk '{print $1}'`
[ "${ARC_USE}" -eq 0 ] 2>/dev/null
if [ $? -ge 2 ];then
echo "ERROR: rdblog -V -a -g (Loggroup name:${LOGGRP_NAME}) is failed."
exit 1
fi
echo "${LOGGRP_NAME},${ARC_USE}" >> ${ARC_LIST_F}
done
fi
#
# do rdbdmp
#
while read line
do
DB_NAME=`echo ${line} | cut -f 1 -d "."`
DSI_NAME=`echo ${line} | cut -f 1 -d "," | cut -f 2 -d "."`
LOGGRP_NAME=`echo ${line} | cut -f 2 -d ","`
if [ -f ${DSI_BK_DEV}/${LOGGRP_NAME}-${DB_NAME}-${DSI_NAME}.dsiback ]; then
continue
fi
rdbdmp -i ${DB_NAME}.${DSI_NAME} -f ${LOGGRP_NAME}-${DB_NAME}-${DSI_NAME}.dsiback@${DSI_BK_DEV}
if [ $? -ne 0 ]; then
echo "ERROR: rdbdmp is failed."
exit 1
fi
done < ${DSI_LIST}
exit 0