我们可以使用awrrpt.sql脚本在服务器端生成AWR报告,这里我们说说如何使用DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML生成AWR报告,可以在服务器和客户端使用。
1、根据取AWR报告的时间范围,查出快照ID;
SELECT *
FROM DBA_HIST_SNAPSHOT T
WHERE T.END_INTERVAL_TIME >=
TO_DATE('2017-10-09 09:00:00', 'yyyy-MM-dd hh24:mi:ss')
AND T.END_INTERVAL_TIME <=
TO_DATE('2017-10-09 10:01:00', 'yyyy-MM-dd hh24:mi:ss')
ORDER BY SNAP_ID;
查询结果如下:
从截图中可以看出oracle是15min生成一次快照
2、利用第一步的END_INTERVAL_TIME,SNAP_ID,DBID,INSTANCE_NUMBER生成报告
SELECT *
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1700577032,
1,
38247,
38251,
0));
或者:
SELECT DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1700577032,
1,
38247,
38251,
0) FROM dual;
3、把结果粘贴到一个txt中,比如a.txt保存退出。然后改此文件后缀为html,比如a.html. 最后用浏览器打开a.html即可 ,如果需要生成txt格式的报告,则用DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT这个函数即可
报告截图:
1、同样的,根据取AWR报告的时间范围,查出快照ID
2、利用下面的函数取出报告,导出即可
SELECT DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML(1700577032,
1,
38247,
38251,
1700577032,
1,
38151,
38155)
FROM DUAL;
--生成html格式的awr报告
FUNCTION AWR_REPORT_HTML(L_DBID IN NUMBER, --database ID number
L_INST_NUM IN NUMBER, --instance number
L_BID IN NUMBER, --开始的快照ID,在dba_hist_snapshot里找
L_EID IN NUMBER, --结束的快照ID,在dba_hist_snapshot里找
L_OPTIONS IN NUMBER DEFAULT 0)
RETURN AWRRPT_HTML_TYPE_TABLE
PIPELINED;
--生成txt格式的awr报告
FUNCTION AWR_REPORT_TEXT(L_DBID IN NUMBER, --database ID number
L_INST_NUM IN NUMBER, --instance number
L_BID IN NUMBER, --开始的快照ID,在dba_hist_snapshot里找
L_EID IN NUMBER, --结束的快照ID,在dba_hist_snapshot里找
L_OPTIONS IN NUMBER DEFAULT 0)
RETURN AWRRPT_TEXT_TYPE_TABLE
PIPELINED;
--生成对比的awr报告
FUNCTION AWR_DIFF_REPORT_HTML(DBID1 IN NUMBER,
INST_NUM1 IN NUMBER,
BID1 IN NUMBER,
EID1 IN NUMBER,
DBID2 IN NUMBER,
INST_NUM2 IN NUMBER,
BID2 IN NUMBER,
EID2 IN NUMBER)
RETURN AWRRPT_HTML_TYPE_TABLE
PIPELINED;