Oracle 每天自動生成AWR報告

2022-01-10 10:07:23 字數 3693 閱讀 2062

經驗豐富的老員工希望能夠每天為資料庫生成1個awr報告,以便於後期分析資料庫的效能變化,手動生成太麻煩,查了一下資料,發現可以自動生成,過程如下。

資料庫環境:11gr2 rac(雙節點)

awr報告:由於是rac資料庫,希望生成每個節點的報告及全域性報告,時間段為:第一天的0點~第二天的0點。

(1)在oracle伺服器上建立路徑

server2$[/home/oracle]mkdir awrreport

(2)建立directory並授權(使用sys賬戶執行)

create

orreplace directory dir_awrreport as

'/home/oracle/awrreport';

grant

read,write on directory dir_awrreport to mydba; --

mydba為具有dba許可權的使用者

grant

select

on v_$database

tomydba;

grant

select

on dba_hist_snapshot to

mydba;

grant

execute

on sys.dbms_workload_repository to mydba;

(3)編寫指令碼(使用監控賬戶mydba執行)

create

orreplace

procedure

auto_awrreport

as/*

用途 :自動生成awr報告

建立人 :gegeman

建立日期:2017-12-08

*/start_snap

number

;end_snap

number

;rpt_interval

number :=

24; --

報告間隔(小時)

start_time varchar2(14

);end_time

varchar2(14

);awr_file utl_file.file_type;

v_dbid

number

;v_dbname

varchar2(20

);begin

--確定資料庫名稱與id

select dbid,name into v_dbid,v_dbname from v$database;--

-查詢起始的快照id

select

max(snap_id) into end_snap from

dba_hist_snapshot;

start_snap :

= end_snap-

rpt_interval;

---格式化快照時間

select to_char(end_interval_time-rpt_interval/

24, '

yyyymmddhh24

'),to_char(end_interval_time, '

yyyymmddhh24')

into

start_time,end_time

from

dba_hist_snapshot

where snap_id = end_snap and instance_number =1;

--例項1報告

awr_file := utl_file.fopen('

dir_awrreport

',lower(v_dbname)||

'_1_

'||start_time||'_

'||end_time||

'.html

', '

a',32767

);for awr_info in (select output from

table(dbms_workload_repository.awr_report_html(v_dbid,1,start_snap,end_snap,0

))) loop

utl_file.put_line(awr_file,awr_info.output);

endloop;

utl_file.fclose(awr_file);

--例項2報告

awr_file := utl_file.fopen('

dir_awrreport

',lower(v_dbname)||

'_2_

'||start_time||'_

'||end_time||

'.html

', '

a',32767

);for awr_info in (select output from

table(dbms_workload_repository.awr_report_html(v_dbid,2,start_snap,end_snap,0

))) loop

utl_file.put_line(awr_file,awr_info.output);

endloop;

utl_file.fclose(awr_file);

--全域性報告

awr_file := utl_file.fopen('

dir_awrreport

',lower(v_dbname)||

'_global_

'||start_time||'_

'||end_time||

'.html

', '

a',32767

);for awr_info in (select output from

table(dbms_workload_repository.awr_global_report_html(l_dbid => v_dbid,l_inst_num =>

'',l_bid => start_snap,l_eid => end_snap,l_options =>

0))) loop

utl_file.put_line(awr_file,awr_info.output);

endloop;

utl_file.fclose(awr_file);

end auto_awrreport;

(4)授予監控使用者執行procedure許可權(使用sys賬戶)

grant

execute

on mydba.auto_awrreport to mydba;

(5)建立job,每天晚上12:30執行(監控賬戶)

declare

job1

number

;begin

sys.dbms_job.submit(job

=>

job1,

what

=>

'auto_awrreport;',

next_date

=>

sysdate,

interval

=>

'trunc(sysdate+1) + 30/(24*60)',

instance

=>

2);

end;

Oracle 每天自動生成AWR報告

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

Oracle 自動 AWR 報告方法

oracle的awr報告對效能調優與監控都很有用,一般都是在db出現效能問題時跑出來分析。雖然我們有各種oracle自身如建立基線 或監控工具進行持續的效能監控,但目前來看裡面的內容詳細度跟awr報告比還有不少差距。那我們如何讓awr報告自動生成,然後每天直接拿來就看呢?記錄乙個通用且簡單的方法 1...

awr使用 生成awr報告步驟

生成awr報告步驟 首先需要sqlplus登入,然後步驟如下 第一步 測試開始 結束分別生成乙個快照 begin dbms workload repository.create shapshot end 有時候第一步會出現未定義的錯誤,此時需要用exec dbms workload reposito...