使用Oracle logminer 找回delete的数据

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

2、logminer的用法
在用logminer获取数据字典文件时,需要设置UTL_FILE_DIR参数,然而设置这个参数必须要 重新启动数据库,生产库一般不能随便重启,从9i以上的版本可以直接使用在线数据文件字典,选项为dbms_logmnr.dict_from_online_catalog 。
直接使用三个dbms包:
exec dbms_logmnr.add_logfile();
exec dbms_logmnr.start_logmnr();
execute dbms_logmnr.end_logmnr;

3、帮助用户找回delete的数据
客户反馈晚上12点左右删除了数据,通过flashback已经无法闪回,也没有导出备份,rman全备倒是有,但是没有临时环境,且操作过程较长,此时需要logminer出马找回被delete的数据。
3.1 准备工作
相关视图
------------
v$logmnr_contents
SQL> desc v$logmnr_contents
Name Null? Type
----------------------------------------- -------- ----------------------------
SCN NUMBER
START_SCN NUMBER
COMMIT_SCN NUMBER
TIMESTAMP DATE
START_TIMESTAMP DATE
COMMIT_TIMESTAMP DATE
XIDUSN NUMBER
XIDSLT NUMBER
XIDSQN NUMBER
XID RAW(8)
PXIDUSN NUMBER
PXIDSLT NUMBER
PXIDSQN NUMBER
PXID RAW(8)
TX_NAME VARCHAR2(256)
OPERATION VARCHAR2(32)
OPERATION_CODE NUMBER
ROLLBACK NUMBER
SEG_OWNER VARCHAR2(32)
SEG_NAME VARCHAR2(256)
TABLE_NAME VARCHAR2(32)
SEG_TYPE NUMBER
SEG_TYPE_NAME VARCHAR2(32)
TABLE_SPACE VARCHAR2(32)
ROW_ID VARCHAR2(18)
USERNAME VARCHAR2(30)
OS_USERNAME VARCHAR2(4000)
MACHINE_NAME VARCHAR2(4000)
AUDIT_SESSIONID NUMBER
SESSION# NUMBER
SERIAL# NUMBER
SESSION_INFO VARCHAR2(4000)
THREAD# NUMBER
SEQUENCE# NUMBER
RBASQN NUMBER
RBABLK NUMBER
RBABYTE NUMBER
UBAFIL NUMBER
UBABLK NUMBER
UBAREC NUMBER
UBASQN NUMBER
ABS_FILE# NUMBER
REL_FILE# NUMBER
DATA_BLK# NUMBER
DATA_OBJ# NUMBER
DATA_OBJV# NUMBER
DATA_OBJD# NUMBER
SQL_REDO VARCHAR2(4000)
SQL_UNDO VARCHAR2(4000)
RS_ID VARCHAR2(32)
SSN NUMBER
CSF NUMBER
INFO VARCHAR2(32)
STATUS NUMBER
REDO_VALUE NUMBER
UNDO_VALUE NUMBER
SAFE_RESUME_SCN NUMBER
CSCN NUMBER
OBJECT_ID RAW(16)
EDITION_NAME VARCHAR2(30)
CLIENT_ID VARCHAR2(64)
----------------
3.2 确定日志
确定删除操作的时段,23:30~03:00之间做的delete,还好晚上没有什么业务,只产生了一个归档日志
3.3 添加日志
SQL> exec dbms_logmnr.add_logfile(LogFileName => '/backup/archivelog/1_251_946834694.dbf', Options => dbms_logmnr.new);
PL/SQL procedure successfully completed

3.4 解析日志
解析方法
DBMS_LOGMNR.START_LOGMNR ( startScn IN NUMBER default 0, endScn IN NUMBER default 0, startTime IN DATE default '01-jan-1988', endTime IN DATE default '31-dec-2110', DictFileName IN VARCHAR2 default '', Options IN BINARY_INTEGER default 0 );

