awr報告每天自動生成指令碼

germany006發表於2019-08-21

原版參考了別人寫的指令碼,不過有一些錯漏的地方,無法直接執行的,就自己做了修改

後面又根據自己業務需求,設定了下awr生成時間


#!/bin/bash                                              

#載入一下oracle的環境變數檔案,不然 sqlplus 命令在crontab 計劃任務裡不能被執行(或者用 source /home/oracle/.bash_profile)

. /home/oracle/.bash_profile

#定義變數----生成awr報告的檔案型別

AWR_FORMAT=html

#定義變數---- 拉取幾天內的snap列表               

NUM_DAYS=3

#定義變數----生成的awr報告的結束snap ID  ,即:end_snap  

MAX_SNAP_ID=$(echo `sqlplus -S / as sysdba <<EOF

set heading off trimspool on feedback off pagesize 0

SELECT trim(max(SNAP_ID))-3 FROM DBA_HIST_SNAPSHOT;

EOF`)

#定義變數----生成的awr報告的開始snap ID  ,即:begin_snap

MIN_SNAP_ID=`expr $MAX_SNAP_ID - 24` 

#生成的awr報告的檔案路徑及檔名

AWR_LOG=/home/oracle/AWR_shahand_`date '+%Y%m%d_%H%M'`.html

#生成awr報告

echo -e "$AWR_FORMAT\n$NUM_DAYS\n$MIN_SNAP_ID\n$MAX_SNAP_ID\n$AWR_LOG\n"|(sqlplus -S / as sysdba @?/rdbms/admin/awrrpt.sql) 






改良版

oracle使用者下

crontab -e

00 8 * * * /home/oracle/auto_awr.sh


mkdir /home/oracle/awr_log/

vi /home/oracle/auto_awr.sh

#!/bin/bash                                              


#每天早上8點執行,取昨天0點到今天0點的awr報告

#載入一下oracle的環境變數檔案,不然 sqlplus 命令在crontab 計劃任務裡不能被執行(或者用 source /home/oracle/.bash_profile)


. /home/oracle/.bash_profile

export ORACLE_SID=這裡填寫資料庫的sid

#定義變數----生成檔案的時間設定為前一天

shijian=$(date --date='1 days ago' +%Y%m%d)

#定義變數----生成awr報告的檔案型別

AWR_FORMAT=html

#定義變數---- 拉取幾天內的snap列表               

NUM_DAYS=3

#定義變數----生成的awr報告的結束snap ID  ,即:end_snap  

MAX_SNAP_ID=$(echo `sqlplus -S / as sysdba <<EOF

set heading off trimspool on feedback off pagesize 0

SELECT trim(max(SNAP_ID))-8 FROM DBA_HIST_SNAPSHOT;

EOF`)


#定義變數----生成的awr報告的開始snap ID  ,即:begin_snap

MIN_SNAP_ID=`expr $MAX_SNAP_ID - 24` 

#生成的awr報告的檔案路徑及檔名

AWR_LOG=/home/oracle/awr_log/AWR_shahand_ ${shijian}_00_24_${ORACLE_SID}.html

#生成awr報告

echo -e "$AWR_FORMAT\n$NUM_DAYS\n$MIN_SNAP_ID\n$MAX_SNAP_ID\n$AWR_LOG\n"|(sqlplus -S / as sysdba @?/rdbms/admin/awrrpt.sql) 


#每天早上8點執行,取昨天9點到昨天17點的awr報告

#最大值減去15就是昨天的17點

MAX_SNAP_ID=$(echo `sqlplus -S / as sysdba <<EOF

set heading off trimspool on feedback off pagesize 0

SELECT trim(max(SNAP_ID))-15 FROM DBA_HIST_SNAPSHOT;

EOF`)

#最小值=最大值減去8就是9點了,這裡expr裡面的計算兩個值之間與減號一定要有空格,否則報錯

MIN_SNAP_ID=`expr $MAX_SNAP_ID - 8`

#設定awr報告生成路徑及檔名

AWR_LOG=/home/oracle/awr_log/AWR_shahand_${shijian}_09_17_${ORACLE_SID}.html

#生成awr報告的命令

echo -e "$AWR_FORMAT\n$NUM_DAYS\n$MIN_SNAP_ID\n$MAX_SNAP_ID\n$AWR_LOG\n"|(sqlplus -S / as sysdba @?/rdbms/admin/awrrpt.sql)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-2654421/,如需轉載,請註明出處,否則將追究法律責任。

相關文章