RMANバックアップはCRONジョブを介して実行しますが、CRONですぐに使えるメールを見つけてほぼを実行します。 RMAN出力を/ dev/nullに送信できるため、電子メールは送信されません。RMANが正常に実行された場合に望ましい結果になりますが、RMANジョブでエラーが発生した場合は、標準出力全体が必要です。レビューのためにDBAチームにメールで送信されます。障害が発生した場合にのみ標準出力をcronにパイプ処理するbashシェルスクリプトでRMANスクリプトをラップできると思いますが、これを行うより良い方法はありますか?
要約する:
これがすでに尋ねられた場合、私の謝罪。私は多くの1回限りの質問とシナリオを見つけましたが、希望する結果と正確に一致していると感じたものはありません。
ありがとう!
バックアップを実行するbashスクリプト(RMAN、datapump、およびxtrabackupとMySQLのダンプを同様の方法で作成)を作成し、それをcronから呼び出します。そうすれば、メールを好きなように処理できます。
簡単なcrontab行は次のようになります
00 18 * * 0-6 /dba/bin/rman.sh > /tmp/dba_rman_SID.log 2>&1
その後、すべてがスクリプトで行われます。
したがって、RMANを含むいくつかの一般的な変数を定義します。
export RMAN="${Oracle_HOME}/bin/rman target /"
...
etc etc
次に、ローカルファイルから必要なメールのリスト(1行に1つ)をインポートします
declare -a EMAILS
readarray -t EMAILS < .emails.dat
次に、エラー処理と電子メールのために後で使用できるいくつかの便利な手順を定義します
abort_with_error()
{
echo
echo "Error :" $1
echo
echo "Error Code :" ${ERR}
echo
export SUBJECT="Error - ${SUBJECT}"
send_email
exit 1
}
send_email()
{
echo
echo "Sending logfile via email to the following :"
echo
for EMAIL in ${EMAILS[@]}
do
echo ${EMAIL}
echo
done
for EMAIL in ${EMAILS[@]}
do
case $EMAIL in
\#*) ;;
*) ${MAILX} -s "${SUBJECT}" ${EMAIL} < ${LOG_FILE} ;;
esac
done
}
これで、すべてをログファイルに出力するためにラップされるメインプロセスです。これは簡単な例ですが、基本的な方法を示しています。
{
//add what you want your script to do here - can be many things for example:
${RMAN}<<EOF
delete noprompt force obsolete;
exit;
EOF
ERR=$?
if [ ${ERR} -ne 0 ];
then
abort_with_error "The RMAN delete obsolete backup step failed"
fi
echo "${JOB_NAME} ended at : $(date)"
send_email
} > ${LOG_FILE} 2>&1
環境とニーズに合わせて、abort_with_errorおよびsend_emailプロシージャを調整します。
これにより、スケジューラがプロセスから分離されるため、バックアッププロセスを更新したり、メールを必要とする新しいチームメンバーを取得したりする場合に、cronを変更する必要はありません。
このようにして、動作し、動作しないが件名にエラーがある場合にメールを受け取るので、簡単なメールルールで、興味のない成功したバックアップを非表示にして失敗をハイライト表示し、何かがうまくいかなかった場合は毎朝シンプルなカウントで表示できます。メールと一見が必要です。ログはサーバー上に保持されているので、そこで見つけることができます(ジョブに何かを追加して、数週間後に古いログを削除します)。
明らかに、このようなものを実装する方法はたくさんあり、それに合わせて変更する必要があります(そして、明確にするために、スクリプトから*たくさん*を切り取っています)。