昨日程式部署人員在運營資料庫誤更新覆蓋了系統重要資料。具體誤操作方式在一表上用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...