在整理导出awr报告的时候,发现网上这种方式也挺方便的,所以整理一下,作为自己使用的样例。
- 最好用sys用户登录去操作吧,现场没有权限登录的话,用普通用户登录也行。
1、先查看一下表中的数据,是否有你需要的那段时间的。
SELECT * FROM dba_hist_snapshot order by snap_id ; --这里要注意数据库的实例名【字段 instance_number 】
2、在plsql【SQL窗口】执行下面的语句;在执行前需替换下图中的两个地方的值。
举例:如果生成析2020/12/14 下午 2点到7点这个时间段的数据
下图中的第一个值维护为22843 第二个值维护为22847
–创建一个目录用来存放生成的awr文件。 (这个路径是数据库所在机器下的路径)
CREATE OR REPLACE DIRECTORY awr_reports_dir AS 'C:\Users\Desktop\排查系统性能问题\awr文件';
DECLARE
-- Adjust before use.
l_snap_start NUMBER := 1;-- SNAP_ID字段的值 (开始值)
l_snap_end NUMBER := 10;-- SNAP_ID字段的值(结束值)
l_dir VARCHAR2(50) := 'AWR_REPORTS_DIR';
l_last_snap NUMBER := NULL;
l_dbid v$database.dbid%TYPE;
l_instance_number v$instance.instance_number%TYPE;
l_file UTL_FILE.file_type;
l_file_name VARCHAR(50);
BEGIN
SELECT dbid
INTO l_dbid
FROM v$database;
SELECT instance_number
INTO l_instance_number
FROM v$instance;
FOR cur_snap IN (SELECT snap_id
FROM dba_hist_snapshot
WHERE instance_number = l_instance_number
AND snap_id BETWEEN l_snap_start AND l_snap_end
ORDER BY snap_id)
LOOP
IF l_last_snap IS NOT NULL THEN
l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || cur_snap.snap_id || '.htm', 'w',32767); -- 32767 max_linesize
FOR cur_rep IN (SELECT output
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.awr_report_html(l_dbid, l_instance_number, l_last_snap, cur_snap.snap_id)))
LOOP
UTL_FILE.put_line(l_file, cur_rep.output);
END LOOP;
UTL_FILE.fclose(l_file);
END IF;
l_last_snap := cur_snap.snap_id;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.is_open(l_file) THEN
UTL_FILE.fclose(l_file);
END IF;
RAISE;
END;
/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27017639/viewspace-2050868/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/27017639/viewspace-2050868/