■■ Oracle ADDM简介

ADDM全称是Automatic Database Diagnostic Monitor,是Oracle实现性能自我诊断的最佳利器。它依赖于AWR,我们知道AWR会自动收集整个数据库在运行期间的性能统计数据。

更多关于ADDM的知识不是本文的重点,你完全可以网搜一大堆详细的介绍、报告解读资料。

■■ 自制ADDM报告生成工具

数据库自带的报告生成工具有一些依赖条件,使用比较繁琐,而且报告名字不易于区分、分发。

所以一直想写一个简单、易用的ADDM报告工具,今天终于把这个工具编写、调试完毕,现正式发布,也同时发布在GitHub。

■■ 工具亮点

1、客户端只要可以采用sqlplus连接数据库,无需登录数据库主机,即可运行本工具生成addm报告

2、报告名字醒目、易懂、易于报告分发,命名格式:checkdb_hostname_instance_service_addmrpt_YYYYMMDD_StartHour-EndHour.txt

如:checkdb_zzjk01_zzjk1_zzjk_addmrpt_20211210_9-10.txt

主机名、实例名、服务名、日期、报告起止时间,一目了然,大大方便了我们的运维工作。

■■ 工具代码同时在github开源

https://github.com/likingzi/addmrpt

-- NAME
-- addmrpt.sql
--
-- DESCRIPTION
-- This script generates oracle ADDM report.
--
-- SUPPORTED ORACLE VERSION
-- 11g, 19c
--
-- USAGE
-- sqlplus连接数据库,运行脚本:
-- SQL> @addmrpt
-- 在当前目录生成数据库ADDM报告[默认当天9:00-10:00,可修改]
-- 参数定义:day=0-当天;1-昨天;2-前天;依此类推
--
-- 报告名字:checkdb_hostname_instance_service_addmrpt_YYYYMMDD_StartHour-EndHour.txt
-- 报告名字示例:checkdb_zzjk01_zzjk1_zzjk_addmrpt_20211210_9-10.txt
-- 注,普通数据库用户需具备如下权限:
-- grant execute on DBMS_WORKLOAD_REPOSITORY to username;
-- grant select_catalog_role to username;
-- grant advisor to username;
--
-- MODIFIED (YYYY-MM-DD)
-- likingzi 2021-12-10 - Created prompt +-----------------------------+
prompt + Oracle Database ADDM Report +
prompt +-----------------------------+ set echo off
set termout off
set trimout off
set feedback off
set heading on
set linesize 200
set pagesize 10000
set numwidth 20
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; -- Define rpt_name <
set termout on
prompt Specify day of report: '0' - today, '1' - yesterday, and so on [Default to '0']
set termout off
column day new_value day noprint;
-- define day=0
select nvl('&&day','0') day from dual;
select 0 day from dual where '&day' < 0 or '&day' > 7;
set termout on
prompt Using day: &day
set termout off
--
set termout on
prompt Specify startTime of report: '0 - 23' [Default to '9']
set termout off
column startTime new_value startTime;
-- define startTime=9
select nvl('&&startTime','9') startTime from dual;
select 9 startTime from dual where &startTime < 0 or &startTime > 23;
set termout on
prompt Using startTime: &startTime
set termout off
--
set termout on
prompt Specify endTime of report: '0 - 23' [Default to '10']
set termout off
column endTime new_value endTime;
-- define endTime=10
select nvl('&&endTime','10') endTime from dual;
select 10 endTime from dual where &endTime < 0 or &endTime > 23 or &endTime < &startTime + 1;
set termout on
prompt Using endTime: &endTime
set termout off
--
COLUMN min_id NEW_VALUE begin_snap NOPRINT
COLUMN max_id NEW_VALUE end_snap NOPRINT
SELECT to_char(min(snap_id)) min_id,to_char(max(snap_id)) max_id FROM dba_hist_snapshot b
WHERE b.end_interval_time BETWEEN trunc(sysdate) - &day + &startTime / 24 AND trunc(sysdate) - &day + ( &endTime + 1) / 24;
--
COLUMN service_names NEW_VALUE service_names NOPRINT
select value service_names from v$parameter where upper(name) like '%SERVICE_NAMES%';
COLUMN rpt_name NEW_VALUE rpt_name NOPRINT
SELECT 'checkdb_'||host_name||'_'||instance_name||'_'||'&service_names'||'_addmrpt_'||TO_CHAR(SYSDATE - &day,'YYYYMMDD_')||'&startTime'||'-'||'&endTime'||'.txt' rpt_name FROM v$instance;
-- Define rpt_name > set pagesize 0;
set heading off echo off feedback off verify off; COLUMN dbid NEW_VALUE dbid NOPRINT
SELECT dbid FROM v$database;
COLUMN instance_number NEW_VALUE instance_number NOPRINT
SELECT instance_number FROM v$instance; define view_loc_def = 'AWR_PDB';
define view_loc = '&view_loc_def'; variable dbid number;
variable inst_num number;
begin
:dbid := &dbid;
:inst_num := &instance_number;
end;
/ variable bid number;
variable eid number;
begin
:bid := &begin_snap;
:eid := &end_snap;
end;
/ variable task_name varchar2(40); set termout on
prompt
prompt Running the ADDM analysis on the specified pair of snapshots ...
set termout off begin
declare
id number;
name varchar2(100);
descr varchar2(500);
BEGIN
name := '';
descr := 'ADDM run: snapshots [' || :bid || ', '
|| :eid || '], instance ' || :inst_num
|| ', database id ' || :dbid; dbms_advisor.create_task('ADDM',id,name,descr,null); :task_name := name; -- set time window
dbms_advisor.set_task_parameter(name, 'START_SNAPSHOT', :bid);
dbms_advisor.set_task_parameter(name, 'END_SNAPSHOT', :eid); -- set instance number
dbms_advisor.set_task_parameter(name, 'INSTANCE', :inst_num); -- set dbid
dbms_advisor.set_task_parameter(name, 'DB_ID', :dbid); -- execute task
dbms_advisor.execute_task(name); end;
end;
/ set termout on
prompt
prompt Generating the ADDM report for this analysis ...
set termout off spool &rpt_name; set long 1000000 pagesize 0 longchunksize 1000
column get_clob format a80 select dbms_advisor.get_task_report(:task_name, 'TEXT', 'TYPICAL')
from sys.dual; spool off;
set termout on
prompt
prompt End of Report
prompt Report written to &rpt_name.

