返回顶部

欢迎来到菜鸟大明儿哥的博客

我们一起交流学习,不断提升自我

使用Logminer分析Oracle日志

 

官方文档地址: http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019

 

一、概述

  所有对用户数据和数据字典的改变都记录在Oracle的Redo Log中,因此,Redo Log包含了所有进行恢复操作所需要的信息。但是,原始的Redo Log文件无法看懂,所以,Oracle从8i以后提供了一个非常有用的分析工具,称为LogMiner。使用该工具可以轻松获得Redo Log文件(包含归档日志文件)中的具体内容。特别是该工具可以分析出所有对于数据库的DML操作(INSERT、UPDATE、DELETE等)语句。Oracle 9i后可以分析DDL语句,另外还可分析得到一些必要的回滚SQL语句。LogMiner一个最重要的用途就是不用全部恢复数据库就可以恢复数据库的某个变化。该工具特别适用于调试、审计或者回退某个特定的事务。

  LogMiner工具既可以用来分析在线日志,也可以用来分析离线日志文件,既可以分析本身自己数据库的重作日志文件,也可以用来分析其它数据库的重作日志文件。当分析其它数据库的重作日志文件时,需要注意的是,LogMiner必须使用被分析数据库实例产生的字典文件,而不是安装LogMiner的数据库产生的字典文件,另外,必须保证安装LogMiner数据库的字符集和被分析数据库的字符集相同。源数据库(Source Database)平台必须和分析数据库(Mining Database)平台一样。

  Oracle通过LogMiner工具对Redo Log进行挖掘,显示出一系列可读的信息,该过程称为日志挖掘。LogMiner通过V$LOGMNR_CONTENTS视图显示Redo Log中的信息。

 

 

 

 

 

总的说来,LogMiner工具的主要用途有:

1、跟踪数据库的变化:可以离线地跟踪数据库的变化,而不会影响在线系统的性能

2、回退数据库的变化:回退特定的变化数据,减少Point-In-Time Recovery的执行

3、优化和扩容计划:可通过分析日志文件中的数据以分析数据的增长模式

4、确定数据库的逻辑损坏时间:准确定位操作执行的时间和SCN

5、确定事务级要执行的精细逻辑恢复操作,可以取得相应的UNDO操作

6、执行后续审计

 

二、Logminer安装步骤

 

1.开启归档日志

 

shutdown immediate;

startup mount;

alter database archivelog;

alter database open; 

 

2.安装包(12C安装只需要前两个,但并不影响使用)

SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql

SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql

SQL>@$ORACLE_HOME/rdbms/admin/dbmslms.sql

这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。若要使普通用户具有日志挖掘的权限,则可以执行如下的SQL进行赋权:

GRANT EXECUTE ON DBMS_LOGMNR TO LHR_TEST;

脚本执行完毕后,LogMiner包含两个PL/SQL包和几个视图:

 

 

 

 

@$ORACLE_HOME/rdbms/admin/dbmslm.sql

 

Session altered.


Package created.


Grant succeeded.


Synonym created.


Session altered.

 

@$ORACLE_HOME/rdbms/admin/dbmslmd.sql

 

Session altered.


Package created.


Synonym created.


Session altered.

 

3.Logminer 需要开启全字段日志补全功能(suppplemental logging,表级/列级) ,能够补全数据库日志信息,保证传递信息的全面性。(此操作会增加 Oracle 数据库的日志量)

 

1.开启最小补充日志

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

 

2.开启主键、唯一字段

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(ALL,PRIMARY KEY,UNIQUE) COLUMNS;

 

3.查看是否开启成功

SQL> SELECT supplemental_log_data_min min, supplemental_log_data_pk pk, supplemental_log_data_ui ui,supplemental_log_data_fk fk,supplemental_log_data_all allc FROM v$database;

 

MIN  PK   UI    FK   ALL
-------- --- --- --- ---
YES YES YES NO YES

 

4.创建用户并赋权

11c 以下

CREATE USER <user name> IDENTIFIED BY <password>;
GRANT create session, alter session, execute_catalog_role, select
any transaction, select any table to <user name>;
GRANT select on GV_$DATABASE to <user name>;
GRANT select on GV_$ARCHIVED_LOG to <user name>;
GRANT select on V_$LOGMNR_CONTENTS to <user name>;
GRANT select on <db>.<table> TO <user name>;


12c 或 18c

CREATE USER <user name> IDENTIFIED BY <password>;
GRANT create session, alter session, logmining,
execute_catalog_role TO <user name>;
GRANT select on GV_$DATABASE to <user name>;

GRANT select on V_$DATABASE to <user name>;
GRANT select on V_$LOGMNR_CONTENTS to <user name>;
GRANT select on GV_$ARCHIVED_LOG to <user name>;

GRANT select on V_$ARCHIVED_LOG to <user name>;

GRANT select on V_$LOGFILE to <user name>;.

GRANT select on V_$LOG to <user name>;
GRANT select on <db>.<table> TO <user name>;

 

19C

CREATE USER <user name> IDENTIFIED BY <password>;
GRANT create session, alter session, logmining,
execute_catalog_role TO <user name>;
GRANT select on GV_$DATABASE to <user name>;
GRANT select on V_$LOGMNR_CONTENTS to <user name>;
GRANT select on GV_$ARCHIVED_LOG to <user name>;
GRANT select on V_$LOG to <user name>;
GRANT select on V_$LOGFILE to <user name>;
GRANT select on V_$LOGMNR_LOGS to <user name>;
GRANT select on <db>.<table> TO <user name>;

 

注:execute_catalog_role

This role can be granted to users to allow EXECUTE privileges for packages and procedures in the data dictionary.

 

三、测试 Logminer

步 骤 1 :

在 登 陆 用 户 条 件 下 输 入

SQL>select name from V$ARCHIVED_LOG;

 

 

 

b. 找 到 archive log file

c. 上图中内容 archive log file

 步骤 2:任意一个 archive log file 作为 logmnr 测试分析使用


复制 archive log file 路径

输入 「execute sys.dbms_logmnr.add_logfile(logfilename=>'此处输入路径',options=>dbms_logmnr.new);」

输 入 「 execute sys.dbms_logmnr.start_logmnr(Options =>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG)」

 

输入「select count(*) from v$logmnr_contents;」解析日志记录条数

当看到数字时,即表示 logmnr 已经成功部署并且可以正常使用

 

 

 

 

参考文章:https://blog.csdn.net/yes_is_ok/article/details/79296614

posted @ 2021-09-06 17:08  菜鸟大明儿哥  阅读(1856)  评论(0编辑  收藏  举报