ページの先頭行へ戻る
Linkexpress Replication optionV5.0L27 導入運用ガイド

H.4.1 DR_ONLINE_RCV1.sh

事前に用意するDR_ONLINE_RCV1.shについて説明します。

[名称]

使用中アーカイブログの取得と表のDSIの退避

[形式]

DR_ONLINE_RCV1.sh

[機能説明]

現在使用中のアーカイブログ通番を、システムロググループおよびユーザロググループごとに取得し、作業ディレクトリ配下にファイルとしてアーカイブログを保存します。
また、すべての表のDSIをrdbdmpコマンドで退避します。

[注意事項]

[復帰値]

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