#!/bin/sh
########################################################################
# 命令path设定 #
########################################################################
#echoコマンド
ECHO=/bin/echo
#dateコマンド
DATE=/bin/date
#lsコマンド
LS=/bin/ls
#rmコマンド
RM=/bin/rm
#mvコマンド
MV=/bin/mv
########################################################################
#
Oracle设定 #
########################################################################
#Oracle
ORACLE_HOME=/opt/oracle/app/oracle/product/11.2.0/db
export ORACLE_HOME
ORACLE_SID=XXXXXXX
export ORACLE_SID
NLS_LANG=Japanese_Japan.JA16SJISTILDE
export NLS_LANG
PATH=$PATH:${ORACLE_HOME}/bin
export PATH
#Oracle连接定义
export SQL_CONNECT_KD123
export SQL_CONNECT_CMNMST
########################################################################
# log出力设定 #
########################################################################
#log路径定义
LOGFILE_DIR=`pwd`
export LOGFILE_DIR
#log名定义(本shell的文件名去掉扩展名)
#LOGFILE_NAME=$LOGFILE_DIR/${0}.log
LOGFILE_NAME=$LOGFILE_DIR/${0%\.*}.log
export LOGFILE_NAME
#保存export对象表的文件定义
syori_Tables_kd123=$LOGFILE_DIR/11_com_expdp_Tables_kd123.txt
export syori_Tables_kd123
syori_Tables_cmnmst=$LOGFILE_DIR/12_com_expdp_Tables_cmnmst.txt
export syori_Tables_cmnmst
########################################################################
# 返回值定义 #
########################################################################
#0:正常 100:异常
OK_RETURN_CD=0
NG_RETURN_CD=100
########################################################################
# 执行时返回值check函数 #
########################################################################
check_returncd(){
#返回值"0"以外,异常终了 nkf --overwrite -w $LOGFILE_NAME
if [ ${1} !=
0 ] ; then
$ECHO ""
>> $LOGFILE_NAME
$ECHO "`$DATE`
テーブルエクスポートに失敗しました。" >>
$LOGFILE_NAME
$ECHO "`$DATE`
テーブルエクスポート処理を終了します。" >>
$LOGFILE_NAME
$ECHO "`$DATE` テーブルエクスポート処理異常終了 return:"$NG_RETURN_CD""
>> $LOGFILE_NAME
exit $NG_RETURN_CD
fi
return
$OK_RETURN_CD
} ########################################################################
#
ログファイル有無チェック #
########################################################################
file_check(){
#戻り値が"0"の場合はファイルをログファイルを削除
if [ $? = 0
] ; then
#前回実行時ログファイル削除
$RM -f $LOGFILE_NAME
if [ $? != 0 ] ; then
exit $NG_RETURN_CD
fi
$ECHO "`$DATE` 前回実行時シェルログファイル削除正常終了 return:"$OK_RETURN_CD""
>> $LOGFILE_NAME
$ECHO "" >> $LOGFILE_NAME
fi
}
########################################################################
#
SQLPLUS起動チェック #
########################################################################
sqlplus_starting_check(){
`sqlplus -L $1<
>/dev/null 2>&1
exit
EOF`
if [ $? != 0
] ; then #SQLPLUS起動失敗固定メッセージ出力
$ECHO "`$DATE` SQLPLUSの起動に失敗しました。" >>
$LOGFILE_NAME
$ECHO "`$DATE` ログイン情報が正しい及びORACLEデータベースが起動していることを確認してください。"
>> $LOGFILE_NAME
$ECHO "`$DATE` テーブルエクスポート処理異常終了 return:"$NG_RETURN_CD""
>> $LOGFILE_NAME
exit $NG_RETURN_CD
fi
}
########################################################################
#
エクスポート出力先ディレクトリ取得 #
########################################################################
#エクスポート出力先ディレクトリ取得
get_output_dir(){
OUTPUT_DIR=`sqlplus -S $1
<< EOF
set heading off
set pagesize 0;
set feedback off;
set verify off;
SELECT DIRECTORY_PATH FROM
ALL_DIRECTORIES WHERE DIRECTORY_NAME = 'DIR_EXP_DMP';
exit;
EOF`
if [ -z "$OUTPUT_DIR" ]; then
$LS -l $LOGFILE_NAME >/dev/null
2>&1
$ECHO "`$DATE` テーブルエクスポートに失敗しました。 "
>> $LOGFILE_NAME
$ECHO "`$DATE` エクスポート先ディレクトリ【DIR_EXP_DMP】が設定されていません。"
>> $LOGFILE_NAME
$ECHO "`$DATE` エクスポート先ディレクトリを設定してから実行してください。"
>> $LOGFILE_NAME
$ECHO "`$DATE` テーブルエクスポート処理を終了します。"
>> $LOGFILE_NAME
$ECHO "`$DATE` テーブルエクスポート処理異常終了 return:"$NG_RETURN_CD""
>> $LOGFILE_NAME
exit $NG_RETURN_CD
else
$LS -l $OUTPUT_DIR >/dev/null
2>&1
if [ $? != 0 ] ;then
$LS -l $LOGFILE_NAME >/dev/null
2>&1
$ECHO "`$DATE` テーブルエクスポートに失敗しました。 "
>> $LOGFILE_NAME
$ECHO "`$DATE` エクスポート出力先ディレクトリ【DIR_EXP_DMP】が存在していません。 "
>> $LOGFILE_NAME
$ECHO "`$DATE` エクスポート先ディレクトリを確認してください。"
>> $LOGFILE_NAME
$ECHO "`$DATE` テーブルエクスポート処理を終了します。"
>> $LOGFILE_NAME
$ECHO "`$DATE` テーブルエクスポート処理異常終了 return:"$NG_RETURN_CD""
>> $LOGFILE_NAME
exit $NG_RETURN_CD
fi
export OUTPUT_DIR
fi
}
########################################################################
#dumpファイルエクスポート #
########################################################################
func_export(){
#取り扱い対象テーブル定義ファイルの有無の確認
$LS -l $2
>/dev/null 2>&1
if [ $? !=
0 ] ;then
$ECHO `$DATE` "$2 ファイル存在しません、該当ファイルよりエクスポートは行いませんでした。 "
>> $LOGFILE_NAME
return $OK_RETURN_CD
fi
#SQLPLUS起動チェック
sqlplus_starting_check $1
#エクスポート取得
get_output_dir $1
$ECHO
"-----------------------------------------------------------"
$ECHO "移動元(エクスポート先):【${OUTPUT_DIR}】"
$ECHO
"移動先 :【${LOGFILE_DIR}】"
$ECHO
"-----------------------------------------------------------"
$ECHO
`$DATE` "【$2 】より処理を開始します??? "
$ECHO
`$DATE` "【$2 】より処理を開始します??? " >>
$LOGFILE_NAME
cat ${2} | while read line
do
if [ -z "$line" ]; then
#$ECHO "空行スキップ"
continue
fi
if [ `expr index "$line" "#" ` = 1 ] ;then
#$ECHO "コメント行スキップ"
continue
fi
$ECHO `$DATE`
"【${line}】エクスポート開始" $ECHO `$DATE` "【${line}】エクスポート開始" >>
$LOGFILE_NAME
#テーブルエクスポート
#expdp $1 DIRECTORY=DIR_MNT DUMPFILE=${line}.dmp tables=${line}
log=${line}.log >/dev/null
2>&1
expdp $1 DIRECTORY=DIR_EXP_DMP DUMPFILE=${line}.dmp tables=${line}
log=${line}.log >/dev/null
2>&1
check_returncd $?
$ECHO `$DATE` "【${line}】エクスポート正常終了 return:$OK_RETURN_CD "
>> $LOGFILE_NAME
#パーミッション変更
sudo -u oracle chmod o+r $OUTPUT_DIR/${line}.dmp
check_returncd $?
$ECHO `$DATE` "【${line}.dmp】chmod 正常終了 "
>> $LOGFILE_NAME
#エクスポート先から移動先(シェル格納先)にdumpファイル移す(移動元を削除する)
#$MV -f $OUTPUT_DIR/${line}.dmp $LOGFILE_DIR
cp -p $OUTPUT_DIR/${line}.dmp $LOGFILE_DIR
sudo -u jp1user rm -f $OUTPUT_DIR/${line}.dmp
check_returncd $?
$ECHO `$DATE` "【${line}.dmp】MV 正常終了 "
>> $LOGFILE_NAME
#エクスポート先から移動先(シェル格納先)にlogファイル移す(移動元を削除する)
#$MV -f $OUTPUT_DIR/${line}.log $LOGFILE_DIR
cp -p $OUTPUT_DIR/${line}.log $LOGFILE_DIR
sudo -u jp1user rm -f $OUTPUT_DIR/${line}.log
check_returncd $?
$ECHO `$DATE` "【${line}.log】MV 正常終了 "
>> $LOGFILE_NAME
$ECHO `$DATE` "【${line}】エクスポート正常終了 " >> $LOGFILE_NAME
$ECHO `$DATE` "【${line}】エクスポート正常終了 "
done
$ECHO `$DATE` "【$2 】より処理完了しました。 "
>> $LOGFILE_NAME
$ECHO `$DATE` "【$2 】より処理完了しました。 "
}
#ログファイルの有無の確認
$LS -l $LOGFILE_NAME >/dev/null
2>&1
file_check $?
#SQLPLUS起動ディレクトリ
SQLPLUS_DIR=$LOGFILE_DIR
export SQLPLUS_DIR
#SQLPLUS起動ディレクトリへ移動
cd $SQLPLUS_DIR
#BU回線テーブルエクスポート
func_export $SQL_CONNECT_KD123 $syori_Tables_kd123
#共通マスタテーブルエクスポート
func_export $SQL_CONNECT_CMNMST $syori_Tables_cmnmst
exit $OK_RETURN_CD