OracleAWR報告每天自動生成並傳送郵箱

2021-03-04 05:31:07 字數 5222 閱讀 4232

一. 準備工作

一般我們都是條用awrrpt.sql 來建立我們的awr報告。 我們先看下這個指令碼的具體內容:

[oracle@rac1 admin]$ cat awrrpt.sql | grep -v 'rem'|grep -v '^--'

set echo off heading on underline on;

column inst_num heading "inst num" new_value inst_num format 99999;

column inst_name heading "instance" new_value inst_name format a12;

column db_name heading "db name" new_value db_name format a12;

column dbid heading "db id" new_value dbid format 9999999999 just c;

prompt

prompt current instance

prompt

select d.dbid dbid

, db_name

, i.instance_number inst_num

, i.instance_name inst_name

from v$database d,

v$instance i;

@@awrrpti

undefine num_days;

undefine report_type;

undefine report_name;

undefine begin_snap;

undefine end_snap;

在以上的指令碼裡,我們發現它只是生成了一些變數,然後把這些變數傳給了另乙個指令碼:awrrpti.sql。 我們看下awrrpti.sql 指令碼的具體內容:

[oracle@rac1 admin]$ cat awrrpti.sql | grep -v 'rem'|grep -v '^--'

set echo off;

set veri off;

set feedback off;

variable rpt_options number;

define no_options = 0;

define enable_addm = 8;

begin

:rpt_options := &no_options;

end;

/prompt

prompt specify the report type

prompt

prompt would you like an html report, or a plain text report?

prompt enter 'html' for an html report, or 'text' for plain text

prompt defaults to 'html'

column report_type new_value report_type;

set heading off;

select 'type specified: ',lower(nvl('&&report_type','html')) report_type from dual;

set heading on;

set termout off;

column ext new_value ext;

select '.html' ext from dual where lower('&&report_type') <> 'text';

select '.txt' ext from dual where lower('&&report_type') = 'text';

set termout on;

@@awrinput.sql

-- 這個指令碼主要是確定snap的。

@@awrinpnm.sql 'awrrpt_' &&ext

-- 這個指令碼主要是確定awr 檔名稱的

set termout off;

column fn_name new_value fn_name noprint;

select 'awr_report_text' fn_name from dual where lower('&report_type') = 'text';

select 'awr_report_html' fn_name from dual where lower('&report_type') <> 'text';

column lnsz new_value lnsz noprint;

select '80' lnsz from dual where lower('&report_type') = 'text';

select '1500' lnsz from dual where lower('&report_type') <> 'text';

set linesize &lnsz;

set termout on;

spool &report_name;

select output from table(dbms_workload_repository.&fn_name( :dbid,

:inst_num,

:bid, :eid,

:rpt_options ));

spool off;

prompt report written to &report_name.

set termout off;

clear columns sql;

ttitle off;

btitle off;

repfooter off;

set linesize 78 termout on feedback 6 heading on;

undefine report_name

undefine report_type

undefine ext

undefine fn_name

undefine lnsz

undefine no_options

undefine enable_addm

undefine top_n_events

undefine num_days

undefine top_n_sql

undefine top_pct_sql

undefine sh_mem_threshold

undefine top_n_segstat

whenever sqlerror continue;

[oracle@rac1 admin]$

這個指令碼才是我們真正生成awr的指令碼。 在這個指令碼裡面,提示我們選擇awr報告的型別。

通過上面的2個指令碼,我們將awr報告簡化一下:

select output from

table(dbms_workload_repository.&fn_name(:dbid, :

inst_num,:bid, :eid,:

rpt_options ));

這條語句就是整個awr報告的核心:

(1)&fn_name :決定awr報告的型別,有2個值:awr_report_html和awr_report_text。

(2)dbid,inst_num,bid,eid 可以通過dba_hist_snapshot查詢. bid 指的是begin snap_id, eid 指的是end snap_id.

sql> select * from (select snap_id,dbid,instance_number from dba_hist_snapshot order by snap_id) where rownum<10;

snap_id dbid instance_number

184 809910293 2

184 809910293 1

185 809910293 2

185 809910293 1

186 809910293 2

186 809910293 1

187 809910293 2

187 809910293 1

188 809910293 2

9 rows selected.

我這裡是個rac 環境, 通過這個可以看出在每個節點上都儲存著awr的資訊。

(3)rpt_options:該引數控制是否顯示addm的。

-- no_options -

-- no options. setting this will not show the addm

-- specific portions of the report.

-- this is the default setting.

---- enable_addm -

-- show the addm specific portions of the report.

-- these sections include the buffer pool advice,

-- shared pool advice, pga target advice, and

-- wait class sections.

define no_options = 0;

define enable_addm = 8;

有了上面的資料之後,我們就可以使用如下sql直接生成awr報告了。

select output from table(dbms_workload_repository.awr_report_html(809910293, 2,220,230,0));

select output from table(dbms_workload_repository.awr_report_text(809910293, 2,220,230,0));

二. 生成awr報告 sql指令碼

以上寫了這麼多,就是為了乙個指令碼:myawrrpt.sql.

這個指令碼就是自動的去收集資訊。 因為如果我們是呼叫awrrpt.sql的話,需要輸入一些引數。

我們修改一下指令碼,讓它根據我們的需求來收集資訊,這樣就不用輸入引數了。

[oracle@rac1 admin]$ cat myawrrpt.sql

conn / as sysdba;

set echo off;

set veri off;

set feedback off;

set termout on;

set heading off;

自動化報告

1引言小時候大家都有自己的夢想,有的想成為科學家 有的想成為明星 有的想成為飛行員 我的理想就是成為一名科學家。雖然那時候還不知道科學家和工程師的具體含義及區別,但腦海中總有這樣乙個概念,科學家是搞研究工作的 工程師就是像建房屋那些幹工程的。說句實話,上面雖說想當科學家,其實我內心深處既想搞研究,又...

自動化報告

自動控制系統及應用 課程設計報告 題目 工廠 小區 學校大門公升降杆自動系統 組長 朱清 成員 王菁 班級 12級電氣1班 教師 崔慶權 日期 2014.6.10 機電工程學院 2014.6 目錄一 設計內容 3 二 設計思路 3 1.意義 3 2.內容 3 3.現狀 3 4.設計原理 4 5.分析...

自動化實習報告

實習報告 姓名班級 學號指導教師 資訊科學與技術部 一 實習地點 實習目的 1.通過實習加深我們對自動化專業在國民經濟中所處地位和作用的認識,鞏固專業思想,提高專業技能,並激發我們對本專業學習的興趣。2.通過現場操作實習和與企業員工的交流指導,理論聯絡實際,把所學的理論知識加以印證 深化 鞏固和充實...