logminer恢復誤覆蓋更新的資料

2021-09-22 19:01:52 字數 2433 閱讀 1025

昨日程式部署人員在運營資料庫誤更新覆蓋了系統重要資料。具體誤操作方式在一表上用a欄位和

b欄位資料基本相同,但b欄位中有null值,然後b欄位的資料更新了a欄位資料,之後刪除了b欄位,

導致系統重要入口資料無法顯示,考慮表結構修改過,且只對單錶操作,為盡快恢復資料,因此,

使用logminer讀取日誌的方式恢復資料。具體模擬相應場景

alter database archivelog;

alter database open;

一 建立環境

1 建新表並插入資料

create table test.t1(t_id number,t_name varchar2(50),t_salary number(8) );

insert into test.t1 values(1,'jy',10000);

insert into test.t1 values(2,'wj',8000);

select * from test.t1;

2更改資料,刪除字段

update test.t1 set t_name = t_salary;

alter table test.t1 drop column t_salary ;

alter system switch logfile;

二恢復日誌

1查詢刪除資料的歸檔日誌

select name,sequence#,first_change#,first_time from v$archived_log ;

2增加歸檔日誌

begin

dbms_logmnr.add_logfile(logfilename=>'d:\anzhuang\oracle\product\10.2.0\db_1\flash_recovery_area\orcl\archivelog\2016_06_02\o1_mf_1_212_cnz3dbkx_.arc',options=>dbms_logmnr.new);

end;

3分析歸檔日誌

begin

dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

end;

4插入分析歸檔日誌

insert into logmnr_contents  select * from v$logmnr_contents ;

5結束分析歸檔

begin

dbms_logmnr.end_logmnr;

end;

6檢視誤操作表的操作步驟

select seg_name,username,scn,timestamp,sql_redo,sql_undo from logmnr_contents where seg_name='t1';

2016/6/2 9:33:30 "create table test.t1(t_id number,t_name varchar2(50),t_salary number(8) )

;" 2016/6/2 9:33:32 dictionary version mismatch dictionary version mismatch

2016/6/2 9:33:32 dictionary version mismatch dictionary version mismatch

2016/6/2 9:33:59 update "test"."t1" set "t_name" = '10000' where "t_name" = 'jy' and rowid = 'aaani4aaeaaekbhaaa'; update "test"."t1" set "t_name" = 'jy' where "t_name" = '10000' and rowid = 'aaani4aaeaaekbhaaa';

2016/6/2 9:33:59 update "test"."t1" set "t_name" = '8000' where "t_name" = 'wj' and rowid = 'aaani4aaeaaekbhaab'; update "test"."t1" set "t_name" = 'wj' where "t_name" = '8000' and rowid = 'aaani4aaeaaekbhaab';

2016/6/2 9:34:40 "alter table test.t1 drop column t_salary

;" 

7找出被更新的資料,逆向被更新的恢復資料

update "test"."t1" set "t_name" = 'jy' where "t_name" = '10000' and rowid = 'aaani4aaeaaekbhaaa';

update "test"."t1" set "t_name" = 'wj' where "t_name" = '8000' and rowid = 'aaani4aaeaaekbhaab';

select * from test.t1;

mysql誤update資料恢復

誤update資料恢復 1。根據set值查詢日誌路徑 opt local mysql bin mysqlbinlog no defaults v v base64 output decode rows mysql bin.000002 grep b 15 myy more 2.建立文字 touch ...

恢復ORACLE被誤更新或刪除資料的辦法

有時候我們在操作oracle資料庫的時候,可能由於sql寫錯了導致把資料update錯了,或者delete刪除掉了,那麼這時候如何去恢復之前的資料呢?莫著急,我們可以採用oracle的基於時間查詢as of timestamp的辦法進行恢復資料。下面以具體例子進行講解用法。1 比如,我的wl not...

恢復ORACLE被誤更新或刪除資料的方法

有時候我們在操作oracle資料庫的時候,可能由於sql寫錯了導致把資料update錯了,或者delete刪除掉了,那麼這時候如何去恢復之前的資料呢?莫著急,我們可以採用oracle的基於時間查詢as of timestamp的辦法進行恢復資料。下面以具體例子進行講解用法。1 比如,我的wl not...