[自制工具]简便易用的ADDM报告生成工具的更多相关文章

  1. Oracle ADDM报告生成和性能分析

    我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315 对于局部的,比如某个页面列表sql,我们可以使用Oracle的 ...

  2. Oracle AWRDD报告生成和性能分析

    我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315 对于局部的,比如某个页面列表sql,我们可以使用Oracle的 ...

  3. 【C#】数据库脚本生成工具(二)

    年C#研发的数据库文档生成工具,给之后的工作带来了便利.近日,又针对该工具,用WinForm开发了数据库脚本生成工具-DbExcelToSQL. 下面数据库文档生成工具效果图: 感兴趣的朋友可以看下[ ...

  4. 数据字典生成工具(生成Excel, Word,PDF,html)

    转自:http://www.cnblogs.com/yanweidie/p/3838765.html 数据字典生成工具之旅系列文章导航 数据字典生成工具之旅系列文章导航 宣传语 数据字典生成工具.数据 ...

  5. oracle addm报告

    可通过@?/rdbms/admin/addmrpt.sql生成ADDM报告 ADDM本身并不是很实用,抽象级别太高,用于初步判断系统配置/IO子系统是否合理和快速参考,一个报告截图如下: 任务 '任务 ...

  6. H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权

    代码地址如下:http://www.demodashi.com/demo/14960.html 项目简介 H5DS (HTML5 Design software) 这是一款基于WEB的 H5制作工具. ...

  7. 简单易用的leetcode开发测试工具(npm)

    描述 最近在用es6解leetcode,当问题比较复杂时,有可能修正了新的错误,却影响了前面的流程.要用通用的测试工具,却又有杀鸡用牛刀的感觉,所以就写了个简单易用的leetcode开发测试工具,分享 ...

  8. jmeter报告分析工具

    一直以来做性能测试都是用jmeter和LR,当然还有一些自己写测试脚本,LR不用说,分析结果那个组件杠杠的!但是jmeter毕竟是开源的,所以分析查看结果不像LR那样自带图形神马的,虽然可以自己写脚本 ...

  9. ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成

    一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...

  10. Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

    那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...

随机推荐

  1. SpringMVC的执行原理

    1.HandlerMapping为处理器映射,DispatcherServlet调用HandlerMapping,HandlerMapping根据请求的url查找Handler 2.HandlerEx ...

  2. ProtocolBuffers的国际化和本地化支持

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 5. 优化与改进 34.< Protocol Buffers 的国际化和本地化支持> 本文将介绍 ...

  3. 用JavaScript撸一个静态链表

    最近重新开始翻起<大话数据结构>,看到了静态链表部分里面讲C语言是利用数组模拟,觉得十分有趣.但是在JavaScript中,也可以用类似的方式去实现,定义一个数据域和一个结点域,然后实现链 ...

  4. 如何让一句话木马绕过waf ?

    一.什么是一句话木马? 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. ...

  5. Net 编译器平台 --- Roslyn

    引言 最近做一个功能想要动态执行C#脚本,就是预先写好代码片段,在程序运行时去执行代码段,比如像这样(以下代码为伪代码): string scriptText = "int a = 1;in ...

  6. 当cmd运行python无法显示中文报错 SyntaxError: Non-UTF-8 code starting with 时

    报错图片: 解决方法: 在python的脚本开头加上 再运行后

  7. 用 Golang 从0到1实现一个高性能的 Worker Pool(一) - 每天5分钟玩转 GPT 编程系列(3)

    目录 1. 概述 2. 设计 2.1 让 GPT-4 给出功能点 2.2 自己总结需求,再给 GPT 派活 3. 实现 3.1 你先随意发挥 3.2 你得让 Worker 跑起来呀 3.3 你说说 P ...

  8. Debian12配置NTP时间同步

    环境 查看系统版本:lsb_release -a 配置NTP时间同步 下面的配置需要用到管理员权限,可以使用su切换到管理员权限. 查看/修正 时区 查看系统时区:timedatectl 如果时区不是 ...

  9. VueJs禁止页面鼠标右键、选中、调用开发者工具

    1.禁止鼠标右键操作 // 禁止鼠标右键 window.oncontextmenu = function () { return false; }; 2.禁止选中网页内容 // 禁止选中网页上内容 w ...

  10. RocketMq消费原理及源码解析

    消费原理概览 先简单说下常见的rocketMq的部署方式,上图中broker为真正计算和存储消息的地方,而nameServer负责维护broker地 图中右侧consume message部分即是本文 ...