前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Oracle LogMiner的实时采集一、Logminer简介及使用

基于Oracle LogMiner的实时采集一、Logminer简介及使用

作者头像
@阿诚
发布2021-07-23 15:42:55
3.3K0
发布2021-07-23 15:42:55
举报
文章被收录于专栏:Panda诚

1.1 LogMiner 介绍

Oracle LogMiner 是 Oracle 公司从产品 8i 以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得 Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的 DML 和 DDL 语句。该工具特别适用于调试、审计或者回退某个特定的事务。LogMiner 分析工具实际上是由一组 PL/SQL 包和一些动态视图( Oracle8i 内置包的一部分)组成,它作为 Oracle 数据库的一部分来发布是 8i 产品提供的一个完全免费的工具。但该工具和其他 Oracle 内建工具相比使用起来显得有些复杂,主要原因是该工具没有提供任何的图形用户界面( GUI)。

1.2 LogMiner 作用

在 Oracle 8i 之前, Oracle 没有提供任何协助数据库管理员来读取和解释重作日志文件内容的工具。系统出现问题,对于一个普通的数据管理员来讲,唯一可以作的工作就是将所有的 log文件打包,然后发给 Oracle 公司的技术支持,然后静静地等待 Oracle 公司技术支持给我们最后的答案。然而从 8i 以后, Oracle 提供了这样一个强有力的工具--LogMiner。LogMiner 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。 总的说来, LogMiner 工具的主要用途有:

  • ‍跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。
  • 回退数据库的变化:回退特定的变化 数据,减少 point-in-time recovery 的执行。
  • 优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。‍

2 LogMiner 使用

2.1 安装 LogMiner

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

代码语言:javascript
复制
$ORACLE_HOME/rdbms/admin/dbmslm.sql  
$ORACLE_HOME/rdbms/admin/dbmslmd.sql

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

创建完毕后将包括如下过程和视图:

类型

过程名

用途

过程

Dbms_logmnr_d.build

创建一个数据字典文件

过程

Dbms_logmnr.add_logfile

在类表中增加日志文件以供分析

过程

Dbms_logmnr.start_logmnr

使用一个可选的字典文件和前面确定要分析日志文件来启动 LogMiner

过程

Dbms_logmnr.end_logmnr

停止 LogMiner 分析

视图

V$logmnr_dictionary

显示用来决定对象 ID 名称的字典文件的信息

视图

V$logmnr_logs

在 LogMiner 启动时显示分析的日志列表

视图

V$logmnr_contents

LogMiner 启动后,可以使用该视图在 SQL 提示符下输入 SQL 语句来查询重做日志的内容

2.2 创建数据字典文件

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

代码语言:javascript
复制
INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, '张三');

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

代码语言:javascript
复制
insert into Object#308(col#1, col#2) values (hextoraw('c30rte567e436'),hextoraw('4a6f686e20446f65'));

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

代码语言:javascript
复制
CREATE DIRECTORY utlfile AS 'D:\oracle\oradata\practice\LOGMNR';
alter system set utl_file_dir='D:\oracle\oradata\practice\LOGMNR' scope=spfile;

创建字典文件需要以 DBA 用户登录,创建到上面配置好的 LogMiner 文件夹中:

代码语言:javascript
复制
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'D:\oracle\oradata\practice\LOGMNR');

Oracle 的 LogMiner 可以分析在线和归档两种日志文件,加入分析日志文件使用 dbms_logmnr.add_logfile 过程,第一个文件使用 dbms_logmnr.NEW 参数,后面文件使用 dbms_logmnr.ADDFILE 参数。

2.3 加入需分析的日志文件

1、 创建列表:

代码语言:javascript
复制
BEGIN
dbms_logmnr.add_logfile(
logfilename=>'D:\oracle\oradata\practice\REDO03.LOG',
options=>dbms_logmnr.NEW
);
END;

2、 添加其他日志文件到列表:

代码语言:javascript
复制
BEGIN
dbms_logmnr.add_logfile(
logfilename=>'D:\oracle\oradata\practice\ARCHIVE\ARC00002_0817639922.001',
options=>dbms_logmnr.ADDFILE
);
dbms_logmnr.add_logfile(
logfilename=>'D:\oracle\oradata\practice\ARCHIVE\ARC00003_0817639922.001',
options=>dbms_logmnr.ADDFILE
);
END;

