• 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文件

    https://files.cnblogs.com/files/wang-xiaohui/a-gen-awr.zip

    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
    View Code
  • 相关阅读:
    读书笔记-js
    读书笔记-设计模式
    读书笔记-并发和多线程
    读书笔记-泛型有限通配符
    读书笔记-类和类加载器
    项目: 推送水木文章到Kindle
    项目:DoubleFaceCamera
    项目:BluetoothChat
    项目:简单记事本
    项目: 连连看
  • 原文地址:https://www.cnblogs.com/wang-xiaohui/p/9943455.html
Copyright © 2020-2023  润新知