加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

记一次Oracle数据恢复过程

发布时间:2016-11-27 21:38:41 所属栏目:大数据 来源:站长网
导读:事情的起因是,一个应用升级后,某一个操作导致一个表的几个列全部被更新为同一值(忍不住又要唠叨测试的重要性)。这样的错误居然出现在应用代码中,显然是重大的BUG。那个是罪魁祸首的SQL,UPDATE语句,其WHERE条件仅仅只有一个where 1=1。 系统的维护人

nbsp;
exec sys.dbms_logmnr.add_logfile(logfilename=gt;'/arch/db1_1_4038.arc');nbsp;nbsp;nbsp;
exec sys.dbms_logmnr.add_logfile(logfilename=gt;'/arch/db1_1_4039.arc');nbsp;nbsp;nbsp;
nbsp;nbsp;
exec sys.dbms_logmnr.start_logmnr(options=gt;sys.dbms_logmnr.dict_from_online_catalog);nbsp;nbsp;nbsp;
nbsp;nbsp;
col sql_redo for a50nbsp;nbsp;nbsp;
nbsp;nbsp;
select scn,timestamp,username,sql_redo from v$logmnr_contentsnbsp;nbsp;nbsp;
where operation='UPDATE' and upper(sql_redo) like '%TBL_FORM_FORM%'nbsp;nbsp;
and sql_redo like '%SGS0900021BNc10%'nbsp; --这个值是UPDATE时某一列被更新后的值,用在这里便于查找。nbsp;nbsp;nbsp;
order by scn,timestamp;nbsp;nbsp;nbsp;
exec sys.dbms_logmnr.end_logmnr;nbsp;
exec sys.dbms_logmnr.add_logfile(logfilename=gt;'/arch/db1_1_4038.arc');
exec sys.dbms_logmnr.add_logfile(logfilename=gt;'/arch/db1_1_4039.arc');
exec sys.dbms_logmnr.start_logmnr(options=gt;sys.dbms_logmnr.dict_from_online_catalog);
col sql_redo for a50
select scn,timestamp,username,sql_redo from v$logmnr_contents
where operation='UPDATE' and upper(sql_redo) like '%TBL_FORM_FORM%'
and sql_redo like '%SGS0900021BNc10%'nbsp; --这个值是UPDATE时某一列被更新后的值,用在这里便于查找。
order by scn,timestamp;
exec sys.dbms_logmnr.end_logmnr;
很不幸的是,没有找着需要的数据。再往后找了几个日志,也没找着。
如果一直找下去,显然会消耗比较长的时间,业务也已经停止了。不过可以用一种简单的方法来查找数据被错误更新发生的时间:一个比较大的表,通常段头后面的那个块,也就是存储那个表的数据的第1个块,通常是很少更新的,至少当时恢复的那个表是这样一种情况。我们可以通过数据块中ITL上的事务SCN来满足我们的要求。

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读