Oracle Logminer分析日志

官方地址:https://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019
版本: oracle 11.2.0.4

官方资料

LogMiner Configuration

包含以下部分:

  • The source database is the database that produces all the redo log files that you want LogMiner to analyze.
    source database是你需要分析的产生所有redo log的库。
  • The mining database is the database that LogMiner uses when it performs the analysis.
    mining database 是执行logminer分析的库。
  • The LogMiner dictionary allows LogMiner to provide table and column names, instead of internal object IDs, when it presents the redo log data that you request.
  • The redo log files contain the changes made to the database or database dictionary.


    sample logminer database configuration.jpg

Requirements

The following are requirements for the source and mining database, the data dictionary, and the redo log files that LogMiner will mine:

Source and mining database
  • Both the source database and the mining database must be running on the same hardware platform.
  • The mining database can be the same as, or completely separate from, the source database.
  • The mining database must run the same release or a later release of the Oracle Database software as the source database.
  • The mining database must use the same character set (or a superset of the character set) used by the source database.
LogMiner dictionary
  • The dictionary must be produced by the same source database that generates the redo log files that LogMiner will analyze. 字典信息必须是产生redo log的源库的信息,不然无法获取字典数据。
All redo log files
  • Must be produced by the same source database. 必须是同一个库产生;
  • Must be associated with the same database RESETLOGS SCN.
  • Must be from a release 8.0 or later Oracle Database. However, several of the LogMiner features introduced as of release 9.0.1 work only with redo log files produced on an Oracle9i or later database. See "Supported Databases and Redo Log File Versions". 必须是8以后的版本,有些特性需要9i之后的版本才支持。
开启supplemental logging

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE; 如果是 YES or IMPLICIT 这两个状态,就表示已开启。

LogMiner主要步骤:

1.Specify a LogMiner dictionary.

Use the DBMS_LOGMNR_D.BUILD procedure or specify the dictionary when you start LogMiner (in Step 3), or both, depending on the type of dictionary you plan to use.

2.Specify a list of redo log files for analysis.

Use the DBMS_LOGMNR.ADD_LOGFILE procedure, or direct LogMiner to create a list of log files for analysis automatically when you start LogMiner (in Step 3).

3.Start LogMiner.

Use the DBMS_LOGMNR.START_LOGMNR procedure.

4.Request the redo data of interest.

Query the V$LOGMNR_CONTENTS view. (You must have the SELECT ANY TRANSACTION privilege to query this view.)

5.End the LogMiner session.

Use the DBMS_LOGMNR.END_LOGMNR procedure.
You must have been granted the EXECUTE_CATALOG_ROLE role to use the LogMiner PL/SQL packages and to query the V$LOGMNR_CONTENTS view.

LogMiner Dictionary Files and Redo Log Files

使用哪种字典文件

Oracle recommends that you use this option when you will have access to the source database from which the redo log files were created and when no changes to the column definitions in the tables of interest are anticipated. This is the most efficient and easy-to-use option.

Oracle recommends that you use this option when you do not expect to have access to the source database from which the redo log files were created, or if you anticipate that changes will be made to the column definitions in the tables of interest.

This option is maintained for backward compatibility with previous releases. This option does not guarantee transactional consistency. Oracle recommends that you use either the online catalog or extract the dictionary from redo log files instead.

下图展示选择哪种字典文件:


Choosing a Logminer Dictionary.jpg

实操案例

用Online catalog 作为字典方式分析:

以下操作均在 PL/SQL 软件中执行

*** 打开附加日志
select SUPPLEMENTAL_LOG_DATA_MIN from v$database;  
alter database add supplemental log data;  

*** 模拟修改数据
SELECT * FROM v$log;      # 查看当前的活动redo
UPDATE system.test_logmin SET status='TEST' WHERE ROWNUM < 10;

*** 开始分析
BEGIN dbms_logmnr.add_logfile('/u01/app/oracle/oradata/testdb/redo01.log', dbms_logmnr.new); END;        ## 添加在线日志,第一个使用参数 new
BEGIN dbms_logmnr.add_logfile('/u01/app/oracle/oradata/testdb/redo02.log', dbms_logmnr.addfile);END;     ## 可添加多个

BEGIN dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog);END;           ## 开始分析

### 查看分析结果,如下图所示
SELECT SQL_REDO, SQL_UNDO, SEG_OWNER
  FROM V$LOGMNR_CONTENTS
 WHERE SEG_NAME = 'TEST_LOGMIN'
   AND SEG_OWNER = 'SYSTEM';
Logminer Result.jpg
*** 结束分析
BEGIN dbms_logmnr.end_logmnr; END;

