最终版-perl工具解析数据库的报告文件0120

********************需要根据自己的实际环境修改哦****************************

********************

1. 收集awr报告样本   awrreport.sql

--该脚本请用具有 dba 权限的用户执行,普通用户没有权限访问数据库的基表

conn &usr/ &pass @ &oracle_sid

set linesize 1200 ;
set pagesize 0;
set long 99999;
set heading off;
--set termout off;
set echo off;
set feedback off;
set timing off;
set serveroutput on;

exec dbms_output.put_line(‘report_name,for example:hydk‘);
spool awrrpt_tmp.sql;

select
‘spool &report_name‘||‘_awrrpt_‘||snap_id||‘_‘||(snap_id+1)||‘.lst‘||chr(10)||
‘select output ‘||chr(10)||
‘ from table(dbms_workload_repository.awr_report_text(‘||dbid||‘,1,‘||snap_id||‘,‘||(snap_id+1)||‘));‘||chr(10)||‘spool off;‘||chr(10)
from dba_hist_snapshot;
whenever sqlerror continue;
spool off ;
@awrrpt_tmp.sql;

---- 这里要等一段时间,多敲几下回车以保证上面的语句都执行 ---

host del awrrpt_tmp.sql;
exit;

********************

2.    .bat文件 批量执行sql脚本,避免 重复的复制粘贴

@echo off
echo ***************************************************
echo * *
echo * 此脚本用于数据库的awr报告文件 *
echo * *
echo ***************************************************
echo 
echo 请按照[ ]中的提示输入参数,如不输入,则自动设为默认
echo.

rem -------------------------------------------------------
%~d0
cd %~dp0

set setup=setup.sql

set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

echo set echo off >> %setup%
echo set verify off >> %setup%
rem -------------------------------------------------------------------
rem 脚本内容写入setup.sql一起运行
echo.

set model=

if "%model%"=="1" goto model1
if "%model%"=="" goto model1

goto end

:model1
echo @./start/awrreport.sql >> %setup%
goto next

:next
rem 运行脚本

echo exit >> %setup%
sqlplus /nolog @%setup%
echo 运行成功
del setup.sql
::exit

:end

exit

********************

3. perl工具 解析 生成的  .lst 文件

rem 该脚本用于使用perl工具 解析 生成的 .lst 文件 (以实际环境为准)
rem 进入指定盘符
c:

rem 进入该盘符下的指定目录,改盘符就是 那些.lst文件的目录
cd C:\Users\Administrator\Desktop\mon_ora11g\脚本生成awr报告文件

rem 使用绝对路径下的perl工具,解析 生成的 .lst 文件
E:\app\oracle\product\11.2.0\db_1\perl\bin\perl.exe -w awrreport.pl

********************

4. perl 工具的 配置文件

use strict;
#use File::Find;
#

my $root_dir=‘.‘;
open(DataFile, ">$root_dir\\fzjk.txt") || die "can not create file";

print DataFile " 日期 ", " 时间 ", " Redo size",
" Logical reads", " Block changes",
" Physical reads", " Physical writes",
" User calls", " Parses",
" Hard parses",
" Logons", " Executes",
" Transactions",
"\n";

print DataFile " PerSecond PerTransaction PerSecond PerTransaction",
" PerSecond PerTransaction", " PerSecond PerTransaction",
" PerSecond PerTransaction", " PerSecond PerTransaction",
" PerSecond PerTransaction", " PerSecond PerTransaction",
" PerSecond PerTransaction",
" PerSecond PerTransaction",
" PerSecond",
"\n";

my @xljk = ("Buffer Nowait", "Redo NoWait", "Buffer Hit", "In-memory Sort",
"Library Hit", "Soft Parse", "Execute to Parse", "Latch Hit","Parse CPU to Parse Elapsd",
"Non-Parse CPU");
open(XLFile, ">$root_dir\\xljk.txt") || die "can not create file";

print XLFile " 日期 ", " 时间 ";

foreach my $i ([email protected])
{
print XLFile " $xljk[$i]| ";
}
print XLFile "\n";

open(GXZFile, ">$root_dir\\gxcjk.txt") || die "can not create file";
my @gxzjk = ( "Memory Usage ","SQL with executions>1","Memory for SQL w/exec>1");
print GXZFile " 日期 ", " 时间 ";

foreach my $i ([email protected])
{
print GXZFile " $gxzjk[$i]| ";
}

print GXZFile "\n begin end ave begin end begin end";
print GXZFile "\n";

#下例仅遍历当前目录:
my($file);
my @filename;

opendir(myDir, $root_dir);
while ($file = readdir myDir)
{

#@filename = (@filename, $file) if ($file =~/lst$/i);
if ($file =~/lst$/i)
{
@filename = (@filename, $file);
#$file =~/(\d+)\D*(\d+)/;
#print $1, $2, "\n";
}
}
closedir(myDir);
#print @filename, "\n";

#sub subdig($a)

#
@filename = sort {
$_=$a;
m/(\d+)\D*/;
my $aa = $1;
#print $aa;

$_ = $b;
m/(\d+)\D*/;
#print " ", $1, "\n";
$aa <=> $1; } @filename;

my @xlpat = ("Buffer Nowait %:", "Redo NoWait %:", "Buffer Hit %:", "In-memory Sort %:",
"Library Hit %:", "Soft Parse %:", "Execute to Parse %:", "Latch Hit %:",
"Parse CPU to Parse Elapsd %:", "% Non-Parse CPU:");
my @xlpatlen = (13,11,11,14,11,10,16,9,25,13);

my @gxzpat = ("Memory Usage %:","% SQL with executions>1:"," % Memory for SQL w/exec>1:");
my @gxzpatlen = (12,21,23);

foreach my $i ([email protected])
{
open(Spreport, "$root_dir\\$filename[$i]" ) || warn "can not open file\n";
#print DataFile $root_dir ."\\". $filename[$i], "\n";

while(my $line = <Spreport> ) #获取文件中的每一行
{
if( $line =~/Begin Snap:\s+\d+\s+(\S+)\s*(\S+)\s*(\S+)/ )
{

if(index($3,":")!=-1)
{print DataFile $1,$2,$3, " ";
print XLFile $1,$2,$3, " ";
print GXZFile $1,$2,$3, " ";
}
else
{print DataFile $1,$2," ", " ";
print XLFile $1,$2, " ";
print GXZFile $1,$2, " ", " ";
}

}

#Redo size
if(($line =~/Redo size\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Redo size:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
{
# $line =~/:\s+(\S+)\s*(\S+)/;
printf(DataFile "%-8s %-12s ",$1,$2);
#print DataFile $1," ", $2, " ";
}

#Logical read
if(($line =~/Logical read\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Logical reads:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if( $line =~/Logical reads\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Redo sizes:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-9s %-12s ",$1,$2);
}

#Block changes
if(($line =~/Block changes\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Block changes:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if( $line =~/Block changes\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ &&$line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-8s %-12s ",$1,$2);
}

#Physical read

if(($line =~/Physical read\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Physical reads:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )

#if(($line =~/Logical read\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Logical reads:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if( $line =~/Physical reads\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ &&$line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-8s %-12s ",$1,$2);
}

#Physical write
if(($line =~/Physical write\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Physical writes:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if( $line =~/User calls\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ &&$line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-8s %-12s ",$1,$2);
}

#User calls

if(($line =~/User calls\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/User calls:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if(($line =~/User calls\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/User callss+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-8s %-12s ",$1,$2);
}

#Parses
if(($line =~/Parses\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Parses:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if( $line =~/parses\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ &&$line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-8s %-12s ",$1,$2);
}

#Hard parses
if(($line =~/Hard parses\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Hard parses:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if( $line =~/Hard parses\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ &&$line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-8s %-12s ",$1,$2);
}

# if(($line =~/Physical write\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Physical write:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
# if( $line =~/Sorts\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ &&$line =~/:\s+(\S+)\s*(\S+)/ )
# {
# printf(DataFile "%-8s %-12s ",$1,$2);
# }

#Logons

if(($line =~/Logons\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Logons:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if( $line =~/Logons\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ &&$line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-8s %-12s ",$1,$2);
}

#Executes
if(($line =~/Executes\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Executes:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if( $line =~/Executes\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ &&$line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-8s %-12s ",$1,$2);
}

#Transactions

if(($line =~/Transactions\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ || $line =~/Transactions:\s+(\S+)\s*(\S+)/)&& $line =~/:\s+(\S+)\s*(\S+)/ )
#if( $line =~/Transactions\s+(\S+)\s*(\S+):\s+(\S+)\s*(\S+)/ &&$line =~/:\s+(\S+)\s*(\S+)/ )
{
printf(DataFile "%-8s",$1);
}

foreach my $j ([email protected])
{

printf(XLFile "%-$xlpatlen[$j]s ", $1) if($line =~/$xlpat[$j]\s+(\S+)/ );
}

foreach my $j ([email protected])
{
if($line =~/$gxzpat[$j]\s+(\S+)\s+(\S+)/ )
{
printf(GXZFile "%-6s %-6s ", $1, $2) ;
printf(GXZFile "%-7s ",($1+$2)/2) if($j==0);
printf GXZFile " " if($j==1);
}
}

}
print DataFile "\n";
print XLFile "\n";
print GXZFile "\n";

close Spreport;
}

close DataFile;
close XLFile;
close GXZFile;

时间: 2024-10-23 23:13:19

最终版-perl工具解析数据库的报告文件0120的相关文章

超级狗 加密工具解析(正式版)

超级狗 加密工具全面解析 SuperDog 一.超级狗工具开发套件: 1.超级狗工具的简介. 2.超级狗开发套件(光盘). ①.超级狗工具使用手册(PDF). ②.Android.Linux.Windows 平台的安装包(PDF). 3.一个开发主狗和用户狗. 二.安装开发软件: 读取光盘中文件,选择适用平台的安装包进行安装即可(一键式安装程序). 安装目录: 发布说明   (PDF) 开发商指南(PDF) 1.DRM工具 ①.超级狗DRM打包工具 2.软件保护工具 ①.超级狗编程工具 ②.超级

20172333 2017-2018-2 《程序设计与数据结构》实验2报告(最终版)

20172333 2017-2018-2 <程序设计与数据结构>实验2报告(最终版) 1.结对成员 李楠20172330 领航员:李楠 驾驶员:严域俊 成绩分配:五五开 2.相关测试过程及截图 [x] 完整一套流程截图(创建题目,中缀转后缀,计算后缀,对比答案,答案正确个数.) [x] 分数测试类单独测试截图 [x] 整数测试类单独测试截图 [x] 中缀转后缀单独测试截图 3.测试中遇到的问题及解决办法 这周主要问题所在:由于在最后计算测试类编写的时候运用的方法来自几个类的合并,导致了在输出答

使用pentaho工具将数据库数据导入导出为Excel

写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工具功能不仅仅局限这一点,其他功能后续更新. 工具下载:你可以根据你电脑的系统选择不同版本在pentaho官网进行下载: http://www.pentaho.com/download 需求一:将mysql一张表数据导出到Excel 第一步:添加数据库驱动包 注意:由于本例我要将mysql数据库数据导

jQuery 3.0最终版发布,十大新特性眼前一亮

jQuery 3.0在日前发布了最终的全新版本.从2014年10月,jQuery团队对这个主要大版本进行维护开始,web开发者社区便一直在期待着这一刻的到来,终于在2016年6月他们迎来了这一个最终版www.lampbrother.net. 通过jQuery 3.0的版本更新说明,我们看到了一个保持着向后兼容的更轻便,更快速的jQuery.在本文中,我们将介绍一些令人眼前一亮的jQuery 3.0全新特性. 开始前的说明 如果你想要下载jQuery 3.0进行亲自实验,可以通过该页面进行下载.另

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

Xcode7.3工具解析App崩溃日志(.crash文件)

Xcode7.3工具解析App崩溃日志(.crash文件) 原文链接:http://blog.csdn.net/u011056605 开发的App或者游戏提交审核后,偶尔会收到测试反馈的消息,说应用崩溃了,bug偶尔出现,难以找到确定的重现方法. 怎么办?可以分析崩溃文件啊,也就是app崩溃后,自动保存在设备本地的.crash文件. 获得崩溃日志的方式,在 获取设备上的调试信息与崩溃日志分析 中有说. 在环境ok的情况下,xcode中是可以自动解析.crash文件的.旧版本的xcode甚至可以导

数据库实验报告

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/29028363 使用SQL Server 开发服务器端应用程序 一.实验类别 综合型实验 二.实验目的 熟练掌握后台服务器端应用程序的开发. 三.实验环境 SQL Server 系列的数据库管理系统 四.实验内容 对学生-课程数据库,编写存储过程,完成下面功能: 1.逐条(使用游标)浏览某个系的学生记录: 2.统计任意一门课程的成绩分布情况,即按照各分数段统计人数: 3.统

《数据库系统概论(第5版)》课后习答案 王珊、萨师煊编著版 课后题解析 高等教育出版社出版 答

<数据库系统概论(第5版)>课后习答案 王珊.萨师煊编著版 课后题解析 高等教育出版社出版 答案与解析 <数据库系统概论(第5版)> 王珊.萨师煊编著版 第二篇 第1章 课后答案与解析 完整答案在页面最下方 前言第一篇 基 础 篇 课后习题答案与解析第1章 绪论 课后习题答案与解析1.1 数据库系统概述1.2 数据模型1.3 数据库系统的结构1.4 数据库系统的组成1.5 小结习题本章参考文献第2章 关系数据库 课后习题答案与解析2.1 关系数据结构及形式化定义2.2 关系操作2.

最终版的Web(Python实现)

天啦,要考试了,要期末考试了,今天把最终版的Python搭建Web代码先写这里记下了.详细的过程先不写了. 这次是在前面的基础上重写 HTTPServer 与 BaseHTTPRequestHandler,主要利用 python 提供 的 socket 进行编程,从而实现消息的接收与相应:然后再接着引入多线程,分别处理来自客户端的请求:最后实现根据客户端传递的参数动态生成页面的功能. 主要步骤如下: 一. .重写 HTTPServer 与 BaseHTTPRequestHandlerPython