ORACLE数据库中如何找到过去某个时间某个表被谁修改了

HTML-DB与Oracle数据库的高效数据交互 本文探讨了HTML-DB工具在Oracle数据库环境中的应用,包括SQL接口的使用、数据对象的创建与管理、应用程序的自动创建以及通过HTML-DB进行的高速数据移动。文中还介绍了Oracle Database 10g中的Data Pump和Streams等数据移动设施,以及Transportable Tablespaces的使用案例,为数据库开发人员提供了深入了解如何在Oracle平台上进行高效数据交互的视角。 阅读详情
AI摘要

本文介绍了如何使用Oracle自带的LogMiner工具,通过分析归档日志定位特定时间内某张表被谁修改的操作。适用于无审计系统的环境,支持RAC和ASM存储结构,详细说明了从日志筛选到结果查询的完整流程。

目录

一.问题描述

二.现场环境:

三、Oracle loginer 工具介绍

四、具体分析步骤

4.1. 确定时间 

4.2 确定归档日志文件

4.3.向LogMiner 会话添加 redo 日志文件

4.3.1 添加第一个文件

4.3.2 脚本式添加日志文件

4.3.3 执行添加动作

4.4.启动分析

4.5.创建结果表

4.6.结束分析

4.7.根据情况查找指定的记录:

五、总结一下:


一.问题描述

一张表被修改了,初步估计在2025年11月10日10:10--10:30被修改了,能否帮忙查一下是谁修改的?

类似:
这个字段的值被修改了,我自己没有修改过,帮忙查看一下是谁在哪台机器上修改的?
最近归档日志切换产生太大了,一台都要产生700G,能帮忙分析一下原因吗?

对于这些问题,日常中,可能碰到比较多,有没有办法处理呢?

二.现场环境:


    ORACLE 19C + RAC+ LINUX

当然,对于类似问题,如果有数据库审计系统,可能比较方便查找,但大部分场景下,是没有数据库审计的,那如果没有审计,就不能处理了吗?

答案是肯定的,我们可以利用ORACLE logminer功能来处理。

三、Oracle loginer 工具介绍

Oracle loginer,是Oracle数据库自带的功能,从Oracle 9i后,可以在线分析,步骤相对简单,不需要对数据库做额外设置。如果数据在联机日志文件中,可以直接对REDO LOGFILE进行分析,否则,我们可以针对归档日志进行分析。分析归档日志,如果是很久以前的归档日志,需要从备份中,把归档日志还原出来。然后,在进行分析。这个对归档日志的分析,可以在原主机分析,也可以在其他机器分析。

四、具体分析步骤

下面就这里提到的问题,我们使用 logminer工具来进行分析:

4.1. 确定时间 

  我们这里提到了 11月10日10:10--10:30,那就是业务发生时间在2025年11月10日 10:10-10:30 。

4.2 确定归档日志文件


  由于11月10日,是4天以前的事情了,我们需要确定这个归档日志是否还在磁盘上,否则,需要从备份中还原。
  select thread#,sequence#,name,to_char(first_time,'yyyy-mm-dd hh24:mi:ss')
   from v$archived_log
  where first_time  between to_date('2025-11-10 10:00:00','yyyy-mm-dd hh24:mi:ss') 
                        and to_date('2025-11-10 10:30:00','yyyy-mm-dd hh24:mi:ss')
    and CREATor='ARCH'
  order by 1,2;

     THREAD#  SEQUENCE# NAME                                                                   TO_CHAR(FIRST_TIME,
---------- ---------- ---------------------------------------------------------------------- -------------------
         1     164162 +DATA/HISDB/ARCHIVELOG/2025_11_10/thread_1_seq_164162.12677.1216807805 2025-11-10 10:01:17
         1     164163 +DATA/HISDB/ARCHIVELOG/2025_11_10/thread_1_seq_164163.15814.1216808391 2025-11-10 10:10:05
         1     164164 +DATA/HISDB/ARCHIVELOG/2025_11_10/thread_1_seq_164164.12720.1216809077 2025-11-10 10:19:50
         2     158031 +DATA/HISDB/ARCHIVELOG/2025_11_10/thread_2_seq_158031.12715.1216807881 2025-11-10 10:01:59
         2     158032 +DATA/HISDB/ARCHIVELOG/2025_11_10/thread_2_seq_158032.14602.1216808535 2025-11-10 10:11:20
         2     158033 +DATA/HISDB/ARCHIVELOG/2025_11_10/thread_2_seq_158033.13583.1216809197 2025-11-10 10:22:14

