利用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用延時備庫找回被誤刪的資料
- 誤刪除資料了怎麼辦?小編交易誤刪除資料的恢復方法
- 誤刪了電腦資料怎麼找回來?
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 我把Linux系統上面誤刪的資料找回來了Linux
- 【HBase】誤刪除資料怎麼辦?
- Oracle快速找回被刪除的表Oracle
- 誤刪檔案能找回嗎?簡單誤刪檔案找回教程分享
- Laravel 中利用『模型事件』來實現刪除資料時的連帶刪除Laravel模型事件
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- mysql資料庫誤刪除操作說明MySql資料庫
- 聊聊PG資料庫的防誤刪除問題資料庫
- whk我【資料刪除】你個【資料刪除】的
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- 電腦檔案誤刪除了怎麼恢復找回?誤刪電腦資料恢復方法教程資料恢復
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- 資料檔案誤刪除(DM_單機)
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- 電腦誤刪影片怎麼找回
- 電腦誤刪的照片還能找回嗎?
- 怎麼找回電腦誤刪的檔案
- TSPITR方式資料庫找回誤操作丟失的資料資料庫
- 【NetApp資料恢復案例】針對NetApp誤刪除資料的恢復APP資料恢復
- 被誤刪的檔案正確處理方法,快速找回誤刪的檔案
- 刪除資料
- 誤刪除ESXi虛擬機器資料恢復虛擬機資料恢復
- LINUX下資料被誤刪除、LINUX下資料被誤格式化後資料恢復Linux資料恢復
- mac誤刪檔案怎樣快速找回?Mac
- 【儲存資料恢復案例】Netapp誤操作刪除lun的資料恢復資料恢復APP
- 【儲存資料恢復】NetApp儲存誤刪除的資料恢復案例資料恢復APP
- MySQL使用binlog2sql閃回誤刪除資料MySql
- indexedDB 刪除資料Index
- 刪除elasticsearch資料Elasticsearch
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- 【伺服器資料恢復】LINUX誤刪除、格式化的資料恢復伺服器資料恢復Linux
- 【伺服器資料恢復】NetApp儲存誤刪除的資料恢復案例伺服器資料恢復APP
- Laravel 資料庫裡的資料刪除Laravel資料庫
- 【伺服器資料恢復】LINUX誤刪除、誤格式化怎麼恢復資料?伺服器資料恢復Linux