Oracle

  (最終更新日:2017.07.14)

【Oracle】統計情報をCronで手動更新する為のスクリプト

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
スポンサーリンク
スポンサーリンク

関連記事

  1. Oracle

    SSLを無効化して非SSL(http)でOEMにアクセスする方法

    最近のIE(例えばIE10も)でOracleのOEMにアクセスすると、…

  2. Oracle

    【SQL*Plus】SYSDBA権限でリモートサーバに簡易接続ネーミングで接続する方法

    リモートのOracleサーバにSQL*Plusで接続する際に、SYSD…

  3. Oracle

    DBD-Oracleのインストール時にdemo_rdbms.mkが無い場合。Clientは必要なのか…

    PerlモジュールのDBD-Oracleをソースからインストールする際…

  4. Oracle

    【Oracle】セッションがKILLEDのまま残り続けてしまう時の対処方法

    Oracleで特定のセッションを強制終了しようと ALTER SYST…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最近の記事

  1. Azure仮想マシン(CentOS 7)のStandardデ…
  2. 【CentOS 7】特定ユーザーのクォータ設定を削除(無制限…
  3. Impdp時にtablesを使うとファンクションやストアドは…
  4. Can’t locate HTTP/Reques…
  5. 【PHP】cURLでベーシック認証のページへPOSTして結果…
PAGE TOP