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

    OracleのセッションIDからOSのプロセスIDを調べる方法

    Oracleで障害調査を行いたいときなどに、sidからOSのプロセスI…

  2. Oracle

    長時間動いているセッション(SQL)の情報を取得するSQL

    Oracleで長時間稼働している処理(SQL)の情報を取得するSQLが…

  3. Oracle

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

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

  4. Oracle

    【Oracleメモ】テーブルやインデックスの統計情報の収集状況を確認するSQL

    Oracle11g、Oracl12cなどで利用可能。テーブルやイン…

  5. Oracle

    Linux版Oracle Database 11gの起動手順と停止手順

    すごく基礎的なことなんですが、Linux版のOracle Da…

  6. Oracle

    Oracleでカラムのデータをほぼ同じ文字数の文字で置換する方法

    つまりどういうことだってばよ!!!って言われそうですが。 噛み砕いてい…

コメント

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

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

最近の記事

  1. PHP PhantomJSでFatal error: Unc…
  2. 【Oracle】DataPumpの対話式コマンドモードを抜け…
  3. CentOS7のPHP5.6にPhpSpreadsheetを…
  4. Azure仮想マシン(CentOS 7)のStandardデ…
  5. 【CentOS 7】特定ユーザーのクォータ設定を削除(無制限…
PAGE TOP