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

记一次Oracle数据恢复过程

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

事情的起因是,一个应用升级后,某一个操作导致一个表的几个列全部被更新为同一值(忍不住又要唠叨测试的重要性)。这样的错误居然出现在应用代码中,显然是重大的BUG。那个是罪魁祸首的SQL,UPDATE语句,其WHERE条件仅仅只有一个where 1=1。
系统的维护人员称是星期五出的错,发现出错是在星期天,也就是我恢复数据的日期,与声称的出错时间已经隔了将近2天。开始尝试用flashback query恢复数据,报ORA-01555错误,此路不通。维护人员说,星期五之前的RMAN备份已经被删除了(又是一个备份恢复策略不当地例子),使用基于时间点的恢复也不可能了。剩下的一条路,只有使用log miner。还好归档文件还在数据库服务器上。
这套库是一套RAC数据库,由于没有人能确认操作发生在哪个节点,因此需要将一个节点下所有的归档复制到另一个节点上(如果没有足够的空间,可以使用NFS)。然后需要找到我们用于数据恢复的归档日志:

set linesize 170 pagesize 10000nbsp;nbsp;nbsp;
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';nbsp;nbsp;nbsp;
nbsp;nbsp;
col name for a30nbsp;nbsp;nbsp;
col first_change for a10nbsp;nbsp;nbsp;
col next_change for a10nbsp;nbsp;nbsp;
nbsp;nbsp;
select max(first_time) from v$archived_lognbsp;nbsp;nbsp;
where first_time lt; to_date('200909251900','yyyymmddhh24mi'); --这里的时间为错误发生时估计的最早时间。nbsp;nbsp;nbsp;
nbsp;nbsp;
select sequence#,first_time,name,to_char(first_change#,'xxxxxxxx') first_change,nbsp;nbsp;nbsp;
nbsp;to_char(next_change#,'xxxxxxxx') next_changenbsp;nbsp;nbsp;
nbsp;from v$archived_lognbsp;nbsp;nbsp;
wherenbsp; first_time gt;=to_date('200909251707','yyyymmddhh24mi')nbsp;nbsp;nbsp;
order by 2;--这里的时间为前一SQL的max(first_time)结果nbsp;nbsp;nbsp;
nbsp;nbsp;
nbsp;SEQUENCE# FIRST_TIMEnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; NAMEnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; FIRST_CHAN NEXT_CHANGnbsp;nbsp;nbsp;
---------- ------------------- ------------------------------ ---------- ----------nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4039 2009-09-25 17:07:10 /arch/db1_1_4039.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88ce7effnbsp;nbsp; 88d1457cnbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4040 2009-09-26 12:24:52 /arch/db1_1_4040.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1457cnbsp;nbsp; 88d1459fnbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4041 2009-09-26 12:25:22 /arch/db1_1_4041.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1459fnbsp;nbsp; 88d156a4nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4688 2009-09-26 12:37:59 /arch/db1_2_4688.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1457fnbsp;nbsp; 88d1464anbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4689 2009-09-26 12:38:27 /arch/db1_2_4689.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1464anbsp;nbsp; 88d1569cnbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4042 2009-09-26 12:54:44 /arch/db1_1_4042.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d156a4nbsp;nbsp; 88d157e7nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4043 2009-09-26 12:54:56 /arch/db1_1_4043.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d157e7nbsp;nbsp; 88d1ab06nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4690 2009-09-26 13:07:47 /arch/db1_2_4690.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1569cnbsp;nbsp; 88d1570bnbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4691 2009-09-26 13:08:00 /arch/db1_2_4691.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1570bnbsp;nbsp; 88d1ab09nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4044 2009-09-26 15:27:32 /arch/db1_1_4044.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1ab06nbsp;nbsp; 88d1ab0dnbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4045 2009-09-26 15:27:35 /arch/db1_1_4045.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1ab0dnbsp;nbsp; 88d25091nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4692 2009-09-26 15:40:36 /arch/db1_2_4692.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1ab09nbsp;nbsp; 88d1ab77nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4693 2009-09-26 15:40:39 /arch/db1_2_4693.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1ab77nbsp;nbsp; 88d25094nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4046 2009-09-26 22:24:07 /arch/db1_1_4046.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25091nbsp;nbsp; 88d250dbnbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4047 2009-09-26 22:24:19 /arch/db1_1_4047.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d250dbnbsp;nbsp; 88d2515enbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4048 2009-09-26 22:24:29 /arch/db1_1_4048.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d2515enbsp;nbsp; 88d25167nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4049 2009-09-26 22:24:41 /arch/db1_1_4049.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25167nbsp;nbsp; 88d25cacnbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4694 2009-09-26 22:37:13 /arch/db1_2_4694.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25094nbsp;nbsp; 88d25147nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4695 2009-09-26 22:37:25 /arch/db1_2_4695.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25147nbsp;nbsp; 88d2515bnbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4696 2009-09-26 22:37:33 /arch/db1_2_4696.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d2515bnbsp;nbsp; 88d2516anbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4697 2009-09-26 22:37:47 /arch/db1_2_4697.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d2516anbsp;nbsp; 88d25ca9nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4050 2009-09-26 22:41:57 /arch/db1_1_4050.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25cacnbsp;nbsp; 88d25cdenbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4698 2009-09-26 22:55:01 /arch/db1_2_4698.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25ca9nbsp;nbsp; 88d25dcfnbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp; 4699 2009-09-26 22:55:19 /arch/db1_2_4699.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25dcfnbsp;nbsp; 88dbd27enbsp;
set linesize 170 pagesize 10000
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
col name for a30
col first_change for a10
col next_change for a10
select max(first_time) from v$archived_log
where first_time lt; to_date('200909251900','yyyymmddhh24mi'); --这里的时间为错误发生时估计的最早时间。
select sequence#,first_time,name,to_char(first_change#,'xxxxxxxx') first_change,
nbsp;to_char(next_change#,'xxxxxxxx') next_change
nbsp;from v$archived_log
wherenbsp; first_time gt;=to_date('200909251707','yyyymmddhh24mi')
order by 2;--这里的时间为前一SQL的max(first_time)结果
nbsp;SEQUENCE# FIRST_TIMEnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; NAMEnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; FIRST_CHAN NEXT_CHANG
---------- ------------------- ------------------------------ ---------- ----------
nbsp;nbsp;nbsp;nbsp;nbsp; 4039 2009-09-25 17:07:10 /arch/db1_1_4039.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88ce7effnbsp;nbsp; 88d1457c
nbsp;nbsp;nbsp;nbsp;nbsp; 4040 2009-09-26 12:24:52 /arch/db1_1_4040.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1457cnbsp;nbsp; 88d1459f
nbsp;nbsp;nbsp;nbsp;nbsp; 4041 2009-09-26 12:25:22 /arch/db1_1_4041.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1459fnbsp;nbsp; 88d156a4
nbsp;nbsp;nbsp;nbsp;nbsp; 4688 2009-09-26 12:37:59 /arch/db1_2_4688.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1457fnbsp;nbsp; 88d1464a
nbsp;nbsp;nbsp;nbsp;nbsp; 4689 2009-09-26 12:38:27 /arch/db1_2_4689.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1464anbsp;nbsp; 88d1569c
nbsp;nbsp;nbsp;nbsp;nbsp; 4042 2009-09-26 12:54:44 /arch/db1_1_4042.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d156a4nbsp;nbsp; 88d157e7
nbsp;nbsp;nbsp;nbsp;nbsp; 4043 2009-09-26 12:54:56 /arch/db1_1_4043.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d157e7nbsp;nbsp; 88d1ab06
nbsp;nbsp;nbsp;nbsp;nbsp; 4690 2009-09-26 13:07:47 /arch/db1_2_4690.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1569cnbsp;nbsp; 88d1570b
nbsp;nbsp;nbsp;nbsp;nbsp; 4691 2009-09-26 13:08:00 /arch/db1_2_4691.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1570bnbsp;nbsp; 88d1ab09
nbsp;nbsp;nbsp;nbsp;nbsp; 4044 2009-09-26 15:27:32 /arch/db1_1_4044.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1ab06nbsp;nbsp; 88d1ab0d
nbsp;nbsp;nbsp;nbsp;nbsp; 4045 2009-09-26 15:27:35 /arch/db1_1_4045.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1ab0dnbsp;nbsp; 88d25091
nbsp;nbsp;nbsp;nbsp;nbsp; 4692 2009-09-26 15:40:36 /arch/db1_2_4692.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1ab09nbsp;nbsp; 88d1ab77
nbsp;nbsp;nbsp;nbsp;nbsp; 4693 2009-09-26 15:40:39 /arch/db1_2_4693.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d1ab77nbsp;nbsp; 88d25094
nbsp;nbsp;nbsp;nbsp;nbsp; 4046 2009-09-26 22:24:07 /arch/db1_1_4046.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25091nbsp;nbsp; 88d250db
nbsp;nbsp;nbsp;nbsp;nbsp; 4047 2009-09-26 22:24:19 /arch/db1_1_4047.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d250dbnbsp;nbsp; 88d2515e
nbsp;nbsp;nbsp;nbsp;nbsp; 4048 2009-09-26 22:24:29 /arch/db1_1_4048.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d2515enbsp;nbsp; 88d25167
nbsp;nbsp;nbsp;nbsp;nbsp; 4049 2009-09-26 22:24:41 /arch/db1_1_4049.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25167nbsp;nbsp; 88d25cac
nbsp;nbsp;nbsp;nbsp;nbsp; 4694 2009-09-26 22:37:13 /arch/db1_2_4694.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25094nbsp;nbsp; 88d25147
nbsp;nbsp;nbsp;nbsp;nbsp; 4695 2009-09-26 22:37:25 /arch/db1_2_4695.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25147nbsp;nbsp; 88d2515b
nbsp;nbsp;nbsp;nbsp;nbsp; 4696 2009-09-26 22:37:33 /arch/db1_2_4696.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d2515bnbsp;nbsp; 88d2516a
nbsp;nbsp;nbsp;nbsp;nbsp; 4697 2009-09-26 22:37:47 /arch/db1_2_4697.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d2516anbsp;nbsp; 88d25ca9
nbsp;nbsp;nbsp;nbsp;nbsp; 4050 2009-09-26 22:41:57 /arch/db1_1_4050.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25cacnbsp;nbsp; 88d25cde
nbsp;nbsp;nbsp;nbsp;nbsp; 4698 2009-09-26 22:55:01 /arch/db1_2_4698.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25ca9nbsp;nbsp; 88d25dcf
nbsp;nbsp;nbsp;nbsp;nbsp; 4699 2009-09-26 22:55:19 /arch/db1_2_4699.arcnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 88d25dcfnbsp;nbsp; 88dbd27e
尝试找到数据被错误更新的时间点:

(编辑:源码网)

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

热点阅读