<%@ page contentType="text/html; charset=gb2312"%> 分析oracle数据库日志文件(2)
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
分析oracle数据库日志文件(2)
     发布者: 发布时间:2006-05-07

四、如何利用logminer分析oracle8的日志文件

虽然说logminer是oracle8i才推出来,但我们同样可以用它来分析oracle8的日志文件,只不过稍微麻烦了一点,并且有一定的限制,下面是具体做法:

我们首先复制oracle8i的$oracle_home/rdbms/admin/dbmslmd.sql脚本到oracle8数据库所在主机的同样目录;这个脚本用于创建dbms_logmnr_d包(注意,oracle9i中还将创建dbms_logmnr包),如果是8.1.5脚本名字为dbmslogmnrd.sql。然后在oracle8的数据库上运行这个脚本,之后使用dbms_logmnr_d.build过程创建字典信息文件。现在我们就可以把oracle8的归档日志连同这个字典信息文件复制到oracle8i数据库所在的主机上,之后在oracle8i数据库中从上面分析过程的第三步开始分析oracle8的日志,不过

dbms_logmnr.start_logmnr()中使用的是oracle8的字典信息文件。

按照我前面所说的那样,如果不是字典文件,我们则可以直接将oracle8的归档日志复制到oracle8i数据库所在主机,然后对它进行分析。

其实这里涉及到了一个跨平台使用logminer的问题,笔者做过试验,也可以在oracle9i中来分析oracle8i的日志。但这些都是有所限制的,主要表现在:

1、logminer所使用的字典文件必须和所分析的日志文件是同一个数据库所产生的,并且该数据库的字符集应和执行logminer数据库的相同。这很好理解,如果不是同一个数据库所产生就不存在对应关系了。

2、生成日志的数据库硬件平台和执行logminer数据库的硬件平台要求一致,操作系统版本可以不一致。笔者做试验时(如果读者有兴趣可以到我网站http://www.ncn.cn上下载试验全过程,因为太长就不放在这里了),所用的两个数据库操作系统都是tru64 unix,但一个是 v5.1a,另一个则是v4.0f。如果操作系统不一致则会出现下面的错误:

ora-01284: file /data6/cyx/logmnr/arch_1_163570.arc cannot be opened
ora-00308: cannot open archived log ''/data6/cyx/logmnr/arch_1_163570.arc''
ora-27048: skgfifi: file header information is invalid
ora-06512: at "sys.dbms_logmnr", line 63
ora-06512: at line 1
 


五、分析v$logmnr_contents

前面我们已经知道了logminer的分析结果是放在v$logmnr_contents中,这里面有很多信息,我们可以根据需要追踪我们感兴趣的信息。那么我们通常感兴趣的有哪些呢?

1、追踪数据库结构变化情况,即ddl操作,如前所述,这个只有oracle9i才支持:

sql> select timestamp,sql_redo from v$logmnr_contents2
where upper(sql_redo) like ''%create%'';
timestamp
-------------------
sql_redo
-------------------------
2003-09-21 10:01:55
create table t (c1 number);
 


2、追踪用户误操作或恶意操作:

例如我们现实中有这样需求,有一次我们发现一位员工通过程序修改了业务数据库信息,把部分电话的收费类型改成免费了,现在就要求我们从数据库中查出到底是谁干的这件事?怎么查?logminer提供了我们分析日志文件的手段,其中v$logmnr_contents的session_info列包含了下面的信息:

login_username=new_97
client_info= os_username=oracle8 machine_name=phoenix1
 os_terminal=ttyp3 os_process_id=8004 os_program name=sqlplus@phoenix1
 (tns v1-v3)
 


虽然其中信息已经很多了,但在我们的业务数据库中,程序是通过相同的login_username登录数据库的,这样单从上面的信息是很难判断的。

不过我们注意到,因为公司应用服务器不是每个人都有权限在上面写程序的,一般恶意程序都是直接通过他自己的pc连到数据库的,这就需要一个准确的定位。ip追踪是我们首先想到的,并且也满足我们的实际要求,因为公司内部ip地址分配是统一管理的,能追踪到ip地址我们就可以准确定位了。但从面的session_info中我们并不能直接看到ip,不过我们还是有办法的,因为这个session_info里面的内容其实是日志从v$session视图里提取的,我们可以在生产数据库中创建一个追踪客户端ip地址的触发器:

create or replace trigger on_logon_trigger
after logon on database
begin
  dbms_application_info.set_client_info(sys_context(''userenv'', ''ip_address''));
end;
/
 


现在,我们就可以在v$session视图的client_info列中看到新登录的客户端ip地址了。那么上面的提出的问题就可以迎刃而解了。假如被更新的表名为hmlx,我们就可以通过下面的sql来找到所需信息:

sql > select session_info ,sql_redo from v$logmnr_contents
2 where upper(operation) = ''update''  and upper(sql_redo) like ''%hmlx%''
3 /
session_info
-----------------------------------------
sql_redo
-----------------------------------------
login_username=c client_info=10.16.98.26 os_username=sz-xjs-chengyx machine_name
=gdtel\sz-xjs-chengyx
update "c"."hmlx" set "name" = ''free'' where "name" = ''ncn.cn'' and rowid = ''aaabhtaa
faaabraaae'';
 


六、参考资料:

1、technical white paper oracle9i logminer

2、metalink文档:how to setup logminer(文档id:111886.1)

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
在.net中使用oracle数据库事务
oracle中的临时表用法汇总
pl/sql工具连接oralce数据库的方法
oracle数据库几种关闭方式
oracle数据库几种启动方式
oracle并行服务器(ops)十二问(1)
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(8035)
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(4921)
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(9001)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(8803)
        
回复:分析oracle数据库日志文件(2)
Google排名 谢谢,
下次再来.
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号