当前位置: 首页 > news >正文

Oracle logminer详解

Oracle LogMiner 是 Oracle 数据库提供的一个内置工具,用于分析和挖掘数据库的在线重做日志文件(Online Redo Log Files)​归档日志文件(Archive Log Files)​。通过 LogMiner,用户可以查看数据库的历史操作(如 DML 和 DDL 语句),帮助进行数据审计、故障恢复、性能分析等任务。

一、​LogMiner 的核心功能

  1. 历史操作追踪

    • 解析重做日志中的 SQL 操作,包括 INSERTUPDATEDELETE 等 DML 语句,以及 CREATEALTER 等 DDL 语句。
    • 提供操作的详细信息,例如操作时间、用户、SCN(System Change Number)、事务 ID 等。
  2. 数据恢复支持

    • 当发生误操作(如误删数据)时,可通过 LogMiner 定位到具体的 SQL 语句和时间点,辅助恢复数据。
  3. 审计与合规性

    • 追踪数据库变更,满足合规性要求(例如跟踪谁在何时修改了关键数据)。
  4. 性能与事务分析

    • 分析长时间运行的事务或高负载操作,优化数据库性能。

二、​主要使用场景

  • 数据恢复:找回被误删除或误修改的数据。
  • 审计:监控数据库的变更操作(如合规审计、安全审计)。
  • 调试:分析特定时间点的数据库操作,排查问题。
  • 同步与复制:为数据同步工具(如 GoldenGate)提供底层日志解析支持。

三、​LogMiner 的使用步骤

  1. 启用补充日志(Supplemental Logging)​
    LogMiner 需要补充日志来记录额外的信息(如主键、唯一键),以便解析完整的 SQL 语句。

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
  2. 创建数据字典
    LogMiner 需要数据字典(表结构信息)来正确解析日志中的对象名称。可选择:

    • 在线数据字典:实时解析当前数据库对象(适用于分析最近的日志)。
    • 离线数据字典:将数据字典导出到文件(适用于分析历史日志或不同数据库的日志)。
    -- 导出数据字典到字典文件
    EXEC DBMS_LOGMNR_D.BUILD(OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
  3. 添加日志文件
    指定要分析的日志文件(在线或归档日志)。

    BEGIN
      DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '/path/to/logfile.log', OPTIONS => DBMS_LOGMNR.NEW);
    END;
  4. 启动 LogMiner
    使用 DBMS_LOGMNR.START_LOGMNR 开始分析。

    BEGIN
      DBMS_LOGMNR.START_LOGMNR(
        OPTIONS => DBMS_LOGMNR.DICT_FROM_REDO_LOGS +  -- 使用在线数据字典
                   DBMS_LOGMNR.COMMITTED_DATA_ONLY    -- 仅分析已提交事务
      );
    END;
  5. 查询分析结果
    通过 V$LOGMNR_CONTENTS 视图获取解析后的日志内容。

    SELECT scn, sql_redo, sql_undo, username, timestamp
    FROM V$LOGMNR_CONTENTS
    WHERE table_name = 'EMPLOYEES';
  6. 结束分析
    释放资源。

    EXEC DBMS_LOGMNR.END_LOGMNR;

四、​LogMiner 示例

1.手动切换当前redo日志

alter system archive log current;

2.和客户确定需要进行日志挖掘的大体时间点,并查询在那时间段内产生的归档日志有哪些

alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
select thread#,name,completion_time  from v$archived_log where completion_time >TO_DATE('2025-03-15 10:00:00','YYYY-MM-DD HH24:MI:SS') order by completion_time;


3.添加archive redo log:
将下面logfilename后面的文件替换为具体的归档日志文件,挖多少加多少。

begin
sys.dbms_logmnr.add_logfile(logfilename=>'+DG_FRA/aaa/archivelog/2025-03-15/thread_1_seq_2856', options=>sys.dbms_logmnr.addfile);
sys.dbms_logmnr.add_logfile(logfilename=>'+DG_FRA/aaa/archivelog/2025-03-15/thread_1_seq_2857', options=>sys.dbms_logmnr.addfile);
sys.dbms_logmnr.add_logfile(logfilename=>'+DG_FRA/aaa/archivelog/2025-03-15/thread_1_seq_2858', options=>sys.dbms_logmnr.addfile);
end;

说明:
+DG_FRA/aaa/archivelog/2025-03-15/thread_1_seq_2856 这个来源于v$archived_log视图,该视图还有一列是completion_time,该列的意思是该sequence号对应的redolog 归档完成的时间。

4.开始分析:

begin
sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);
end;

5.检查分析结果:

select * from  v$logmnr_contents  where sql_redo like '%table_name%'

---这个where条件,就是你自己要填写查找的内容。
也可以写当时的sql语句如delte from xxx 等关键字,注意日志挖掘挖出来的并不是和执行的sql语句一模一样。

另外,v$logmnr_contents有一列scn是表示发起命令时的scn号,可方便用于误删除数据的恢复操作。
6.结束分析

begin
sys.dbms_logmnr.end_logmnr;
end;

或者直接退出会话。
7.关于补充日志
另外,只有在已经打开supplemental log 的情况下,会记录执行sql的OS_USERNAME,USERNAME,MACHINE_NAME,数据库默认不打开,所以这三列信息不进行记录。
知识点:打开补充日志命令

alter database add SUPPLEMENTAL log data;

相关文章:

  • 鸿蒙NEXT开发日志工具类(ArkTs)
  • 全新UI好看404页面源码
  • Unity的UI适配
  • Qt常用宏定义判断大全
  • 从纸质到 AI 时代:我的笔记工具探索之旅
  • Z-Wave与Matter的协同应用:构建无缝互联的智能家居
  • 2025年华为HCIP题库分享
  • PyTorch + torchvision是什么
  • 《深度学习》——bert框架
  • Axure项目实战:智慧运输平台后台管理端-承运商管理(中继器筛选)
  • 设计模式扩展 MyBatis Plus BaseMapper接口
  • java学习笔记10——集合框架
  • 蚂蚁集团主导的ISO密码学国际标准立项,纳入国产算法
  • AI赋能股票:流通股本与总股本:定义、区别及投资意义解析
  • 【STM32单片机】#4 OLED调试外部中断
  • StarRocks的执行计划和Profile
  • 微软 GraphRAG 项目学习总结
  • ubuntu的ubuntu--vg-ubuntu--lv磁盘扩容
  • 黑盒测试、白盒测试、集成测试和系统测试的区别与联系
  • 在 Windows 中使用 DeepSeek 和 Milvus 搭建个人知识库
  • 做网站推广的是什么职位/公司网站设计定制
  • 国外优秀的html5网站/新浪博客seo
  • 电脑版网站制作公司/网络营销师工作内容
  • 网站打开太慢/百度app手机版
  • 公司禁用网站怎么做/晨阳seo服务
  • 网站转移码/河南网站开发公司