Oracle快速收集AWR的方案
Posted 王.小辉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle快速收集AWR的方案相关的知识,希望对你有一定的参考价值。
记一种方便的awr收集方法,该脚本可以按小时收集目标时段的awr
素材:awr_generate.sql
(1)将awr_generate.sql置于数据库服务器本地路径F:perfawr下
(2)sqlplus连接数据库
C:UsersAdministrator>sqlplus / as sysdba
(3)调用SQL脚本,时段参数等
SQL> @F:perfawrawr_generate.sql
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
1481259953 ORCL 1 orcl
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
* 1481259953 1 ORCL orcl WIN-JQK18VPJ
9K8
Using 1481259953 for database Id
Using 1 for instance number
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing <return> without
specifying a number lists all completed snapshots.
输入 num_days 的值: 1
Listing the last day‘s Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
orcl ORCL 10429 11 11月 2018 00:00 1
10430 11 11月 2018 01:00 1
10431 11 11月 2018 02:00 1
10432 11 11月 2018 03:00 1
10433 11 11月 2018 04:00 1
10434 11 11月 2018 05:00 1
10435 11 11月 2018 06:00 1
10436 11 11月 2018 07:00 1
10437 11 11月 2018 08:00 1
10438 11 11月 2018 09:00 1
10439 11 11月 2018 10:00 1
10440 11 11月 2018 11:00 1
10441 11 11月 2018 12:00 1
10442 11 11月 2018 13:00 1
10443 11 11月 2018 14:00 1
10444 11 11月 2018 15:00 1
10445 11 11月 2018 16:00 1
10446 11 11月 2018 17:00 1
10447 11 11月 2018 18:00 1
10448 11 11月 2018 19:00 1
10449 11 11月 2018 20:00 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入 begin_snap 的值: 10447
Begin Snapshot Id specified: 10447
输入 end_snap 的值: 10449
End Snapshot Id specified: 10449
Specify output script name
~~~~~~~~~~~~~~~~~~~~~~~~~~
This script produces output in the form of another SQL script
The output script contains the commands to generate the AWR Reports
The default output file name is awr-gene.sql
Script written to awr-gene.sql - check and run in order to generate AWR report
s...
SQL> @awr-gene.sql
Beginning AWR Generation...
Creating AWR Report awrrpt_1_20181111_1800__20181111_1900.html for instance numb
er 1 snapshots 10447 to 10448
(4)从当前用户目录路径下(C:UsersAdministrator)查找对应的awr文件
awr_generate.sql script
-- Script for creating multiple consecutive Oracle AWR/ADDM Reports -- between the specificed start and end snapshot IDs, for all instances -- -- See GitHub repository at https://github.com/flashdba/scripts -- -- modify by falent for get multiple awr report using snap time -- set feedback off set echo off set verify off set timing off -- Set AWR_FORMAT to "text" or "html" --define AWR_FORMAT = ‘text‘ define AWR_FORMAT = ‘html‘ define DEFAULT_OUTPUT_FILENAME = ‘awr-gene.sql‘ define DEFAULT_ADDM_FILENAME = ‘addm-gene.sql‘ define NO_ADDM = 8 -- Get values for dbid and inst_num before calling awrinput.sql set echo off heading 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 , d.name db_name , i.instance_number inst_num , i.instance_name inst_name from v$database d, v$instance i; -- Call the Oracle common input script to setup start and end snap ids @@?/rdbms/admin/awrinput.sql -- Ask the user for the name of the output script prompt prompt Specify output script name prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~ prompt This script produces output in the form of another SQL script prompt The output script contains the commands to generate the AWR Reports prompt prompt The default output file name is &DEFAULT_OUTPUT_FILENAME prompt set heading off --column outfile_name new_value outfile_name noprint; --select ‘Using the output file name ‘ || nvl(‘&outfile_name‘,‘&DEFAULT_OUTPUT_FILENAME‘), nvl(‘&outfile_name‘,‘&DEFAULT_OUTPUT_FILENAME‘) outfile_name from sys.dual; set linesize 800 set serverout on set termout off -- spool to outputfile spool &DEFAULT_OUTPUT_FILENAME -- write script header comments prompt REM Temporary script created prompt REM Used to create multiple AWR reports between two snapshots select ‘REM Created by user ‘||user||‘ on ‘||sys_context(‘userenv‘, ‘host‘)||‘ at ‘||to_char(sysdate, ‘DD-MON-YYYY HH24:MI‘) from dual; set heading on -- Begin iterating through snapshots and generating reports DECLARE c_dbid CONSTANT NUMBER := :dbid; c_inst_num CONSTANT NUMBER := :inst_num; c_start_snap_id CONSTANT NUMBER := :bid; c_end_snap_id CONSTANT NUMBER := :eid; c_awr_options CONSTANT NUMBER := &&NO_ADDM; c_report_type CONSTANT CHAR(4):= ‘&&AWR_FORMAT‘; v_awr_reportname VARCHAR2(120); v_report_suffix CHAR(5); CURSOR c_snapshots IS select inst_num, start_snap_id, end_snap_id,start_snap_time,end_snap_time from ( select s.instance_number as inst_num, s.snap_id as start_snap_id, lead(s.snap_id,1,null) over (partition by s.instance_number order by s.snap_id) as end_snap_id, to_char(s.end_interval_time,‘YYYYMMDD_HH24MI‘) start_snap_time, lead(to_char(s.end_interval_time,‘YYYYMMDD_HH24MI‘),1,null) over (partition by s.instance_number order by s.snap_id) as end_snap_time from dba_hist_snapshot s where s.dbid = c_dbid and s.snap_id >= c_start_snap_id and s.snap_id <= c_end_snap_id ) where end_snap_id is not null order by inst_num, start_snap_id; BEGIN --awr rpt dbms_output.put_line(‘‘); dbms_output.put_line(‘prompt Beginning AWR Generation...‘); dbms_output.put_line(‘set heading off feedback off lines 800 pages 5000 trimspool on trimout on‘); -- Determine report type (html or text) IF c_report_type = ‘html‘ THEN v_report_suffix := ‘.html‘; ELSE v_report_suffix := ‘.txt‘; END IF; -- Iterate through snapshots FOR cr_snapshot in c_snapshots LOOP -- Construct filename for AWR report v_awr_reportname := ‘awrrpt_‘||cr_snapshot.inst_num||‘_‘||cr_snapshot.start_snap_time||‘__‘||cr_snapshot.end_snap_time||v_report_suffix; dbms_output.put_line(‘prompt Creating AWR Report ‘||v_awr_reportname ||‘ for instance number ‘||cr_snapshot.inst_num||‘ snapshots ‘||cr_snapshot.start_snap_id||‘ to ‘||cr_snapshot.end_snap_id); dbms_output.put_line(‘prompt‘); -- Disable terminal output to stop AWR text appearing on screen dbms_output.put_line(‘set termout off‘); -- Set spool to create AWR report file dbms_output.put_line(‘spool ‘||v_awr_reportname); -- call the table function to generate the report IF c_report_type = ‘html‘ THEN dbms_output.put_line(‘select output from table(dbms_workload_repository.awr_report_html(‘ ||c_dbid||‘,‘||cr_snapshot.inst_num||‘,‘||cr_snapshot.start_snap_id||‘,‘||cr_snapshot.end_snap_id||‘,‘||c_awr_options||‘));‘); ELSE dbms_output.put_line(‘select output from table(dbms_workload_repository.awr_report_text(‘ ||c_dbid||‘,‘||cr_snapshot.inst_num||‘,‘||cr_snapshot.start_snap_id||‘,‘||cr_snapshot.end_snap_id||‘,‘||c_awr_options||‘));‘); END IF; dbms_output.put_line(‘spool off‘); -- Enable terminal output having finished generating AWR report dbms_output.put_line(‘set termout on‘); END LOOP; dbms_output.put_line(‘set heading on feedback 6 lines 100 pages 45‘); dbms_output.put_line(‘prompt AWR Generation Complete‘); END; / spool off set termout on prompt prompt Script written to &DEFAULT_OUTPUT_FILENAME - check and run in order to generate AWR reports... prompt --clear columns sql undefine AWR_FORMAT undefine DEFAULT_OUTPUT_FILENAME undefine NO_ADDME undefine DEFAULT_ADDM_FILENAME undefine TASK_NAME set feedback 6 verify on lines 200 pages 999
以上是关于Oracle快速收集AWR的方案的主要内容,如果未能解决你的问题,请参考以下文章