LogMiner是Oracle公司推出的一个非常有用的分析工具。通过它我们可以得到重做日志或者归档日志的内容。
当数据库出现问题之后,使用LogMiner挖掘日志,有时候会找到问题的根源,即使找不到,也对定位问题的成因会有所帮助。
一、 安装LogMiner
LogMiner的安装非常简单,只需要执行几个脚本。
这里用的是11g,版本不同,请参考官方文档。
dbmslm.sql:创建DBMS_LOGMNR包,该包用来分析日志文件。
dbmslmd.sql:创建DBMS_LOGMNR包,该包用来分析日志文件。
dbmslms.sql:创建dbms_logmnr_session包,该包用来分析session
第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。
SQL> conn / as sysdba已连接。SQL> @?/rdbms/admin/dbmslmd.sql程序包已创建。同义词已创建。SQL> @?/rdbms/admin/dbmslm.sql程序包已创建。授权成功。同义词已创建。SQL> @?/rdbms/admin/dbmslms.sql程序包已创建。没有错误。授权成功。二、 LogMiner的使用
在使用LogMiner之前,需要对数据库进行一些配置。
1. 开启归档模式
确认数据库启用归档模式,并配置配置归档路径
alter system set log_archive_dest_1=’location=/arch’ scope=spfile;
2. 添加补充日志
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;数据库已更改。3. 设置参数UTL_FILE_DIR
该参数值为服务器上存放数据数据字典的位置。
11g可以不需要数据字典,直接从重做日志或归档日志读取。10g目前还没有做测试。
但是如果需要异机上分析日志,就需要数据字典了。
alter system set UTL_FILE_DIR="/logminer" scope=spfile; 然后重启数据,使该参数生效。
4. 生成数据字典
BEGINdbms_logmnr_d.build(dictionary_filename =>"dict.ora",dictionary_location =>"/logminer");END;PL/SQL 过程已成功完成。这里生成的数据字典文件叫dict.ora
- 创建需要分析的文件列表
BEGIN dbms_logmnr.add_logfile(LogFileName=>"/arch/1_17_874057689.dbf",Options=>dbms_logmnr.new);END;PL/SQL 过程已成功完成。添加一个日志
BEGINdbms_logmnr.add_logfile(LogFileName=>"/u01/oradata/archlog/2_20910_766249125.arc",Options=>dbms_logmnr.addfile);END;PL/SQL 过程已成功完成。6. 开始分析日志
使用数据字典
BEGIN dbms_logmnr.start_logmnr(DictFileName=>"/logminer/dict.ora");END;PL/SQL 过程已成功完成。或者使用归档日志
BEGINsys.dbms_logmnr.start_logmnr( options => sys.dbms_logmnr.dict_from_online_catalog);END;PL/SQL 过程已成功完成。7. 查看日志的内容
SQL> select count(*) from v$logmnr_contents;
COUNT(*)---------- 4858. 停止分析,释放内存
SQL> exec sys.dbms_logmnr.end_logmnr;PL/SQL 过程已成功完成。三、 工作中遇上的问题
在对一个客户做异机日志挖掘的时候,碰上一些问题,贴在这里做一个记录。
1.
sys @ tttt>begin sys.dbms_logmnr.add_logfile(LogFileName=>"/arch2/ARC_LDSC_0000336865_0682715013.0002",Options => sys.dbms_logmnr.new);end;234/begin*ERROR at line 1:ORA-01284: file /arch2/ARC_LDSC_0000336865_0682715013.0002 cannot be openedORA-00317: file type 3840 in header is not log fileORA-00334: archived log: "/arch2/ARC_LDSC_0000336865_0682715013.0002"ORA-06512: at "SYS.DBMS_LOGMNR", line 68ORA-06512: at line 2- 问题分析
报错说归档日志不是日志文件。
初步判断是文件传输的问题,最开始传递归档的时候,是先传到我本机,然后再传到另外一个数据库做分析。归档日志是从AIX->Windows->AIX,在传递过程中文件头有些改变。 - 解决方法:
直接讲日志传到目标服务器进行分析,问题解决。
2.
BEGINsys.dbms_logmnr.add_logfile(LogFileName=>"/arch2/arch2/ARC_LDSC_0000336865_0682715013.0002",Options => sys.dbms_logmnr.new);END;BEGIN sys.dbms_logmnr.add_logfile(LogFileName=>"/arch2/arch2/ARC_LDSC_0000336865_0682715013.0002",Options => sys.dbms_logmnr.new); END;*ERROR at line 1:ORA-01284: file /arch2/arch2/ARC_LDSC_0000336865_0682715013.0002 cannot beopenedORA-00331: log version 10.2.0.4.0 incompatible with ORACLE version 10.2.0.3.0ORA-00334: archived log: "/arch2/arch2/ARC_LDSC_0000336865_0682715013.0002"ORA-06512: at "SYS.DBMS_LOGMNR", line 68ORA-06512: at line 1- 问题分析:
从报错内容来看是两个库compatible参数不一致。 - 解决方法
经过检查发现确实是两个库参数不一致,讲目标数据库的参数改成10.2.0.4.0,重启后问题解决。
更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址