
我的 Oracle 備份會發送一封電子郵件,通知備份已完成,成功或失敗取決於它發現的某種模式。我們的備份日誌變得非常大 - 14mg。由於該檔案大於 10MB,因此 Exchange 伺服器將丟棄該郵件。
請幫我解決這個問題,即我需要這個過程來發送一封帶有模式“ORA-”或“RMAN-”錯誤代碼(如果失敗)的電子郵件,或者只是發送一封指示成功或失敗的電子郵件。
注意:這只是程式碼的一部分 - 如果您有任何疑問,請告訴我。
#### Check for RMAN/ORA Errors and notify accordingly
RMANERROR=`egrep "ORA-|RMAN-" $RMAN_LOG_TSBKUP`
RMANWARN=`egrep "ORA-|RMAN-" $RMAN_LOG_TSBKUP|egrep -vE "$EGREP_EXCLUDE"`
if [ -z "$RMANERROR" ]
then
echo "No Errors"
cat $RMAN_LOG_TSBKUP |mailx -s "SUCCESS - DW_TS_BACKUP Complete" `cat $EMAIL_SUCCESS_DIST`
elif [ -z "$RMANWARN" ]
then
echo "No Errors, but Warnings"
cat $RMAN_LOG_TSBKUP |mailx -s "SUCCESS (with ignorable WARNINGS) - DW_TS_BACKUP Complete" `cat $EMAIL_SUCCESS_DIST`
else
echo "Errors Found !!!!"
mailx -s "FAILURE - DW_TS_BACKUP Complete" `cat $EMAIL_FAIL_DIST`
fi
}
答案1
我看到兩個選項:
1 - 您可以使用而不是cat
將整個日誌檔案新增至電子郵件中,而僅包含新附加的行,tail -n x $RMAN_LOG_TSBKUP
其中cat $RMAN_LOG_TSBKUP
x 是從檔案結尾開始包含在電子郵件中的行數。如果您大致知道備份將會新增到日誌中的行數,那麼您可以最佳化 x 並避免包含舊的日誌資料。或者您可以grep
使用日誌標題或日期,這取決於您。
2 - 使用logrotate
.建立一個基本的設定檔並將其放入/etc/logrotate.d/
,logrotate
它將為您處理一切。您可以將日誌配置為根據計劃或大小輪換。 logrotate
通常作為每日 cronjob 從 運行/etc/cron.daily/logrotate
。這可能是最好的選擇,因為它允許您以可管理的方式保存日誌。基本配置可以包含以下指令。
/var/log/oracle-backup.log {
size 1M
rotate 12
monthly
compress
missingok
notifempty
}
這些指令非常不言自明,但man logrotate
有很好的信息,這裡有一個很好的鏈接如何在 Ubuntu 12.10 上使用 Logrotate 管理日誌文件