去ASM磁盘组检查一下,这些归档日志是否还在。如果不存在,还需要从备份中还原出来。我们这里,正好还在,就不要从备份中还原。

由于我们这里是ASM,如果你想从ASM磁盘组中取出来,放到其他机器,比如文件系统,还需要通过ASMCMD CP 方式把文件拷出来,我这里本次没有这个需要,可以忽略。

4.3.向LogMiner 会话添加 redo 日志文件


  我们可以使用execute sys.dbms_logmnr.add_logfile()语句添加要分析的归档日志


4.3.1 添加第一个文件

        第一个文件,需要使用 execute sys.dbms_logmnr.add_logfile(归档日志文件,options=>sys.dbms_logmnr.new),

     其他文件,直接
      execute sys.dbms_logmnr.add_logfile(归档日志文件)即可。


4.3.2 脚本式添加日志文件

       这里日志比较少,手工一个个添加即可,但如果归档日志比较多呢(一般要分析的比较少),可以直接生成脚本方式来处理。
  如下:
  select 'execute sys.dbms_logmnr.add_logfile(logfilename=>''' || name || ''''   || decode(rownum,1,',options=>sys.dbms_logmnr.new','') || ');'  as sqlstat
       from v$archived_log
        where first_time between to_date('2025-11-10 10:00:00','yyyy-mm-dd hh24:mi:ss') 
                            and to_date('2025-11-10 10:30:00','yyyy-mm-dd hh24:mi:ss')
       and CREATor='ARCH'
     order by first_time, thread# desc ,sequence#;

  自动产生要分析的归档日志:

  execute sys.dbms_logmnr.add_logfile(logfilename=>'+DATA/HISDB/ARCHIVELOG/2025_11_10/thread_1_seq_164162.12677.1216807805',options=>sys.dbms_logmnr.new);
  execute sys.dbms_logmnr.add_logfile(logfilename=>'+DATA/HISDB/ARCHIVELOG/2025_11_10/thread_2_seq_158031.12715.1216807881');
  execute sys.dbms_logmnr.add_logfile(logfilename=>'+DATA/HISDB/ARCHIVELOG/2025_11_10/thread_1_seq_164163.15814.1216808391');
  execute sys.dbms_logmnr.add_logfile(logfilename=>'+DATA/HISDB/ARCHIVELOG/2025_11_10/thread_2_seq_158032.14602.1216808535');
  execute sys.dbms_logmnr.add_logfile(logfilename=>'+DATA/HISDB/ARCHIVELOG/2025_11_10/thread_1_seq_164164.12720.1216809077');
  execute sys.dbms_logmnr.add_logfile(logfilename=>'+DATA/HISDB/ARCHIVELOG/2025_11_10/thread_2_seq_158033.13583.1216809197');

  执行以上脚本。

  

4.3.3 执行添加动作

 

4.4.启动分析

 execute sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.DICT_FROM_ONLINE_CATALOG);

4.5.创建结果表


 我们可以直接对 v$logmnr_contents 进行分析,但会占用内存,影响系统。一般我们是对 v$logmnr_contents 创建一个表,后面通过其他工具,比如PLSQL DEVELOPER等图形界面工具慢慢分析。

 create table logmnr_contents_251110  as select * from v$logmnr_contents;

不过,需要注意,如果这个记录比较多,需要考虑一下这个表放到哪个表空间,上面命令默认放到SYSTEM表空间,因此,需要确定SYSTEM表空间剩余空间是否足够。具体步骤略。

4.6.结束分析


 
 exec sys.dbms_logmnr.end_logmnr;


 之后,可以就不影响当前系统。

4.7.根据情况查找指定的记录:


  比如我们这里,想找 谁修改了 PTS.PAI_ADMISSION_NOTICE.
  那么就可以使用下面的语句:
  select SQL_REDO,operation,username,client_info,timestamp 
   from sys.logmnr_contents_251110 
 where seg_owner='PTS' 
   AND SEG_NAME='PAI_ADMISSION_NOTICE'
   and operation='UPDATE'
   order by  timestamp ;

当然,还可以确认一下这个时间段,主要的UPDATE,主要时间段,

数据在手,想怎么分析,看你自己。
至此,我们找到我们想要的结果。

五、总结一下:


   在ORACLE数据中,如果要想查看过去的DML操作,我们直接使用ORACLE原生的LOGMINER工具,直接分析过去的归档日志解决。

abaqus2matlab的安装与使用:如何用matlab提取abaqus的odb结果 官网abaqus2matlab官网地址matlab社区地址matlab社区地址在这里可以看到.m文件的源码论文:Abaqus2Matlab: A suitable tool for finite element post-processingabaqus2matlab可以处理.inp、.fil、.odb三种类型的文件。.inp文件:处理功能就在于只是单纯的输出inp文件,由于我自己写了自己的函数,不需要用到这个功能。 阅读详情

相关推荐

解读Autoware.Universe规划模块:Behavior Path Planner

Behavior Path Planner是一个基于行为生成不同形态路径的路径规划器,负责生成 基于交通状况的路径(path), 车辆可以移动的可行驶区域(drivable area)(在路径消息中定义), 将被发送到车辆接口的转向信号(turn signal) 命令。

策 5491

oracle查看表的操作记录信息

查找表的历史操作记录 select * from v$sqlarea a where a.SQL_TEXT like '%chen_table_name%' 从查询记录中获取update语句对应sql_id值 select * from v$sqltext a,v$sqlarea b where a.SQL_ID=b.SQL_ID and a.SQL_ID in('2c3b53b0tmndu') order by b.LAST_ACTIVE_TIME desc 从第二步查询记录找到最新的sql执行信

liubinbin950125的博客 1万+

echarts的坐标轴处理算法

参考原文:https://www.cnblogs.com/vicky-li/p/11653415.html。2、可用于双轴的情况,指定splitNumber,保证左右两边的线没有交叉显示的情况。1、设置echarts显示的最大最小值,让数据显示比较有起伏。处理echarts的一些问题。

HYeeee的博客 801

Oracle查看表操作历史记录并恢复数据

【代码】Oracle查看表操作历史记录并恢复数据。

weixin_42064877的博客 8449

STM32驱动电磁阀电路设计:从光耦选型到MOSFET驱动的实战解析

本文深入解析了STM32驱动24V电磁阀的完整电路设计,重点探讨了光耦选型与MOSFET驱动两大核心环节。针对电平转换与电气隔离需求,详细对比了EL357N与TLP2310等光耦在CTR、速度及耐压等关键参数上的差异与应用场景。同时,文章提供了MOSFET关键参数解读、驱动电路优化方案(如推挽驱动)以及完整的PCB布局、电源处理与调试避坑指南,旨在帮助工程师构建稳定可靠的工业控制电路。

weixin_29184371的博客 234

从网格剖分到结果外推:一文拆解HFSS快速扫频(Fast Sweep)的底层逻辑与性能调优

本文深入解析了HFSS快速扫频(Fast Sweep)技术的底层逻辑与性能调优方法。通过ALPS算法实现频带外推,快速扫频相比离散扫频和插值扫频能提升3-5倍计算效率,特别适用于天线阵列、微波滤波器等宽频带分析场景。文章详细介绍了算法架构、参数优化策略及工程实践中的精度保障机制,帮助工程师高效完成电磁仿真。

weixin_28693447的博客 92

Oracle12C | 查看数据修改记录

Oracle12C 查询数据修改历史记录方法

FSYML 1万+

通过 Android Framework 调用高通 Perf HAL 实现 CPU/GPU 动态调频策略

本文详细介绍了如何通过Android Framework调用高通Perf HAL实现CPU/GPU动态调频策略。文章涵盖HAL交互原理、环境搭建、Power HAL接口实现、PerformanceHintManager应用及温度功耗平衡处理,帮助开发者安全高效地进行性能优化,避免直接操作底层硬件的风险。

keras9composer的博客 255

oralce查询表修改记录的几种方式

(1)SELECT ID,NAME,state,VERSIONS_ENDTIME,VERSIONS_OPERATION FROM table_name VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE WHERE VERSIONS_STARTTIMEIS NOT NULL ORDER BY VERSIONS_STARTTI

haylee的专栏 1万+

TP4054充电电路发热严重?手把手教你调整电阻值降低温度(附实测数据)

本文针对TP4054锂电池充电电路发热严重的问题,提供了详细的排错与解决方案。通过分析发热原理,指出核心在于PROG引脚电阻值设定,并手把手指导如何计算和选择正确的电阻以降低充电电流与温度。文末附有不同电阻下的实测温度与性能数据,为电子爱好者和工程师提供了实用的调试参考。

p4q5r6s7t的博客 406

基于深度学习YOLOv8的PCB板缺陷检测系统

基于YOLOv8的PCB板缺陷检测系统,可以有效提高PCB生产过程中的检测效率。未来,我们可以进一步优化模型,结合更多的数据增强策略和先进的网络结构,以适应更复杂的生产环境。为了进行训练,理想的数据集应包含多种不同缺陷类型和不同背景的PCB图像。YOLOv8需要的数据格式为每个图像一个标签文件,每个标签文件包含缺陷的类别及其边界框坐标。运行该界面时,用户可以通过点击按钮选择图像,随后系统将自动检测图像中的PCB缺陷并显示结果。训练完成后,可以使用训练好的模型进行推理,检测新的PCB图像中的缺陷。

YOLO 1070

Oracle特殊查询-查询表历史操作记录

sys_operation_log:所查询的表名。查询某个时间节点的数据。查询表的历史操作记录。

xswlw_guoquanbao的博客 2905

一分钟了解 “提示词工程”、“上下文工程”、“驾驭工程”

在大模型刚刚进入大众视野的初期,开发者面临的最大挑战是如何让模型听懂人类的指令。这一阶段被称为提示词工程时代。其核心思想非常直观:通过精心设计输入的文本提示,引导模型输出符合预期的结果。这一时期的开发者更像是“提示词巫师”,他们热衷于寻找所谓的“魔法咒语”。典型的技巧包括角色设定、思维链、少样本学习以及输出格式约束。例如,仅仅在问题前加上一句“请一步步思考”,模型的推理能力往往就能得到显著提升。然而,随着应用场景的复杂化,提示词工程的局限性逐渐暴露。

h a 6 6 6 c k 为 你解决复杂难题! 568

Oracle数据库时区、系统时间的检查与修改

Oracle数据库时区、时间的问题,会导致使用了系统时间的存储过程出现问题。

曦阳的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

oracle通过触发器自动更新表的修改时间

Oracle通过触发器自动更新表的修改时间 在mysql里,我们通常在创建表时会设置一个创建时间(create_time)和一个修改时间(update_time),然后给创建时间设置默认值CURRENT_TIMESTAMP,给修改时间设置默认值CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,这样就能让创建时间和修改时间在插入数据时自动插入当前时间,而在修...

chinese_cai的博客 7068

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

oracle修改表字段名备注_Oracle修改表或者字段的注释

转自:https://www.cnblogs.com/fx-blog/p/7132833.html语句:comment on table 表名 is '表的注释信息';comment on column 表名.字段名 is '字段的注释信息';注意表名的大小写例如:1、创建表:CREATE TABLE Student(id varchar2(32) primary key,name varchar...

weixin_39568781的博客 3971

oracle中同时修改两张表的数据库,oracle trigger 两个表 与此同时修改

oracle trigger 两个表 同时修改ORACLE产生数据库触发器的语法为:create [or replace] trigger 触发器名 触发时间 触发事件on 表名[for each row]pl/sql 语句其中:触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。触发时间:指明触发器何时执行,该值可取:before---表示在数据库动...

weixin_34663092的博客 1261

oracle遍历所有表查询最新修改时间

#!/bin/sh ##设置sqlplus查询输出模式,不输出冗余内容 echo "set heading off" > test.sql echo "set echo off" >> test.sql echo "set flush off" >> test.sql echo "set feedback off" >> test.sql echo "set pagesize 9999" >> test.sql echo "set linesize .

jiujiederoushan的博客 3296

ORACLE 19c PDB中某张表基于时间的恢复

看到这个话题,一般都会想到使用闪回表功能,但我们知道,闪回是基于UNDO,如果UNDO信息已经被覆盖了呢,这个是很常见的,毕竟做了错误操作,不是马上就知道,有可能上午做了误操作,下午才知道呢,这个时候,UNDO很难还能用于上午的闪回。有人说,直接使用闪回数据库吧,那个是否动作太大了一点,如果使用TSPITR(可以见我上次写的文档,

cqsztech的博客 1271

oracle 找到谁删除的表,Oracle恢复误删表以及表内的数据

一、表的恢复对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的。一般步骤有:-- 1、从flash back里查询被删除的表select * from recyclebin-- 可以加条件查询select * from recyclebin where DROPTIME >'2018-12-18 00:00:00';-- 2、执行表的恢复 这里...

weixin_42422285的博客 3087

oracle 服务器时间修改,oracle数据库服务器修改时间

oracle数据库服务器修改时间 内容精选换一换华为云关系型数据库(Relational Database Service,简称RDS)是一种基于云计算平台的即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型数据库服务。WordPress简称WP,最初是一款博客系统,后逐步演化成一款免费的CMS(内容管理系统/建站系统)。本文档指导用户使用华为云市场镜像“Wordpress官方正式版”部署Word...

weixin_33978722的博客 2254

oracle写入系统时间,修改系统时间对oracle的影响

Oracle DB 服务器 系统时间修改问题 与 SCN 关系的深入研究Oracle DB 服务器 系统时间修改问题 与 SCN 关系的深入研究论坛里一个朋友说将DB 服务器系统时间往往后修改了3个月(从11年改成10年),启动DB报600的错误。一. 先做个测试1.1 关闭DBSQL> shutdown immediateDatabase closed.Database dismounte...

weixin_28864139的博客 664

db oracle,什么是Oracle的db?

对于Oracle数据库来说,db_name和instance_name可以不同。我们来看一下Oracle文档中对于db_name的定义:DB_NAME必须是一个不超过8个字符的文本串。在数据库创建过程中,db_name被记录在数据文件,日志文件和控制文件中。如果数据库实例启动过程中参数文件中的db_name和控制文件中的数据库名称不一致,则数据库不能启动。一个实例可以mount并打开任何数据库,但...

weixin_30227775的博客 904

Oracle 修改db_name 和 instance_name

注意:修改db_name,instance_name是存在风险的。特别是在生产环境下,不建议修改。但是本人来使用过成中并没有出现任何异常,修改后可能一些无法解决的异常。 查看db_name,instance_name 修改oracle用户的ORACLE_SID环境变量,如由orcl修改为ccrtoo $ vi /home/oracle/.bash_profile export ORAC...

Ccrtoo 2671

oracle查询数据库表最后修改时间

oracle查询数据库表最后修改时间 http://blog.youkuaiyun.com/accp_fangjian/article/details/6050527 select uat.table_name as 表名,(select last_ddl_time from user_objects where object_name = uat.table_name ) as 最后修改日期 from user_all_tables uat SELECT OBJECT_NAME ,CREATED FROM ALL_O

yemers的博客 4284

oracle 更改db files,修改db_files参数,是否影响业务?

1、环境描述:Oracle 10g RAC ,在线修改db_files参数2、操作如下SQL> show parameter db_filesNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_files ...

weixin_33231055的博客 1090

oracle修改db_recocery_修改参数db_recovery_file_dest时需要注意!

前两天在pub上看到有人遇到了这个问题,今天讲课时遇到了,可晚上再模拟时却死活都再现不了了.[@more@]问题就是先屏蔽了flash recovery area功能,之后又恢复该功能,结果在修改参数db_recovery_file_dest时需要在目录后面加上"",否则参数可以修改,但是还是不能启动flash recovery area功能;不过再次模拟时却不能再现:下面db_recovery_...

weixin_42326020的博客 1184
上一篇: 如何在线修改ORACLE 临时文件
下一篇: windows上主机名长度超过16个字符导致连接报:ORA-12518
cqsztech
博客等级 码龄13年 549粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值