利用Logmnr找回誤刪除的資料
利用Logmnr找回誤刪除的資料,
這種方式可以在flashback也幫不上忙的起作用,
只要誤操作時期的歸檔日誌存在,
就可以透過歸檔日誌來恢復誤刪除(delete)的資料。
測試環境oracle 9.2.0.8+winxp
1.建立測試資料
SQL>create user hz identified by abc default tablespace users;
SQL>grant connect,resource to hz;
SQl>connect hz/abc
SQL>create table hz_test (id number);
SQL> alter system switch logfile;
系統已更改。
SQL>
SQL> begin
2 for i in 1..10 loop
3 insert into hz.hz_test values(i);
4 end loop;
5 commit;
6 end;
7 /
PL/SQL 過程已成功完成。
SQL>
SQL> select * from hz.hz_test;
ID
----------
1
2
3
4
5
6
7
8
9
10
已選擇10行。
SQL> delete from hz.hz_test where id in (2,3,4,5);
已刪除4行。
SQL> commit;
提交完成。
SQL> select * from hz.hz_test;
ID
----------
1
6
7
8
9
10
已選擇6行。
SQL> alter system switch logfile;
系統已更改。
現在把刪除的2,3,4,5 四條資料恢復
2.增加產生的歸檔日誌序列號為153
SQL> exec sys.dbms_logmnr.add_logfile(logfilename=>'d:\backup\ARC00153.001',opti
ons=>dbms_logmnr.new);
PL/SQL 過程已成功完成。
3.分析日誌
SQL> exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online
_catalog);
PL/SQL 過程已成功完成。
4.把需要的資訊儲存到臨時表tmp_logmnr
SQL> create table tmp_logmnr as select operation,sql_redo,sql_undo from v$logmn
r_contents;
表已建立。
5.終止日誌分析
SQL> exec sys.dbms_logmnr.end_logmnr;
PL/SQL 過程已成功完成。
6.查詢臨時表資訊
SQL> select * from tmp_logmnr;
OPERATION SQL_REDO SQL_UNDO
------------------------------------------------------------------------- --------------------------------------------------------------------------------
START set transaction read write;
INSERT insert into "HZ"."HZ_TEST"("ID") values ('1'); delete from "HZ"."HZ_TEST" where "ID" = '1' and ROWID = 'AAABleAAFAAAAG+AAK';
INSERT insert into "HZ"."HZ_TEST"("ID") values ('2'); delete from "HZ"."HZ_TEST" where "ID" = '2' and ROWID = 'AAABleAAFAAAAG+AAA';
INSERT insert into "HZ"."HZ_TEST"("ID") values ('3'); delete from "HZ"."HZ_TEST" where "ID" = '3' and ROWID = 'AAABleAAFAAAAG+AAB';
INSERT insert into "HZ"."HZ_TEST"("ID") values ('4'); delete from "HZ"."HZ_TEST" where "ID" = '4' and ROWID = 'AAABleAAFAAAAG+AAC';
INSERT insert into "HZ"."HZ_TEST"("ID") values ('5'); delete from "HZ"."HZ_TEST" where "ID" = '5' and ROWID = 'AAABleAAFAAAAG+AAD';
INSERT insert into "HZ"."HZ_TEST"("ID") values ('6'); delete from "HZ"."HZ_TEST" where "ID" = '6' and ROWID = 'AAABleAAFAAAAG+AAE';
INSERT insert into "HZ"."HZ_TEST"("ID") values ('7'); delete from "HZ"."HZ_TEST" where "ID" = '7' and ROWID = 'AAABleAAFAAAAG+AAF';
INSERT insert into "HZ"."HZ_TEST"("ID") values ('8'); delete from "HZ"."HZ_TEST" where "ID" = '8' and ROWID = 'AAABleAAFAAAAG+AAG';
INSERT insert into "HZ"."HZ_TEST"("ID") values ('9'); delete from "HZ"."HZ_TEST" where "ID" = '9' and ROWID = 'AAABleAAFAAAAG+AAH';
INSERT insert into "HZ"."HZ_TEST"("ID") values ('10'); delete from "HZ"."HZ_TEST" where "ID" = '10' and ROWID = 'AAABleAAFAAAAG+AAI';
COMMIT commit;
START set transaction read write;
DELETE delete from "HZ"."HZ_TEST" where "ID" = '2' and ROWID = 'AAABleAAFAAAAG+AAA'; insert into "HZ"."HZ_TEST"("ID") values ('2');
DELETE delete from "HZ"."HZ_TEST" where "ID" = '3' and ROWID = 'AAABleAAFAAAAG+AAB'; insert into "HZ"."HZ_TEST"("ID") values ('3');
DELETE delete from "HZ"."HZ_TEST" where "ID" = '4' and ROWID = 'AAABleAAFAAAAG+AAC'; insert into "HZ"."HZ_TEST"("ID") values ('4');
DELETE delete from "HZ"."HZ_TEST" where "ID" = '5' and ROWID = 'AAABleAAFAAAAG+AAD'; insert into "HZ"."HZ_TEST"("ID") values ('5');
COMMIT commit;
18 rows selected
7.恢復誤刪除的資料
SQL> declare
2 mysql varchar2(4000);
3 num number :=0;
4 begin
5 for c_tmp in (select sql_undo from tmp_logmnr where peration='DELETE') loop
6 mysql := replace(c_tmp.sql_undo,';','');
7 dbms_output.put_line(mysql);
8 execute immediate mysql;
9 num := num + 1;
10 if mod(num,1000)=0 then
11 commit;
12 end if;
13 end loop;
14 commit;
15 exception
16 when others then
17 rollback;
18 end;
19 /
insert into "HZ"."HZ_TEST"("ID") values ('2')
insert into "HZ"."HZ_TEST"("ID") values ('3')
insert into "HZ"."HZ_TEST"("ID") values ('4')
insert into "HZ"."HZ_TEST"("ID") values ('5')
PL/SQL procedure successfully completed
8.資料確認:
SQL> select * from hz.hz_test;
ID
----------
1
2
3
4
5
6
7
8
9
10
已選擇10行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-503895/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【piner】利用Logmnr找回誤刪除資料
- 利用Logmnr找回誤刪除資料(zt)
- [Logmnr]使用logminer找回被誤刪的資料
- 利用延時備庫找回被誤刪的資料
- 使用Logmnr恢復誤刪的資料
- flashback query和logmnr用於恢復資料的誤刪除(轉)
- 利用rman的TSPITR技術找回刪除的表!
- 誤刪除資料了怎麼辦?小編交易誤刪除資料的恢復方法
- 誤刪了電腦資料怎麼找回來?
- Eclipse 刪除找回Eclipse
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 如何找回誤刪的檔案?
- oracle恢復誤刪除資料Oracle
- Oracle閃回刪除恢復誤刪資料Oracle
- 我把Linux系統上面誤刪的資料找回來了Linux
- Oracle快速找回被刪除的表Oracle
- 【HBase】誤刪除資料怎麼辦?
- 誤刪檔案能找回嗎?簡單誤刪檔案找回教程分享
- Oracle恢復誤刪除的資料檔案Oracle
- truncate table 誤刪除資料後的恢復
- Laravel 中利用『模型事件』來實現刪除資料時的連帶刪除Laravel模型事件
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- 利用rman全備恢復刪除的資料庫資料庫
- 利用隱式遊標分批刪除資料的procedure
- 找回Oracle中Delete刪除的記錄Oracledelete
- whk我【資料刪除】你個【資料刪除】的
- mysql資料庫誤刪除操作說明MySql資料庫
- 閃回查詢找到誤刪除資料
- Flashback Query恢復誤刪除資料(轉)
- 聊聊PG資料庫的防誤刪除問題資料庫
- oracle誤刪除表空間的資料檔案Oracle
- 實驗2:利用BBED工具刪除行資料
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- 電腦檔案誤刪除了怎麼恢復找回?誤刪電腦資料恢復方法教程資料恢復
- LogMnr-誤DML後使用logmnr對資料進行恢復
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- mysql資料庫誤刪除後的資料恢復操作說明MySql資料庫資料恢復
- MySQL 資料庫誤刪除後的資料恢復操作說明MySql資料庫資料恢復