經驗豐富的老員工希望能夠每天為資料庫生成1個awr報告,以便於後期分析資料庫的效能變化,手動生成太麻煩,查了一下資料,發現可以自動生成,過程如下。
資料庫環境:11gr2 rac(雙節點)
awr報告:由於是rac資料庫,希望生成每個節點的報告及全域性報告,時間段為:第一天的0點~第二天的0點。
(1)在oracle伺服器上建立路徑
server2$[/home/oracle]mkdir awrreport
(2)建立directory並授權(使用sys賬戶執行)
createorreplace 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執行)
createorreplace
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賬戶)
grantexecute
on mydba.auto_awrreport to mydba;
(5)建立job,每天晚上12:30執行(監控賬戶)
declarejob1
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...