如果是从归档日志中分析,那首先需要知道脚本执行的大概时间范围,否则分析难度会加大,导致分析时间较长。
从操作系统层面根据归档日志文件的时间,找到此区间的嫌疑日志,然后添加到分析队列。

开始分析。
BEGIN dbms_logmnr.add_logfile('/u01/app/oracle/oradata/testdb/archive/1_61_985361656.dbf', dbms_logmnr.new); END;     ## 找到归档文件

## 指定分析范围
ALTER SESSION SET NLS_DATE_FORMAT ='yyyy-mm-dd HH24:MI:SS';
BEGIN
  DBMS_LOGMNR.START_LOGMNR(STARTTIME => '2018-09-20 17:00:00',
                           ENDTIME   => '2018-09-20 17:50:00',
                           OPTIONS   => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG +DBMS_LOGMNR.CONTINUOUS_MINE);
END;

##  查看分析结果
SELECT SQL_REDO, SQL_UNDO, SEG_OWNER
  FROM V$LOGMNR_CONTENTS
 WHERE SEG_NAME = 'TEST_LOGMIN'
   AND SEG_OWNER = 'SYSTEM';

## 结束分析
BEGIN dbms_logmnr.end_logmnr; END;      

用DICT_FROM_REDO_LOGS作为字典方式分析:

此方式比较灵活,可以将目标端的归档文件(数据变动文件及包含字典信息的归档文件)拷贝到测试机器进行分析,减少生产机器压力

## 指定redo log存储字典
BEGIN DBMS_LOGMNR_D.BUILD(OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);END;

## 找到 DICTIONARY_BEGIN='YES'  和 DICTIONARY_END='YES' 这之间的归档日志,后续需要加到分析队列中,因为里面包含字典信息
SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN='YES';
SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_END='YES';

## 找到涉及到的归档文件及包含字典的归档文件
BEGIN dbms_logmnr.add_logfile('/u01/app/oracle/oradata/testdb/archive/1_61_985361656.dbf', dbms_logmnr.new); END;
BEGIN dbms_logmnr.add_logfile('/u01/app/oracle/oradata/testdb/archive/1_69_985361656.dbf', dbms_logmnr.ADDFILE); END;

## 开始分析
ALTER SESSION SET NLS_DATE_FORMAT ='yyyy-mm-dd HH24:MI:SS';
BEGIN
  DBMS_LOGMNR.START_LOGMNR(STARTTIME => '2018-09-20 17:00:00',
                           ENDTIME   => '2018-09-20 17:45:00',
                           OPTIONS   => DBMS_LOGMNR.DICT_FROM_REDO_LOGS);
END;

## 查看结果
SELECT SQL_REDO, SQL_UNDO, SEG_OWNER
  FROM V$LOGMNR_CONTENTS
 WHERE SEG_NAME = 'TEST_LOGMIN'
   AND SEG_OWNER = 'SYSTEM';

## 分析结束
BEGIN dbms_logmnr.end_logmnr; END;

用平面文件(Flat file)作为字典方式分析:

此种方式需要设置 utl_file_dir 路径,需要重启数据库,实际生产中使用较少(默认db不设置此参数)。

## 设置路径参数
SELECT VALUE FROM v$parameter  a  where a.NAME ='utl_file_dir';
alter system set utl_file_dir='/u01/app/logminer' scope=spfile;      ## 保证目录/u01/app/logminer存在

## 重启数据库
shutdown immediate;
startup;
SELECT VALUE FROM v$parameter  a  where a.NAME ='utl_file_dir';       ## 检查配置

## 指定平面文件存储字典
BEGIN DBMS_LOGMNR_D.BUILD('dictionary.ora','/u01/app/logminer',DBMS_LOGMNR_D.STORE_IN_FLAT_FILE); END;

## 找到涉及到的归档文件
BEGIN dbms_logmnr.add_logfile('/u01/app/oracle/oradata/testdb/archive/1_61_985361656.dbf', dbms_logmnr.new); END;

## 开始分析
ALTER SESSION SET NLS_DATE_FORMAT ='yyyy-mm-dd HH24:MI:SS';
BEGIN
  DBMS_LOGMNR.START_LOGMNR(STARTTIME    => '2018-09-20 17:00:00',
                           ENDTIME      => '2018-09-20 17:45:00',
                           DICTFILENAME => '/u01/app/logminer/dictionary.ora');
END;

## 查看结果
SELECT SQL_REDO, SQL_UNDO, SEG_OWNER
  FROM V$LOGMNR_CONTENTS
 WHERE SEG_NAME = 'TEST_LOGMIN'
   AND SEG_OWNER = 'SYSTEM';

## 分析结束
BEGIN dbms_logmnr.end_logmnr; END;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容