事前に用意する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