Oracle 自動 AWR 報告方法

2021-10-23 19:03:06 字數 3582 閱讀 1855

oracle的awr報告對效能調優與監控都很有用,一般都是在db出現效能問題時跑出來分析。

雖然我們有各種oracle自身如建立基線、或監控工具進行持續的效能監控,但目前來看裡面的內容詳細度跟awr報告比還有不少差距。

那我們如何讓awr報告自動生成,然後每天直接拿來就看呢?

記錄乙個通用且簡單的方法:

--1. 使用sys使用者向dbma使用者收取

grant

select

on dba_hist_snapshot to dbma;

grant

read

,write

on directory data_pump_dir to dbma;

grant

execute

on utl_file to dbma;

--2. 使用dbma使用者部署儲存過程

create

orreplace

procedure dbma_awrrpt as

v_str varchar2(

32767);

v_dbid varchar2(20)

; v_host varchar2(50)

; v_days number;

v_bsnp varchar2(8)

; v_bday date

; v_esnp varchar2(8)

; v_eday date

; v_file utl_file.file_type;

v_dir varchar2(

50) :=

'data_pump_dir'

;begin

--設定報告存放路徑

v_str := v_str ||

'cd /home/oracle/awrrpt'

|| chr(10)

;--設定報告天數(最大取決db設定,預設設定下為6天,超過6天可能因無法獲取對應snapid無法生成報告)

v_days :=1;

--獲取dbid

select dbid into v_dbid from dba_hist_snapshot where rownum =1;

--設定預設開始日期

select trunc(sysdate - v_days)

into v_bday from dual;

--設定預設結束日期

select trunc(sysdate)

into v_eday from dual;

--報告天數轉為獲取報告清單天數

v_days := v_days +1;

--拼接awr報告自生成語句

for p in

(select inst_id, host_name from **$instance orderby1

)loop

v_host := p.host_name;

v_str := v_str ||

'sqlplus / as sysdba << eof'

|| chr(10)

||'@?/rdbms/admin/awrrpti.sql'

|| chr(10)

||'html'

|| chr(10)

|| v_dbid || chr(10)

|| p.inst_id || chr(10)

|| v_days ||

chr(10)

;for q in

(select snap_id,

round

(end_interval_time,

'hh24'

) sj

from dba_hist_snapshot

where to_char(

round

(end_interval_time,

'hh24'),

'hh24')=

'00'

and(

round

(end_interval_time,

'hh24'

)= v_bday or

round

(end_interval_time,

'hh24'

)= v_eday)

and instance_number = p.inst_id

order

byround

(end_interval_time,

'hh24'))

loop

v_str := v_str || q.snap_id || chr(10)

;end

loop

; v_str := v_str || p.host_name ||

'_'|| to_char(v_bday,

'yyyymmdd')||

'_'||

to_char(v_eday,

'yyyymmdd')||

'.html'

|| chr(10)

||'exit'

|| chr(10)

||'eof'

|| chr(10)

;end

loop

; dbms_output.put_line(v_str)

; v_file := utl_file.fopen(v_dir,

'awr_daily.sh'

,'w'

,32767);

utl_file.put_line(v_file, v_str)

; utl_file.fclose(v_file)

;end dbma_awrrpt;

--3. 使用dbma使用者執行儲存過程

call dbma_awrrpt;

##4. 使用oracle使用者登陸shell,對生成指令碼授予執行許可權

cd /u01/oracle/product/10.2.0.4/rdbms/log/

chmod 775 awr_daily.sh

##5. 使用oracle或jwdba使用者上傳指令碼進入/home/oracle/dbma目錄

## linuxdaily.sh

##6. 測試執行

sh awr_daily.sh

##7. 配置每日計畫任務:每日0:30執行

crontab -e

30 0 * * * sh /home/oracle/dbma/linuxdaily.sh >> /home/oracle/dbma/linuxdaily.log 2>

&1

總結:

crontab定shell指令碼自動任務 → shell指令碼呼叫儲存過程→儲存過程拼接shell指令碼→任務繼續執行拼接出來的shell指令碼 = 萬能套路lol~

如果擔心安全,那就用oracle調自動任務就好。

如果使用 win,可用wsl直接執行,或者用powershell\bat改寫就好了。

Oracle 每天自動生成AWR報告

經驗豐富的老員工希望能夠每天為資料庫生成1個awr報告,以便於後期分析資料庫的效能變化,手動生成太麻煩,查了一下資料,發現可以自動生成,過程如下。資料庫環境 11gr2 rac 雙節點 awr報告 由於是rac資料庫,希望生成每個節點的報告及全域性報告,時間段為 第一天的0點 第二天的0點。1 在o...

Oracle 每天自動生成AWR報告

經驗豐富的老員工希望能夠每天為資料庫生成1個awr報告,以便於後期分析資料庫的效能變化,手動生成太麻煩,查了一下資料,發現可以自動生成,過程如下。資料庫環境 11gr2 rac 雙節點 awr報告 由於是rac資料庫,希望生成每個節點的報告及全域性報告,時間段為 第一天的0點 第二天的0點。1 在o...

oracle基礎 awr報告

重點關注 一 snapshot information session 連線的總的會話數 cursors session 每個會話平均開啟的游標數 elapsed 快照產生的總時間 通過elapsed db time比較,反映出資料庫的繁忙程度。如果awr報告頂部的db time遠大於elapsed...