执行解析
SQL> exec dbms_logmnr.start_logmnr(Options =>dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed

解析这里可以根据时间段或者scn范围解析,scn和时间转换可以用
select timestamp_to_scn(to_date('2017-08-12 00:00:01','YYYY-MM-DD HH24:MI:SS')) from dual;
select timestamp_to_scn(to_date('2017-08-12 00:10:01','YYYY-MM-DD HH24:MI:SS')) from dual;
我没有使用时间段,把整个log进行解析,然后通过sql_redo对应的delete语句查找sql_undo的语句

确认所需的sql,客户删除语句类似DELETE from T_WXSCKD ……这样的操作
select operation,sql_redo,sql_undo from v$logmnr_contents where OPERATION='DELETE' and SQL_REDO like 'delete from "ERP_CC"."T_WXSCKD"%';
输出结果清楚的看到redo和undo的sql信息,现在要做的是把对应的undo中insert语句导出来,生成sql脚本。
1065dc18c415bc09fdf6d1fa52cfa9a9d82cd576

可以加参数美化输出结果,但是格式化后的sql不适合作为脚本执行:DBMS_LOGMNR.PRINT_PRETTY_SQL
exec dbms_logmnr.start_logmnr(Options =>dbms_logmnr.dict_from_online_catalog + DBMS_LOGMNR.PRINT_PRETTY_SQL);
5fd4d6a55257c348bcdfaa0e06e9394efffbf304

3.5 生成脚本并导入到临时表
注意中文的输出,需要先设置NLS_LANG环境变量
export NLS_LANG="AMERICAN_AMERICA.zhs16gbk"
进行sqlplus格式化,这样输出的sql脚本中每个insert都是一行。
SQLPLUS>
set line 1000 --设置行的长度
set pagesize 0 --输出不换页
set feedback off --默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功命令行会返回类似:Table created的反馈,off后不显示反馈
set heading off --不显示表头信息
set trimspool on --如果trimspool设置为on,将移除spool文件中的尾部空
set trims on --去掉空字符
set echo off;     --显示start启动的脚本中的每个sql命令,缺省为on
set termout off --不在屏幕上显示结果
spool 12345.sql --记录数据到db1.txt
select count(1) from v$logmnr_contents where OPERATION='DELETE' and SQL_REDO like 'delete from "ERP_CC"."T_WXSCKD"%'; --导出数据语句
spool off --收集完毕
cce0ac3d62537c97414011135f58a96599276c9b


创建临时表,
create table ERP_CC.T_WXSCKD_tmp as select * from ERP_CC.T_WXSCKD where 1=0;
SQL>@12345.sql
commit;
客户根据条件找回所需的数据。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
12天前
|
SQL Oracle 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
7天前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
25 0
|
7天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在 DataWorks 中,使用Oracle作为数据源进行数据映射和查询,如何更改数据源为MaxCompute或其他类型
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
23 1
|
17天前
|
SQL Oracle 关系型数据库
Oracle spool格式化数据命令
在这个示例中,通过设置不同的 `SET`命令参数,你可以控制输出的格式,包括每页行数、每行字符数、列分隔符等。你也可以使用其他的 `SET`命令参数来进一步定制输出格式。
13 0
|
18天前
|
Oracle 安全 关系型数据库
Oracle数据守卫(DG):数据的“守护者”与“时光机”
【4月更文挑战第19天】Oracle Data Guard保障数据安全,通过实时维护备库实现故障切换,保证业务连续性。它使用日志传输和应用保持数据同步,如同“时光机”,借助闪回技术能恢复误操作数据。此外,它还提供数据压缩、加密和故障转移等功能,提升数据库安全性与性能。作为数据管理员,理解并善用Data Guard是确保企业数据安全的关键。
|
18天前
|
SQL Oracle 关系型数据库
Oracle 12c的TOP N语句:数据排名的“快速通道”
【4月更文挑战第19天】Oracle 12c的TOP N语句是用于快速获取数据集排名前N的记录的SQL查询方法,特别适合寻找最具代表性的数据。通过指定排序条件和数量,TOP N能高效筛选出所需信息,例如最高销售额产品或最大访问量网页。在Oracle 12c中,查询优化器对TOP N查询进行了优化,保证快速返回结果,并提供丰富的排序和过滤选项。基本用法如`SELECT ... ORDER BY ... FETCH FIRST N ROWS ONLY`,还可结合`OFFSET`进行分页查询或用`WITH TIES`保持结果完整性。掌握TOP N语句能提升数据分析效率,助力企业决策。
|
18天前
|
存储 Oracle 关系型数据库
Oracle 12c的临时UNDO:数据的“临时保镖”
【4月更文挑战第19天】Oracle 12c引入的临时UNDO为数据安全提供新保障。它为临时操作和特定事务提供独立UNDO空间,避免共享UNDO带来的性能瓶颈和管理复杂性。临时UNDO随事务开始分配,记录修改历史,事务结束后自动释放。优点包括提高性能、简化管理及保证数据一致性。但需注意手动配置、监控和优化,以防长时间占用资源。了解其工作原理和最佳实践是提升数据库性能的关键。
|
18天前
|
监控 Oracle 关系型数据库
Oracle 12c的Adaptive执行计划:数据的“聪明导航员”
【4月更文挑战第19天】Oracle 12c的Adaptive执行计划是数据库查询的智能优化工具,能根据实际运行情况动态调整执行策略。它像一个聪明的导航系统,不仅生成初始执行计划,还能实时监控并适应统计信息和资源变化,例如自动切换索引或调整并行度。此外,它支持自适应连接和统计信息收集,提升处理复杂查询和变化数据环境的能力。数据管理员应充分利用这一特性来优化查询性能和用户体验。
|
18天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
18天前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。

推荐镜像

更多