背景
某系统,供应商运维的,直接在生产修改存储过程内容,没有备份,出问题后需要回滚。找不到原来的存储过程代码。跑来求救。时间过去了好几个小时,无法通过flashback闪回了。只能通过Logminer日志挖掘的方式来恢复原来的内容。
Logminer 基本使用步骤
19C,在CDB下面执行。在pdb下面执行会报错。
注意:以下整个操作只能在同一个会话里面执行!!否则查询V$LOGMNR_CONTENTS会看不到结果。
为了方便其他人查看,所以在第四步中,将需要的查询结果保存到了一个临时表中。
<1>. Specify a LogMiner dictionary. 指定Logminer字典
exec dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs);
复制
<2>. Specify a list of redo log files for analysis. 指定需要挖掘的redo或者archivelog日志文件
–添加一个用new,会覆盖掉之前的文件
exec dbms_logmnr.add_logfile(logfilename=>'+FRA/newuums/archivelog/2019_12_12/thread_2_seq_99153.8812.1026829075',options=>dbms_logmnr.new);
复制
–添加多个使用addfile,一般推荐使用这个
exec dbms_logmnr.add_logfile(logfilename=>'+FRA/newuums/archivelog/2019_12_12/thread_2_seq_99153.8812.1026829075',options=>DBMS_LOGMNR.ADDFILE);
复制
根据误操作时间查询出对应的归档日志【强烈推荐,直接使用该方式即可】
SELECT distinct 'exec dbms_logmnr.add_logfile(logfilename=>''' || name ||''',options=>dbms_logmnr.addfile);' sql, FIRST_TIME, completion_time FROM gV$ARCHIVED_LOG WHERE completion_time between to_date('2020-05-28 12:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2020-05-28 12:30:00','yyyy-mm-dd hh24:mi:ss') and dest_id = 1 order by 1;
复制
直接在sqlplus中执行上面的结果即可。
–查看添加的日志列表:
select filename from V$LOGMNR_LOGS;
复制
<3>. Start LogMiner. 开始日志挖掘
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
复制
<4>. Request the redo data of interest. 查询V$LOGMNR_CONTENTS获取挖掘的结果
这个视图经常使用的字段:operation\seg_owner\seg_name\table_name\sql_redo
存储过程对应的系统表名叫:SOURCE$
select t.timestamp,t.seg_owner,t.seg_name,t.table_name,t.sql_redo,t.os_username,t.machine_name,t.session_info from v$logmnr_contents; Select SQL_UNDO from v$logmnr_contents where SQL_REDO like '%存储过程名称%'; Select * from v$logmnr_contents where operation='DDL'; create table t_hqh_logminer01 as Select * from v$logmnr_contents where SQL_REDO like '%存储过程名称%'; create table t_hqh_logminer02 as Select * from v$logmnr_contents where table_name='SOURCE$';
复制
找到需要的SQL_UNDO内容,找开发确认无误后,恢复存储过程。
<5>. End the LogMiner session. 结束日志挖掘
EXECUTE DBMS_LOGMNR.END_LOGMNR;
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
Oracle19c Logminer恢复存储过程实战案例
1年前

评论
相关阅读
SQL解析失败跟踪案例分享(Oracle19c)
Rune_DB
381次阅读
2025-03-19 20:30:59
Oracle 19c RAC更换IP实战,运维必看!
szrsu
290次阅读
2025-04-08 23:57:08
ORA-01555错误深度解析:从长事务到Undo优化的全面解决方案
伟鹏
285次阅读
2025-03-20 16:18:51
oracle定时任务常用攻略
virvle
283次阅读
2025-03-25 16:05:19
Oracle 19c for OEL8.9 4节点RAC安装部署(静默方式)
zwtian
224次阅读
2025-03-28 16:13:14
DeepSeek 携手 Oracle in-memory 新特性:统计对象存储访问情况的神奇之旅
JiekeXu
191次阅读
2025-03-31 18:02:28
数据库服务器操作系统升级后Oracle 19c crs无法启动
Xiaofei Huangfu
96次阅读
2025-03-31 15:00:07
oracle rac 添加 多个scan ip,你不可不知道的坑!
szrsu
62次阅读
2025-04-13 23:56:22
19c&21c单机/RAC手工清理标准化文档
Digital Observer
56次阅读
2025-03-27 11:04:42
oracle 补丁包
凉冰
52次阅读
2025-03-19 15:20:17