程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 利用腳本自動清理Oracle歸檔日志

利用腳本自動清理Oracle歸檔日志

編輯:Oracle教程

利用腳本自動清理Oracle歸檔日志


背景

由於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用戶下設置。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved