如何对oracle11g日志分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对oracle11g日志分析相关的知识,希望对你有一定的参考价值。

参考技术A logminer作为相关的日志分析工具集成与oracle中,我们可通过该工具清楚的分析重做相关日志和归档日志中的所有事物变化,并且可以准确的确定各种DML和DDL操作的具体时间和SCN值。
通过logminer我们可以实现:
1,确定数据的逻辑损坏的时间
2,跟踪用户执行的事务变化操作
3,跟踪表的DML操作
如果我们要分析归档日志,我们首先修改oracle归档日志的模式,我们要把默认的归档路径改成我们自己的路径:
start mount;
alter database archivelog;
alter database open;
alter system set log_archive_dest_1='location=d:\oracle' scope=spfile;
alter system set log_archive_format='arch_%t_%s_%r.trc' scope=spfile;
查看我们修改过的归档路径:
archive log list;
查看归档日志:
select name,dest_id from v$archived_log;
如果查询的没有更改,我们需要重启一下数据库
安装logminer,安装logminer需要我们安装下面的几个包:
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql
$ORACLE_HOME/rdbms/admin/dbmslms.sql
这几个脚本必须是sys用户运行
@$ORACLE_HOME/rdbms/admin/dbmslm.sql
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
@$ORACLE_HOME/rdbms/admin/dbmslms.sql
添加数据字典,需要添加参数utl_file_dir,
alter system set utl_file_dir='/home/oracle/dir' scope=spfile;
添加supplement logging
首先查看
select name,supplemental_log_data_min from v$database;是否是yes
YES为打开状态,会记录session_info,username等信息
NO为关闭状态,不会记录sesion_info,username等信息
添加
alter database add supplemental log data;
关闭
alter database drop supplemental log data;
重启数据库,这样我们刚才的两个参数就会生效;
查看数据字典:
show parameter utl;
添加数据字典:
SQL> begin
2 dbms_logmnr_d.build(
3 dictionary_filename=>'logminer_dict.dat',
4 dictionary_location=>'/home/oracle/logminer');
5 end;
6 /
PL/SQL procedure successfully completed.
或是:
execute dbms_logmnr_d.build(dictionary_filename=>'logminer_dict.dat',dictionary_location=>'/home/oracle/logminer');
创建登录触发器:
SQL> create or replace trigger on_logon_tigger
2 after logon on database
3 begin
4 dbms_application_info.set_client_info(sys_context('userenv','ip_address'));
5 end;
6 /
Trigger created.
我们就可以在V$SESSION视图的CLIENT_INFO列中看到新登录的客户端IP地址了。那么现在就可以在
添加要分析的归档日志文件
SQL> begin
2 dbms_logmnr.add_logfile(
3 logfilename=>'/home/oracle/arch/arch_6_758944049_1.trc',options=>dbms_logmnr.new);
4 end;
5 /
PL/SQL procedure successfully completed.

SQL> begin
2 dbms_logmnr.add_logfile(
3 logfilename=>'/home/oracle/arch/arch_7_758944049_1.trc',
4 options=>dbms_logmnr.addfile);
5 end;
6 /
PL/SQL procedure successfully completed.

切换归档日志:
alter system switch logfile;
开启分析:
execute dmbs_logmnr.start_logmnr(dictfilename='/home/oracle/logminer/logminer_dict.dat');
或是:
execute dbms_logmnr.start_logmnr;
查询归档日志:
SQL> select name from v$archived_log;
NAME
--------------------------------------------------------------------------------
/home/oracle/arch/arch_6_758944049_1.trc
/home/oracle/arch/arch_7_758944049_1.trc
/home/oracle/arch/arch_8_758944049_1.trc
为了节约pga的空间,当我们分析完日志后,移除不需要的日志:
SQL> begin
2 dbms_logmnr.add_logfile(
3 logfilename=>'/home/oracle/arch/arch_7_758944049_1.trc',
4 options=>dbms_logmnr.removefile);
5 end;
6 /
PL/SQL procedure successfully completed.

查询结果在v$logmnr_contents;
查询数据库上面的操作
select scn,sql_redo,timestamp from v$logmnr.contents;
关闭分析
execute dbms_logmnr.stop_logmnr;
查询的时候最好使用plsql查询。

PowerBI分析Exchange服务器IIS运行日志

只要是基于Windows Server 的IIS来提供Web服务的应用,其实都可以对IIS的日志W3C进行分析,这样可以快速的了解整个web站点的运行情况,特别是对一些请求页面响应时间有要要求的,都可以从这些日志中分析问题出在哪,下面我就以Exchange服务器的IIS日志来给大家介绍PowerBI是如何分析W3C日志的。

要分析Exchange服务器上的IIS日志,首先需要确保IIS的日志是启用的状态,比如Default Web Site站点和Exchange Back End站点的日志,更多关于IIS站点日志设置的信息可以参考:

