使用LogMiner分析Oracle的redo日志和归档

Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的DML和DDL语句。该工具特别适用于调试、审计或者回退某个特定的事务。

LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据库的一部分来发布是8i产品提供的一个完全免费的工具。但该工具和其他Oracle内建工具相比使用起来显得有些复杂,主要原因是该工具没有提供任何的图形用户界面(GUI)。

1、安装LogMiner

在使用LogMiner之前需要确认Oracle是否带有进行LogMiner分析包,一般来说Windows操作系统Oracle10g以上都默认包含。如果不能确认,可以DBA身份登录系统,查看系统中是否存在运行LogMiner所需要的dbms_logmnr、dbms_logmnr_d包,如果没有需要安装LogMiner工具,必须首先要运行下面这样两个脚本:

a.$ORACLE_HOME/rdbms/admin/dbmslm.sql

b.$ORACLE_HOME/rdbms/admin/dbmslmd.sql

这两个脚本必须均以DBA用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。

2、修改数据库参数

--数据库版本
sys@ORCL>select * from v$version;
 
BANNER
-----------------------------------------------------------
CORE    11.2.0.4.0  Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
--为数据库添加最小附加日志
sys@ORCL>alter database add supplemental log data;
 
Database altered.
 
sys@ORCL>select supplemental_log_data_min from v$database;
 
SUPPLEMENTAL_LOG_DATA_MI
------------------------
YES
--设置utl_file_dir参数
sys@ORCL>alter system set utl_file_dir='/home/oracle/logminer' scope=spfile;
 
System altered.
--重启数据库
sys@ORCL>shutdown immediate
sys@ORCL>startup
sys@ORCL>show parameter utl_file_dir
 
NAME                    TYPE                VALUE
------------------------------------ --------------------------------- ------------------------------
utl_file_dir                string                  /home/oracle/logminer

3、准备测试数据

sys@ORCL>conn zx/zx
Connected.
zx@ORCL>create table log_miner (id number,name varchar2(10));
 
Table created.
 
zx@ORCL>insert into log_miner values(1,'zx');
 
1 row created.
 
zx@ORCL>insert into log_miner values(1,'lx');
 
1 row created.
 
zx@ORCL>insert into log_miner values(1,'xx');
 
1 row created.
 
zx@ORCL>commit;
 
Commit complete.

4、创建数据字典

zx@ORCL>conn / as sysdba
Connected.
sys@ORCL>desc dbms_logmnr_d
PROCEDURE BUILD
 Argument Name            Type            In/Out Default?
 ------------------------------ ----------------------- ------ --------
 DICTIONARY_FILENAME      VARCHAR2        IN    DEFAULT
 DICTIONARY_LOCATION      VARCHAR2        IN    DEFAULT
 OPTIONS          NUMBER          IN    DEFAULT
PROCEDURE SET_TABLESPACE
 Argument Name            Type            In/Out Default?
 ------------------------------ ----------------------- ------ --------
 NEW_TABLESPACE      VARCHAR2        IN
 
sys@ORCL>exec dbms_logmnr_d.build(DICTIONARY_FILENAME=>'dictionary.ora',DICTIONARY_LOCATION=>'/home/oracle/logminer');
LogMnr Dictionary Procedure started
LogMnr Dictionary File Opened
Procedure executed successfully - LogMnr Dictionary Created
 
PL/SQL procedure successfully completed.
 
sys@ORCL>!ls -l /home/oracle/logminer/dictionary.ora
-rw-r--r-- 1 oracle oinstall 41483316 Nov 11 21:08 /home/oracle/logminer/dictionary.ora

LogMiner工具实际上是由两个新的PL/SQL内建包((DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建)组成。在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包将数据字典导出为一个文本文件。该字典文件是可选的,但是如果没有它,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的。例如,下面的sql语句:

INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, '张三');

LogMiner解释出来的结果将是下面这个样子:

insert into Object#308(col#1, col#2) values (hextoraw('c30rte567e436'), hextoraw('4a6f686e20446f65'));

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/290d3345b486ad56a9b3fa6e15dd9a18.html