#!/bin/sh BASE_PATH=`dirname $0` . ${BASE_PATH}/batchenv.sh ######################################<+>####################################### # File: # Project: # Description: # Language: # Date: # Author: # Update: ######################################<+>####################################### error_message() { echo ${LOG_STR} LOG_STR=`log_output C "" ` echo ${LOG_STR} USAGE="USAGE: ./${SHELL_BASENAME} -s[SCHEMA] -p[PASSWORD] -l[LOG_DIR] -d[FILE_DIR] -f[FILE_NAME]" USAGE_EXP="\\t-s[SCHEMA]・・・・・・スキーマ名\\n\ \\t-p[PASSWORD]・・・・・パスワード\\n\ \\t-l[LOG_DIR] ・・・・・ログディレクトリ名(省略可)\\n\ \\t-d[FILE_DIR] ・・・・ 抽出用ファイル出力ディレクトリ名(省略可)\\n\ \\t-f[FILE_NAME] ・・・・抽出用ファイル名(省略可)" LOG_STR=`log_output C "${USAGE}"` echo -e ${LOG_STR} echo -e ${USAGE_EXP} } # メイン関数 main() { LOG_STR=`log_output I "開始 : DB抽出(${SHELL_BASENAME})" ` echo ${LOG_STR} # 引数設定内容 LOG_STR=`log_output I "SCHEMA:${SCHEMA}"` echo ${LOG_STR} LOG_STR=`log_output I "PASSWORD:${PASSWORD_MASKING}"` echo ${LOG_STR} LOG_STR=`log_output I "LOG_DIR:${LOG_DIR}"` echo ${LOG_STR} LOG_STR=`log_output I "FILE_DIR:${FILE_DIR}"` echo ${LOG_STR} LOG_STR=`log_output I "FILE_NAME:${FILE_NAME}"` echo ${LOG_STR} # パラメータの生成 TMP_SQL=${LOG_DIR}/${SHELL_BASENAME}.$$ /bin/cat << EOF > ${TMP_SQL} WHENEVER SQLERROR EXIT SQL.SQLCODE set echo off set feedback off set heading off set linesize 32767 set pagesize 0 set pause off set termout on set verify off select ASSET_ID || ',' || ASSET_NAME || ',' || UPDATE_USER || ',' || REGIST_DATE_TIME || ',' || UPDATE_DATE_TIME || ',' || DELETE_FLAG from ASSET ; exit; EOF # ステータス初期値設定 RTN_STATUS=${RTN_NORMAL} # sqlplus -l:ログイン試行回数を1回に制限する -s:サイレントモードで起動する LOG_STR=`log_output I "sqlplus -s -l ${SCHEMA}/${PASSWORD_MASKING} @${TMP_SQL} > ${FILE_DIR}/${FILE_NAME}" ` echo ${LOG_STR} sqlplus -s -l ${SCHEMA}/${PASSWORD} @${TMP_SQL} > ${FILE_DIR}/${FILE_NAME} Rtn=$? if [ ${Rtn} -ne 0 ]; then cat ${FILE_DIR}/${FILE_NAME} LOG_STR=`log_output C "SQLCODE=${Rtn} 異常終了 : DB抽出(${SHELL_BASENAME})" ` echo ${LOG_STR} RTN_STATUS=${RTN_ERROR} else LOG_STR=`log_output I "DB抽出ファイル情報" ` echo ${LOG_STR} LOG_STR=`log_output I "ls -l ${FILE_DIR}/${FILE_NAME}" ` echo ${LOG_STR} ls -l ${FILE_DIR}/${FILE_NAME} LOG_STR=`log_output I "正常終了 : DB抽出(${SHELL_BASENAME})" ` echo ${LOG_STR} rm -f ${TMP_SQL} fi exit ${RTN_STATUS} } # =============================================================================# # 変数初期化 # =============================================================================# SCHEMA="" PASSWORD="" LOG_DIR="" FILE_DIR="" FILE_NAME="" # 引数取得 TOOL_ARG=$* # 引数チェック for ARG in ${TOOL_ARG}; do # 引数の最初の2文字 val1=`echo $ARG | awk '{val1=substr($1,1,2); print(val1);}'` # 引数の3文字目以降 val2=`echo $ARG | awk '{val2=substr($1,3); print(val2);}'` # スキーマ名 if [ "${val1}" = "-s" ];then # 重複チェック if [ "${SCHEMA}" != "" ];then LOG_STR=`log_output C "[${val1}]スキーマ名重複指定"` error_message exit ${RTN_ERROR} elif [ "${val2}" = "" ];then LOG_STR=`log_output C "[${val1}]スキーマ名不正"` error_message exit ${RTN_ERROR} fi SCHEMA=${val2} # パスワード elif [ "${val1}" = "-p" ];then # 重複チェック if [ "${PASSWORD}" != "" ];then LOG_STR=`log_output C "[${val1}]パスワード重複指定"` error_message exit ${RTN_ERROR} elif [ "${val2}" = "" ];then LOG_STR=`log_output C "[${val1}]パスワード不正"` error_message exit ${RTN_ERROR} fi PASSWORD=${val2} # ログディレクトリ名 elif [ "${val1}" = "-l" ];then # 重複チェック if [ "${LOG_DIR}" != "" ];then LOG_STR=`log_output C "[${val1}]ログディレクトリ名重複指定"` error_message exit ${RTN_ERROR} elif [ "${val2}" = "" ] || [ ! -d "${val2}" ];then LOG_STR=`log_output C "[${val1}]ログディレクトリ名不正"` error_message exit ${RTN_ERROR} fi LOG_DIR=${val2} # 抽出用ファイル出力ディレクトリ名 elif [ "${val1}" = "-l" ];then # 重複チェック if [ "${FILE_DIR}" != "" ];then LOG_STR=`log_output C "[${val1}]抽出用ファイル出力ディレクトリ名重複指定"` error_message exit ${RTN_ERROR} elif [ "${val2}" = "" ] || [ ! -d "${val2}" ];then LOG_STR=`log_output C "[${val1}]抽出用ファイル出力ディレクトリ名不正"` error_message exit ${RTN_ERROR} fi FILE_DIR=${val2} # 抽出ファイル名 elif [ "${val1}" = "-f" ];then # 重複チェック if [ "${FILE_NAME}" != "" ];then LOG_STR=`log_output C "[${val1}]抽出ファイル名重複指定"` error_message exit ${RTN_ERROR} elif [ "${val2}" = "" ];then LOG_STR=`log_output C "[${val1}]抽出ファイル名不正"` error_message exit ${RTN_ERROR} fi FILE_NAME=`basename ${val2}` fi done # 必須引数指定確認チェック if [ "${SCHEMA}" = "" ];then LOG_STR=`log_output C "スキーマ名未指定"` error_message exit ${RTN_ERROR} elif [ "${PASSWORD}" = "" ];then LOG_STR=`log_output C "パスワード未指定"` error_message exit ${RTN_ERROR} fi # 省略可引数指定確認、デフォルト設定 if [ "${LOG_DIR}" = "" ];then LOG_DIR="." fi if [ "${FILE_DIR}" = "" ];then FILE_DIR="." fi if [ "${FILE_NAME}" = "" ];then FILE_NAME=${SHELL_BASENAME}.csv fi # 日付 DATE=`date +%Y%m%d` DATE_ALL=`date +%Y%m%d%H%M%S` # ログファイル LOGFILE=${LOG_DIR}/${SHELL_BASENAME}_${DATE_ALL}.log # =============================================================================# # 主処理実行 # =============================================================================# main $* 1>>${LOGFILE} 2>&1
最新コメント