我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle Logminer快速使用详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle Logminer快速使用详解

一、Logminer是什么?

LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重做日志文件(归档日志文件)中的具体内容,LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图组成,它作为Oracle数据库的一部分来发布,是oracle公司提供的一个完全免费的工具。

具体的说: 对用户数据或数据库字典所做的所有更改都记录在Oracle重做日志文件RedoLog中,Logminer就是一个解析RedoLog的工具,通过Logminer解析RedoLog可以得到对应的SQL数据。

Oracle 中的RedoLog写入流程: Oracle重做日志采用循环写入的方式,每一个Oracle实例至少拥有2组日志组。Oracle重做日志一般由Oracle自动切换,重做日志文件在当LGWR进程停止写入并开始写入下一个日志组时发生切换,或在用户收到发出ALTER SYSTEM SWITCH LOGFILE时发生切换。如果Oracle数据库开启了归档功能,则在日志组发生切换的时候,上一个日志组的日志文件会被归档到归档目录里。

从上面可知 Oracle里的RedoLog文件分为两种:

  • 当前写的日志组的文件,可通过v$logv$logfile得到
  • 归档的redoLog文件,可通过 v$archived_log 得到

通过循环查找到最新符合要求的RedoLog并让Logminer加载分析,分析的数据在视图 v$logmnr_contents 里,通过读取 v$logmnr_contents 就可以得到 Oracle的实时数据。

二、Logminer快速使用

配置Logminer请参考Oracle配置LogMiner文档。


#1、准备测试数据(test用户)
SQL> conn test/123456
SQL> CREATE TABLE test(id varchar2(100));   
INSERT INTO test (id) values  ('000001');  
INSERT INTO test (id) values  ('000011');
commit;

说明:一下步骤皆在logminer_test用户下执行
#2、查看数据库当前联机日志文件
SQL>SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;
#发现只有redo001是当前状态。

#3、将需要解析的在线日志文件加入
SQL>exec dbms_logmnr.add_logfile('/home/oracle/app/oracle/oradata/orcl11g/redo01.log', dbms_logmnr.new);

#4、启动Logminer
SQL>
begin
SYS.DBMS_LOGMNR.START_LOGMNR (
options => SYS.DBMS_LOGMNR.skip_corruption + 
SYS.DBMS_LOGMNR.no_sql_delimiter + 
SYS.DBMS_LOGMNR.no_rowid_in_stmt + 
SYS.DBMS_LOGMNR.dict_from_online_catalog + 
SYS.DBMS_LOGMNR.string_literals_in_stmt 
);
end;
 
#5、查询重做日志
SQL>select * from V$LOGMNR_CONTENTS;

#6、停止Logminer
SQL>exec dbms_logmnr.end_logmnr;

三、Logminer的具体使用

 1.配置Logminer

请参考Oracle配置LogMiner文档。

2.使用Logminer

1.指定LogMiner字典。
2.指定重做日志文件列表以进行分析。 使用 DBMS_LOGMNR.ADD_LOGFILE 过程,或指示LogMiner在启动LogMiner时自动创建要分析的日志文件列表(在步骤3中)。
3.启动LogMiner。 使用 DBMS_LOGMNR.START_LOGMNR 程序。
4.请求感兴趣的重做数据。 查询V$LOGMNR_CONTENTS视图。(您必须具有SELECT ANY TRANSACTION查询此视图的权限)
5.结束LogMiner会话。 使用 DBMS_LOGMNR.END_LOGMNR程序。

3.Logminer字典

LogMiner字典作用

Oracle数据字典记录当前所有表的信息,字段的信息等等。LogMiner使用字典将内部对象标识符和数据类型转换为对象名称和外部数据格式。如果没有字典,LogMiner将返回内部对象ID,并将数据显示为二进制数


INSERT INTO HR.JOBS(JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY)  VALUES('IT_WT','Technical Writer', 4000, 11000);

没有字典,LogMiner将显示:


insert into "UNKNOWN"."OBJ# 45522"("COL 1","COL 2","COL 3","COL 4") values
(HEXTORAW('45465f4748'),HEXTORAW('546563686e6963616c20577269746572'),
HEXTORAW('c229'),HEXTORAW('c3020b'));

Logminer字典选项

LogMiner字典的选项支持三种:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R2CA7hWc-1633660733574)(http://note.youdao.com/yws/res/612/WEBRESOURCEb0b3ba1b987bc083fc09c6dae89c77e2)]

4.指定Logminer重做日志文件

要启动新的重做日志文件列表,需要使用 DBMS_LOGMNR.NEW 以表明这是新列表的开始


EXECUTE DBMS_LOGMNR.ADD_LOGFILE( 
   LOGFILENAME => '/oracle/logs/log1.dbf',
   OPTIONS => DBMS_LOGMNR.NEW);

可以使用下列语句额外再添加日志文件


EXECUTE DBMS_LOGMNR.ADD_LOGFILE( 
   LOGFILENAME => '/oracle/logs/log2.dbf', 
   OPTIONS => DBMS_LOGMNR.ADDFILE);

5.启动LogMiner

使用 DBMS_LOGMNR.START_LOGMN 启动Logminer。可以指定参数:

指定LogMiner如何过滤返回的数据(例如,通过开始和结束时间或SCN值)

指定用于格式化LogMiner返回的数据的选项

指定要使用的LogMiner词典

主要的参数有:


   OPTIONS参数说明:
     * DBMS_LOGMNR.SKIP_CORRUPTION - 跳过出错的redlog
     * DBMS_LOGMNR.NO_SQL_DELIMITER - 不使用 ';'分割redo sql
     * DBMS_LOGMNR.NO_ROWID_IN_STMT - 默认情况下,用于UPDATE和DELETE操作的SQL_REDO和SQL_UNDO语句在where子句中包含“ ROWID =”。
     *                                但是,这对于想要重新执行SQL语句的应用程序是不方便的。设置此选项后,“ ROWID”不会放置在重构语句的末尾
     * DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG - 使用在线字典
     * DBMS_LOGMNR.CONTINUOUS_MINE - 需要在生成重做日志的同一实例中使用日志
     * DBMS_LOGMNR.COMMITTED_DATA_ONLY - 指定此选项时,LogMiner将属于同一事务的所有DML操作分组在一起。事务按提交顺序返回。
     * DBMS_LOGMNR.STRING_LITERALS_IN_STMT - 默认情况下,格式化格式化的SQL语句时,SQL_REDO和SQL_UNDO语句会使用数据库会话的NLS设置
     *                                       例如NLS_DATE_FORMAT,NLS_NUMERIC_CHARACTERS等)。使用此选项,将使用ANSI / ISO字符串文字格式

示例


EXECUTE DBMS_LOGMNR.START_LOGMNR( 
   STARTTIME => '01-Jan-2003 08:30:00', 
   ENDTIME => '01-Jan-2003 08:45:00', 
   OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + 
   DBMS_LOGMNR.CONTINUOUS_MINE);

6 在V$LOGMNR_CONTENTS中查询感兴趣的重做数据

Logminer会解析redoLog里的日志加载到 v L O G M N R C O N T E N T S 视 图 里 , 我 们 只 需 要 使 用 s q l 查 询 即 可 获 取 对 应 数 据 v LOGMNR_CONTENTS 视图里,我们只需要使用 sql查询 即可获取对应数据 v LOGMNRC​ONTENTS视图里,我们只需要使用sql查询即可获取对应数据vLOGMNR_CONTENTS视图相关字段 https://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1154.htm

主要字段有:

数据类型 描述
SCN NUMBER oracle为每个已提交的事务分配唯一的scn
OPERATION VARCHAR2(32) INSERT UPDATE DELETE DDL COMMIT ROLLBACK…
SEG_OWNER VARCHAR2(32) schema
TABLE_NAME VARCHAR2(32) 表名
TIMESTAMP DATE 数据库变动时间戳
SQL_REDO VARCHAR2(4000) 重建的SQL语句,该语句等效于进行更改的原始SQL语句

示例


SELECT
    scn,
    timestamp,
    operation,
    seg_owner,
    table_name,
    sql_redo,
    row_id,
    csf
FROM
    v$logmnr_contents
WHERE
    scn > ?

查询出来的数据示例:

到此这篇关于Oracle Logminer使用的文章就介绍到这了,更多相关Oracle Logminer内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle Logminer快速使用详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle错误3114详解:如何快速解决

Oracle错误3114详解:如何快速解决,需要具体代码示例在Oracle数据库开发和管理过程中,我们常常会遇到各种各样的错误,其中错误3114是比较常见的一个问题。错误3114通常表示数据库连接出现问题,可能是由于网络故障、数据库服务停
Oracle错误3114详解:如何快速解决
2024-03-08

快速使用node.js进行web开发详解

首先关于node.js的学习,这里推荐一本比较好的教程,nodejs web开发指南,该书通俗易懂地将node.js语言特性讲解完之后,又从一个项目角度带领读者使用node.js学习web开发。相信这是一个比较好的学习模式和过程。由于这本书
2022-06-04

android websocket快速上手使用和详细讲解

1、快速使用 项目中的使用,以github的开源库org.java-websocket:Java-WebSocket:1.3.8为例,并且封装了工具类,快速上手。 1、org.java-websocket:Java-WebSocket的gi
2022-06-06

如何使用MybatisPlus快速进行增删改查详解

增删改查在日常开发中是再正常不多的一个需求了,下面这篇文章主要给大家介绍了关于如何使用MybatisPlus快速进行增删改查的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-13

快速了解AndroidRoom使用细则

这篇文章主要为大家介绍了快速了解AndroidRoom使用细则,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-02

Oracle LPAD函数详解:快速填充字符串的实用技巧

Oracle数据库中提供了很多常用的函数,其中LPAD函数是一个非常实用的函数,用于在字符串的左侧填充指定的字符。LPAD函数的基本语法如下:LPAD(string, length, fill_string)其中,string是要填充的字符
Oracle LPAD函数详解:快速填充字符串的实用技巧
2024-03-08

Docker 的快速使用

ubuntu安装 centos安装 安装完毕之后执行一下这条命令,可以避免每次使用docker命令都需要sudo权限 sudo usermod -aG docker $USER 阿里云docker镜像加速 DockerHub 遇到不懂或者不
2023-08-30

hibernate4快速入门实例详解

Hibernate是什么Hibernate是一个轻量级的ORMapping框架ORMapping原理(Object RelationalMapping)ORMapping基本对应规则:1:类跟表相对应2:类的属性跟表的字段相对应3:类的实例
2023-05-31

使用Docker快速搭建Airflow+MySQL详细步骤

目录步骤 1:创建项目目录步骤 2:创建 docker-compose.yml 文件步骤 3:创建目录结构步骤 4:启动 Docker Compose步骤 5:检查服务状态步骤 6:访问 Airflow Web UI确保持久化启动和管理容器
使用Docker快速搭建Airflow+MySQL详细步骤
2024-09-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录