Oracleの統計情報を手動で(といってもCronの自動実行で)更新するためのシェルスクリプトを作成してみたのでメモ的に残しておきたいと思います。 Cronでの一回限りの実行がしたかったので、『スケジュールでやればいいじゃん』というツッコミは無しでお願いします‥。
使い方は単純なので同じような処理が必要な方はぜひどうぞ。
#!/bin/sh #--------------------------------------------------------------------# #- 環境設定 #--------------------------------------------------------------------# #スクリプト名 SCRIPTNAME=`/bin/basename $0` #プロセスID PID=$$ #ホスト名 HOSTNAME=`hostname` #通知メール設定 MAILTO=root MAILFILE=/tmp/update_statstables.log MAIL_ON_END=yes ERROR_SUBJ="[ERROR] Oracle DBMS_STATS Update for ${HOSTNAME}" #その他環境設定 export LANG=ja_JP.UTF-8 #--------------------------------------------------------------------# #- Function >> メール送信 #--------------------------------------------------------------------# function mail_notification { if [ "$MAILTO" != "" ] ; then /bin/mail -s "$1" $MAILTO < $MAILFILE fi exit 1 } #--------------------------------------------------------------------# #- Function >> メッセージ表示 #--------------------------------------------------------------------# Msg () { echo "`date '+%Y/%m/%d %T'` ${SCRIPTNAME}[${PID}]: $*" } #--------------------------------------------------------------------# #- メイン処理 #--------------------------------------------------------------------# Msg "############### START ###############" > $MAILFILE su - oracle -c " sqlplus -s / as sysdba << EOF set feedback off whenever sqlerror exit sql.sqlcode BEGIN DBMS_STATS.GATHER_SCHEMA_STATS (OWNNAME => '[対象のユーザー名]',OPTIONS => 'GATHER'); END; / exit sql.sqlcode EOF " RET=$? if [ $RET -eq 0 ] then Msg "DBMS_STATS exec complete successfully." >> $MAILFILE else Msg "DBMS_STATS exec failed." >> $MAILFILE mail_notification "$ERROR_SUBJ" fi Msg "############### END ###############" >> $MAILFILE #-- メールの送信 --# if [ "$MAIL_ON_END" != "no" ] ; then mail_notification "[COMPLETE] Oracle DBMS_STATS Update for ${HOSTNAME}" fi exit 0