https://docs.microsoft.com/zh-cn/iis/configuration/system.applicationHost/sites/site/logFile/

技术分享图片

启用状态

技术分享图片

那么在C:\inetpub\logs\LogFiles目录下您才会看到如下日志目录及文件,每一个站点会生成一个W3SVC的文件夹存放日志,比如默认站点是W3SVC1,Exchange Back End是W3SVC2

技术分享图片

可以先用Notepad++查看下这些日志。可以看出基本是以空格为每一个值的划分的

技术分享图片

我多收集了几天的日志,然后把这些log文件拷贝到其他目录

技术分享图片

接下来我将这些Log文件全部利用Log Parser软件转成CSV文件(Log Parser下载地址:https://www.microsoft.com/en-my/download/details.aspx?id=24659),为什么要转换成CSV呢?虽然PowerBI可以去读Log的文件并以空格为分隔符划分列,但你会发现后面很多空格是没有划分出来的,或许是我遇到了吧,保险起见,这里我就转成了CSV文件

先安装好Log Parsr程序,接下来在日志所在目录我创建一个bat文件,内容如下:

cd "E:\Logs\W3SVC1"

for /R %%f in (*.log) do (

"C:\Program Files (x86)\Log Parser 2.2\"logparser -i:W3C -o:csv "SELECT * INTO ‘%%f.csv‘ FROM ‘%%f‘"

)

技术分享图片

打开PowerShell,执行这个bat脚本会批量的把这些Log文件全部转成csv文件

技术分享图片

都转换完毕后,把CSV文件单独放在一个文件夹里,接下来主要对默认站点的W3SVC1的CSV文件进行分析,还是老样子,先用PowerBI获取数据,选择文件夹

技术分享图片

浏览到日志所在目录

技术分享图片

选择组合——合并和编辑

技术分享图片

确定

技术分享图片

接下来我删除第一二列

技术分享图片

然后关闭并应用

技术分享图片

等待加载完成

技术分享图片

首先拖一个饼状图看看状态IIS的状态码占比,从占比了解运行情况,这里可以看到饼状图里显示了状态码的分布并显示出了状态码

状态码的含义可以参考:https://support.microsoft.com/en-us/help/943891/the-http-status-code-in-iis-7-0-iis-7-5-and-iis-8-0

但这些状态码是否可以更为直观的显示出含义呢?这里我准备了一个Excel表,整理下状态码和信息的关系

技术分享图片

技术分享图片

那么右边这些列各代表什么含义呢?可以参考https://msdn.microsoft.com/en-us/library/windows/desktop/aa814385(v=vs.85).aspx

日志文件是一种可定制的ASCII文本格式,文件中的字段前缀定义如下:

s

服务器操作

c

客户操作

sc

服务器到客户端的操作

cs

客户端到服务器操作

下面是我整理的W3C日志的字段和解释

技术分享图片

接下来我把上面整理出来的HTTP状态码Excel表也导入进PowerBI

技术分享图片

接下来选择关系——管理关系

技术分享图片

新建

技术分享图片

选择CSV里的sc-status列,然后选择Sheel1里的状态码进行关联,点击确定

技术分享图片

点击关闭

技术分享图片

关系图里就出现了一条线条关联上了2个表

技术分享图片

接下来回到报表里选择刚才的饼状图,我把信息拖到详细信息里,这时你会发现饼状图里原来的状态码全变成了含义的解释,这样更方便直观理解了

技术分享图片

调整下值的参数

技术分享图片

接下来再创建一个环形图,分析客户端IP源访问请求占比

技术分享图片

同理再创建一个服务端IP源访问请求占比

技术分享图片

接下来再分析客户端访问请求类型占比

技术分享图片

再拖一个时间切片器

技术分享图片

接下里再创建一个饼状图分析用户访问请求占比,看看谁访问Exchange请求最多

技术分享图片

接下来再分析页面访问次数及平均响应时间

技术分享图片

接下来再统计每一个页面状态的发生次数

技术分享图片

最后罗列时间,来源IP地址,以及用户采用的什么系统和浏览器或客户端访问的Exchange分析

技术分享图片

最后再美化和排版就大功告成了,当然这里介绍的是Exchange的日志分析,其他采用微软IIS作为WEB服务的都可以采用类似的方法来分析哦,毕竟IIS的日志记录都是一样的这些字段

技术分享图片

以上是关于如何对oracle11g日志分析的主要内容,如果未能解决你的问题,请参考以下文章

如何清理Oracle11g RAC日志文件

Oracle 11g R2 日志结构总结

如何清理Oracle11g RAC日志文件

如何在 oracle db 11g - centos 6 中启用查询日志

怎么分析 oracle 归档日志

深入分析Oracle数据库日志文件(1)