由於Oracle數據庫開啟了歸檔模式,經常因為歸檔日志文件占用空間過大而導致數據庫無法正常連接,發現問題後需要手動清理歸檔日志,而發現問題時可能已經過去很長時間了,在生產環境中對用戶的使用有非常嚴重的影響。
項目中涉及到多方數據對接,對數據庫的頻繁插入和更新會生成大量的歸檔日志,歸檔日志空間是500G,大概一周左右的時間歸檔日志空間就100%。
為解決這個問題這裡使用腳本+定時任務自動清理歸檔日志,只保留5天歸檔。
#!/bin/bash
#Author wangchengwei
#FileName clear_archivelog.sh
#Date 2015-12-31
#DESC Delete all archivelog.
if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi
#set env
echo "Oracle home:"$ORACLE_HOME
echo "Oracle SID:"$ORACLE_SID
$ORACLE_HOME/bin/rman target sys/oracle@rac log=/oracle/logs/rman.log <另一種寫法
$ORACLE_HOME/bin/rman log=/oracle/logs/rman.log <網上很多腳本都使用$ORACLE_HOME/bin/rman target /,而在實際使用中發現直接使用/會出現下面的問題。所以這裡建議把用戶名、密碼和SID都加上。
Recovery Manager: Release 11.2.0.4.0 - Production on Thu Dec 31 10:38:08 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN>
using target database control file instead of recovery catalog
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of crosscheck command at 12/31/2015 10:38:08
RMAN-12010: automatic channel allocation initialization failed
RMAN-06403: could not obtain a fully authorized session
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
設置定時任務
oracle@racnode1:/$ crontab -e #打開配置
#加入以下內容,定於每天11點執行
0 11 * * * /oracle/scripts/clear_archivelog.sh > /oracle/scripts/runlog.log
#
ps -ef | grep crond #判斷定時服務是否啟動
service crond start|stop|restart #啟動、停止或重啟服務
定時任務需要在oracle用戶下設置。