2.4 使用 LogMiner 进行日志分析

Oracle 的 LogMiner 分析时分为无限制条件和限制条件两种,无限制条件中分析所有加入到分析列表日志文件,限制条件根据限制条件分析指定范围日志文件。

1、 无限制条件

代码语言:javascript
复制
EXECUTE
dbms_logmnr.start_logmnr(
dictfilename=>'D:\oracle\oradata\practice\LOGMNR\dictionary.ora'
);

2、 无限制条件

通过对过程 DBMS_ LOGMNR.START_LOGMNR中几个不同参数的设置(参数含义见下表),可以缩小要分析日志文件的范围。通过设置起始时间和终止时间参数我们可以限制只分析某一时间范围的日志。

参数

参数类型

默认值

含义

StartScn

数字型

0

分析重作日志中 SCN≥StartScn 日志文件部分

EndScn

数字型

0

分析重作日志中 SCN≤EndScn 日志文件部分

StartTime

日期型

1998-01-01

分析重作日志中时间戳≥StartTime 的日志文件部分

EndTime

日期型

2988-01-01

分析重作日志中时间戳≤EndTime 的日志文件部分

DictFileName

字符型

字典文件该文件包含一个数据库目录的快照。

如下面的例子,我们仅仅分析 2013 年 6 月 8 日的日志:

代码语言:javascript
复制
EXECUTE dbms_logmnr.start_logmnr(
DictFileName => dictfilename=>'D:\..\practice\LOGMNR\dictionary.ora',
StartTime =>to_date('2013-6-8 00:00:00','YYYY-MM-DD HH24:MI:SS')
EndTime =>to_date('2013-6-8 23:59:59','YYYY-MM-DD HH24:MI:SS')
);

也可以通过设置起始 SCN 和截至 SCN 来限制要分析日志的范围:

代码语言:javascript
复制
EXECUTE dbms_logmnr.start_logmnr(
DictFileName =>'D:\..\practice\LOGMNR\dictionary.ora',
StartScn =>20,EndScn =>50
);

2.5 观察分析结果( v$logmnr_contents)

代码语言:javascript
复制
SELECT sql_redo FROM v$logmnr_contents;

到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents 包含LogMiner 分析得到的所有的信息。如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的 SQL 查询得到,该查询可以得到用户 LOGMINER 对表 EMP 所作的一切工作。

代码语言:javascript
复制
SELECT sql_redo FROM v$logmnr_contents 
WHERE username='LOGMINER' AND tablename='EMP';

序号

名称

含义

1

SCN

特定数据变化的系统更改号

2

TIMESTAM

数据改变发生的时间

3

COMMIT_TIMESTAMP

数据改变提交的时间

4

SEG_OWNER

数据发生改变的段名称

5

SEG_NAME

段的所有者名称

6

SEG_TYPE

数据发生改变的段类型

7

SEG_TYPE_NAME

数据发生改变的段类型名称

8

TABLE_SPACE

变化段的表空间

9

ROW_ID

特定数据变化行的 ID

10

SESSION_INFO

数据发生变化时用户进程信息

11

OPERATION

重做记录中记录的操作(如 INSERT)

12

SQL_REDO

可以为重做记录重做指定行变化的 SQL 语句(正向操作)

13

SQL_UNDO

可以为重做记录回退或恢复指定行变化的 SQL语句(反向操作)

需要强调一点的是 ,视图 v$logmnr_contents 中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。这是因为所有的 LogMiner 存储都在PGA 内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。最后, 使用过程 DBMS_LOGMNR.END_LOGMNR 终止日志分析事务,此时 PGA 内存区域被清除,分析结果也随之不再存在。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Panda诚 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 LogMiner 介绍
  • 1.2 LogMiner 作用
  • 2 LogMiner 使用
    • 2.1 安装 LogMiner
      • 2.2 创建数据字典文件
        • Oracle 的 LogMiner 可以分析在线和归档两种日志文件,加入分析日志文件使用 dbms_logmnr.add_logfile 过程,第一个文件使用 dbms_logmnr.NEW 参数,后面文件使用 dbms_logmnr.ADDFILE 参数。
          • 2.3 加入需分析的日志文件
            • 2.4 使用 LogMiner 进行日志分析
              • 2.5 观察分析结果( v$logmnr_contents)
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档