事前に用意するDR_ONLINE_RCV2.shについて説明します。
[名称]
RDBディクショナリの退避とリカバリポイントの設定
[形式]
DR_ONLINE_RCV2.sh
[機能説明]
rdbrtrコマンドによって、RDBディクショナリとすべてのデータベーススペースに更新抑止の利用規定を設定し、rdbdmpdicコマンドによってRDBディクショナリを退避します。
rdbsetrpコマンドによってリカバリポイントを設定し、rdbrlsコマンドによってRDBディクショナリとすべてのデータベーススペースの更新抑止の利用規定を解除します。
その後、複写元システムのRLP環境を復旧し、複写元システムのRERUNログの取得開始とDRレプリケーション業務の起動を行います。
[注意事項]
本シェルスクリプトを実行する際、環境変数設定ファイルは本シェルスクリプトと同じディレクトリに配置してください。
本シェルスクリプトが異常終了した場合、出力された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
#
# Define
#
WKFILE=${WORKPATH}/dr_dbcopy_${RDBNAME:='RDBII'}.$$.wk;export WKFILE
ERRFILE=${WORKPATH}/dr_dbcopy_${RDBNAME:='RDBII'}.$$.err;export ERRFILE
#
# 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
#
# do rdbrtr
#
rdbrtr -z -rw > ${ERRFILE} 2>&1
if [ $? -ne 0 ]; then
grep "qdg12136w" ${ERRFILE} > /dev/null 2>&1
if [ $? -ne 0 ]; then
cat ${ERRFILE}
echo "ERROR: rdbrtr is failed."
rm ${ERRFILE}
exit 1
fi
fi
while read DB_SPACE_NAME
do
rdbrtr -p ${DB_SPACE_NAME} -rw > ${ERRFILE} 2>&1
if [ $? -ne 0 ]; then
grep "qdg12133w" ${ERRFILE} > /dev/null 2>&1
if [ $? -ne 0 ]; then
cat ${ERRFILE}
echo "ERROR: rdbrtr ( DB space name:${DB_SPACE_NAME} ) is failed."
rm ${ERRFILE}
exit 1
fi
fi
done < ${DBSPACE_LIST}
rm ${ERRFILE}
#
# do rdbdmpdic
#
if [ ! -f ${DIC_BK_DEV}/${RDBNAME:='RDBII'}.dicback ]; then
rdbdmpdic -f ${RDBNAME:='RDBII'}.dicback@${DIC_BK_DEV} -N
if [ $? -ne 0 ]; then
echo "ERROR: rdbdmpdic is failed."
exit 1
fi
fi
#
# Set Recovery Point
#
rdbsetrp ${RCV_P_NAME}
if [ $? -ne 0 ]; then
echo "ERROR: rdbsetrp is failed."
exit 1
fi
#
# do rdbrls
#
rdbrls -z -rw > ${ERRFILE} 2>&1
if [ $? -ne 0 ]; then
grep "qdg12130w" ${ERRFILE} > /dev/null 2>&1
if [ $? -ne 0 ]; then
cat ${ERRFILE}
echo "ERROR: rdbrls is failed."
rm ${ERRFILE}
exit 1
fi
fi
while read DB_SPACE_NAME
do
rdbrls -p ${DB_SPACE_NAME} -rw
if [ $? -ne 0 ]; then
grep "qdg12127w" ${ERRFILE} > /dev/null 2>&1
if [ $? -ne 0 ]; then
cat ${ERRFILE}
echo "ERROR: rdbrtr ( DB space name:${DB_SPACE_NAME} ) is failed."
rm ${ERRFILE}
exit 1
fi
fi
done < ${DBSPACE_LIST}
rm ${ERRFILE}
#
# RLP Online
#
for RLPNAME in ${RLPNAME_LIST[@]}
do
lxrepdrrlp -V -O -p ${RLPNAME} > ${WKFILE} 2>&1
if [ $? -eq 0 ]; then
if [ "`grep "Online/Offline" ${WKFILE} | awk '{print $3}'`" = "online" ]; then
rm ${WKFILE}
continue
fi
fi
rm ${WKFILE}
lxrepdrena -p ${RLPNAME} -k capture
if [ $? -ne 0 ]; then
echo "ERROR: lxrepdrena (RLPname:${RLPNAME}) is failed."
exit 1
fi
done
#
# Start DR Replication work
#
for RLPNAME in ${RLPNAME_LIST[@]}
do
lxrepdrrep -p ${RLPNAME} -a start -k capture
if [ $? -ne 0 ]; then
echo "ERROR: lxrepdrrep -a start (RLPname:${RLPNAME}) is failed."
exit 1
fi
done
exit 0