oracle数据恢复,重点介绍通过日志分析LOGMNR工具恢复的方法

背景,业务数据表被删除8天后发现丢失,里面数据很重要。通过每天的数据备份包找到了10号的数据,但是有5条数据11号备份前就没了。所以找不到了。

第一种,备份文件找不到

第二种,闪回方法查询,找不到,因为查询查过了五天,找不回。

第三种,最后成功解决了。通过查询解析日志找回。

第二种回退回滚脚本这里介绍下,没准你的数据就能找回了。

select * from GZYY02 as of timestamp to_timestamp('2019-06-24 20:10:38', 'yyyy-mm-dd hh24:mi:ss'); alter table GZYY02 enable row movement; flashback table GZYY02 to timestamp TO_TIMESTAMP('2019-06-24 20:10:38', 'yyyy-mm-dd hh24:mi:ss');

开始第三种,我认为是终极解决方式。LOGMNR工具。

我用的Oracle 11G  不需要单独安装这个工具,之前的版本需要安装另行百度下。

然后11G不需要设置字典,设置参数,直接通过下面的语句查询日志的路径

select * from v$sqlarea ;
SELECT * FROM v$session;
SELECT * FROM v$session a,v$sqlarea b
WHERE b.ADDRESS = a.PREV_SQL_ADDR;

查询出日志位置,一般指向本地服务器的本地某个文件夹。

结合回复数据的时间日期。我们要找10号和11号两个备份数据中间 数据,查询一共95个日志文件,一个50M 一共两三个G。

通过PLSQL的命令行窗口运行一下脚本

(1)分析在线重作日志文件 注意下面红色部分,第一个后后面的参数不一样,我们曾经不到参数执行,导致一直不能添加,执行好多次其实就分析了一个日志文件。

A. 创建列表

B. 添加其他日志文件到列表

SQL> exec sys.dbms_logmnr.add_logfile(LogFileName=>'c:\oradata\jssweb\arc\20120911_35.arc',options=>dbms_logmnr.new);

--SQL> exec sys.dbms_logmnr.add_logfile(LogFileName=>'c:\oradata\jssweb\arc\20120911_36.arc',options=>dbms_logmnr.addfile);

(2)分析离线日志文件

到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。

SELECT sql_redo FROM v$logmnr_contents; 

如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户DB_ZGXT对表SB_DJJL所作的一切工作。

 

执行下面那句,哪怕只有一天的也执行了10分钟左右。所以最好增加一个条件限制

. 抓取待恢复的信息到临时表
SQL> create table tmp_logmnr as
2 select operation,sql_redo,sql_undo from v$logmnr_contents
3 where seg_name='T1' and operation='DELETE'
4 and timestamp between to_date('2008-09-22 11:32:25','yyyy-mm-dd hh24:mi:ss')
5 and to_date('2008-09-22 11:32:45','yyyy-mm-dd hh24:mi:ss');

tmp_logmnr是实体表名,分析结果会插入里面。operation='DELETE' 要带上,百分之99。9%都是delete语句。因为我怀疑所有更新插入操作oracle底层都是先删除再插入。

有了实体表,所有的insert语句都能找到了。数据就在这里。

结束LogMiner会话 虽然关闭plsql命令行窗口也能结束会话。但是还是希望执行下结束命令

  SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库中,有几种方法可以用来恢复数据。其中一种方法是使用闪回功能。通过使用闪回功能,可以将数据库恢复到过去的某个状态。可以使用以下语法来实现闪回功能:\[1\] ``` SQL> alter database flashback on; SQL> flashback database to scn SCNNO; SQL> flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-mm-dd hh24:mi:ss'); ``` 另一种方法是使用export/import工具进行逻辑备份和恢复。这个工具适用于数据量不大、业务量不多的数据库系统。通过使用export工具进行逻辑备份,可以将数据库的数据导出到一个文件中。当数据库发生意外崩溃时,可以使用import工具将备份的数据导入到数据库中,从而恢复数据。需要注意的是,如果在备份和崩溃之间有数据修改操作(包括DDL和DML),这些操作将会丢失。因此,对于那些数据相对稳定的表,可以使用import工具恢复数据。对于经常变化的业务表,丢失的数据可能需要从其他途径进行恢复。\[2\] 此外,Oracle还提供了闪回查询(Flashback Query)功能。这个功能可以用于恢复误删除或误更新并已经提交的数据。在Oracle提供闪回查询之前,恢复这种情况只能通过备份或使用logmnr挖掘日志来进行,而这些方法相对繁琐且耗时。闪回查询提供了一种简便快捷的恢复方法。\[3\] #### 引用[.reference_title] - *1* [Oracle数据库 - 数据恢复](https://blog.csdn.net/weixin_44773109/article/details/126674741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Oracle数据库数据丢失恢复的几种方法总结](https://blog.csdn.net/weixin_33861800/article/details/92139267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值