设为首页 收藏本站
查看: 972|回复: 0

[经验分享] 使用LogMiner分析oracle的redo日志和归档

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-14 09:47:23 | 显示全部楼层 |阅读模式
  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、修改数据库参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--数据库版本
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、准备测试数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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、创建数据字典
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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'));

创建数据字典的目的就是让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。
5、确认当前处理联机状态的redo日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sys@ORCL>select group#,status from v$log;

    GROUP# STATUS
---------- ------------------------------------------------
     1 INACTIVE
     2 CURRENT
     3 INACTIVE
sys@ORCL>select group#,member from v$logfile;

    GROUP# MEMBER
---------- ----------------------------------------------------------------------------------------------------
     3 /u02/app/oracle/oradata/orcl/redo03.log
     2 /u02/app/oracle/oradata/orcl/redo02.log
     1 /u02/app/oracle/oradata/orcl/redo01.log



可以看出redo02处于current状态
6、加入需要分析的日志
1
2
3
4
5
6
--第一个日志文件使用dbms_logmnr.new
sys@ORCL>exec dbms_logmnr.add_logfile(LOGFILENAME=>'/u02/app/oracle/oradata/orcl/redo02.log',OPTIONS=>dbms_logmnr.new);

PL/SQL procedure successfully completed.
--如果需要加入其他的日志使用如下语句
exec dbms_logmnr.add_logfile(LOGFILENAME=>'/u02/app/oracle/oradata/orcl/redo03.log',OPTIONS=>dbms_logmnr.addfile);



7、使用LogMiner进行分析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sys@ORCL>exec dbms_logmnr.start_logmnr(DICTFILENAME=>'/home/oracle/logminer/dictionary.ora');

PL/SQL procedure successfully completed.

sys@ORCL>col seg_name for a15
sys@ORCL>col seg_owner for a15
sys@ORCL>col operation for a20
sys@ORCL>col sql_redo for a180
sys@ORCL>set linesize 200
sys@ORCL>select seg_owner,seg_name,operation,sql_redo from v$logmnr_contents where seg_owner='ZX' and seg_name='LOG_MINER';

SEG_OWNER   SEG_NAME    OPERATION        SQL_REDO
--------------- --------------- -------------------- --------------------------------------------------------------------------------
ZX      LOG_MINER   DDL          create table log_miner (id number,name varchar2(10));
ZX      LOG_MINER   INSERT           insert into "ZX"."LOG_MINER"("ID","NAME") values ('1','zx');
ZX      LOG_MINER   INSERT           insert into "ZX"."LOG_MINER"("ID","NAME") values ('1','lx');
ZX      LOG_MINER   INSERT           insert into "ZX"."LOG_MINER"("ID","NAME") values ('1','xx');



以上为分析在线redo日志的过程,分析归档日志的步骤同样,只是在添加日志文件的时候把在线redo日志换为归档日志即可。归档日志也可以传输到其他数据库服务器上进行数据分析,但分析时需要使用源库的字典文件。

LogMiner使用注意事项:
  • 源库与Mining数据库必须运行在同样的硬件平台上,windows的不可以传到Linux上进行分析
  • Mining数据库的版本大于等于源库的数据库版本
  • Mining数据库的字符集需要与源库一致或是源库的超集



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-300113-1-1.html 上篇帖子: Centos 6.5安装oracle 11g 下篇帖子: oracle rac 更改归档目录 oracle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表