Oracle快速收集AWR的方案

记一种方便的awr收集方法,该脚本可以按小时收集目标时段的awr

素材:awr_generate.sql

(1)将awr_generate.sql置于数据库服务器本地路径F:\perf\awr下

(2)sqlplus连接数据库

C:\Users\Administrator>sqlplus / as sysdba

(3)调用SQL脚本,时段参数等

SQL> @F:\perf\awr\awr_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:\Users\Administrator)查找对应的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

原文地址:https://www.cnblogs.com/wang-xiaohui/p/9943455.html

时间: 2024-11-05 23:26:45

Oracle快速收集AWR的方案的相关文章

Oracle快速收集全库统计信息

环境:Oracle 11.2.0.4 采用并行的方式,快速收集全库统计信息,多用于跨版本升级之后,对全库的统计信息重新进行快速收集: --开启计时 set timing on --设置并行收集 exec dbms_stats.set_global_prefs('CONCURRENT','TRUE');   --开始收集全库统计信息 begin dbms_stats.gather_database_stats( ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SI

oracle数据性能库优化方案精髓整理收集回顾

oracle数据库性能优化总体法则: 一.减少数据访问(减少硬盘房访问次数) 二.返回更少的数据(减少网络传输或磁盘访问) 三.减少交互次数(减少网络传输) 四.减少服务器开销(减少cpu及内存开销) 五.利用更多的资源(增加资源) ===================具体说明================= 一.减少数据访问(减少硬盘房访问次数) 1.减少数据访问 1.1.创建并使用正确的索引 索引会大大增加DML(增删改)的开销[合理的索引会大大提高效率100倍.1000倍,但不合理的索

Oracle 10g收集数据库统计信息

1.需求概述 2.实施步骤 3.回退方案 1.需求概述 某数据库由于整体统计信息不准确,多次出现部分业务SQL选错执行计划,从而导致性能下降影响到最终用户体验,目前通过SQL_PROFILE绑定执行计划临时解决,但此方法不够灵活,后续维护工作量也会增加. Oracle优化器(CBO)依赖数据库统计信息来计算目标SQL各种可能的执行路径的成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划.如果统计信息不准确甚至是错误,会导致优化器选择错误SQL执行计划的概率大大增加. 目前计划对该

Oracle里收集与查看统计信息的方法

Oracle数据库里的统计信息是这样的一组数据:它存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息.CBO会利用这些统计信息来计算目标SQL各种可能的.不同的执行路径的成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划. Oracle数据库里的统计信息可以分为如下6种类型: 表的统计信息 索引的统计信息 列的统计信息 系统统计信息 数据字典统计信息 内部对象统计信息 表的统计信息用于描述Oracle数据库里表的详细信息,它包含了一些典型的维度,如记录数.表块

Oracle快速清除表数据

Oracle快速清除表数据 一:简介 删除表数据一般常用的有三种命令.truncate.delete.drop.但是他们的执行方式.效率和结果各有不同.比如删除500W记录级别的数据时.三者之间有很大的不同. 二:truncate delete drop 三者都用可以用于清除表数据.其相似与不同之处如下 相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1

oracle手工生成AWR报告方法记录

AWR(Automatic Workload Repository)报告是我们进行日常数据库性能评定.问题SQL发现的重要手段.熟练掌握AWR报告,是做好开发.运维DBA工作的重要基本功. AWR报告的原理是基于Oracle数据库的定时镜像功能.默认情况下,Oracle数据库后台进程会以一定间隔(一小时)收集系统当前状态镜像,并且保存在数据库中.生成AWR报告时,只需要指定进行分析的时间段(开始镜像编号和结束镜像编号),就可以生成该时间段的性能分析情况.AWR镜像保存在数据库中的时间为一个月左右

ORACLE快速彻底Kill掉的会话

在ORACLE数据库当中,有时候会使用ALTER SYSTEM KILL SESSION 'sid,serial#'杀掉一个会话进程,但是使用这个SQL语句杀掉会话后,数据库并不会立即释放掉相关的资源,有时候你会发现锁定的资源很长时间也不会释放,即使会话状态为"KILLED",依然会阻塞其它会话. 下面根据Eygel的"Oracle中Kill session的研究",构造一个案例看看kill session到底做了什么.如下所示 会话1: SQL> conn

Oracle数据库中的优化方案

来自: http://woainichenxueming.iteye.com/blog/726541 一. 优化oracle中的sql语句,提高运行效率 1. 选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名, FROM子句中写在最后的表(基础表 driving table)将被最先处理, 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表. 如: 表T_USER有16384条记录, 表T_DEPARTME

Oracle 错误收集

Oracle 错误大全 ORA-00001: 违反唯一约束条件 (.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程:无法转换会话ORA-00022: 无效的会话 ID:访问被拒绝ORA-00023: 会话引用进程私用内存:无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册ORA-00025: 无法分配 ORA-0002