使用Logmnr恢復誤刪的資料
1. 確認測試表T1當前的記錄數
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
會話已更改。
SQL> select count(*) from t1;
COUNT(*)
----------
22
2. 測試delete操作,並記錄前後時間戳
(實戰中,為了儘可能準確定位資料,也需要儘可能準確的獲取時間戳)
SQL> select sysdate from dual;
SYSDATE
-------------------
2008-09-22 11:32:25
SQL> delete from t1 where rownum<11;
已刪除10行。
SQL> commit;
提交完成。
SQL> select count(*) from t1;
COUNT(*)
----------
12
SQL> select sysdate from dual;
SYSDATE
-------------------
2008-09-22 11:32:45
3. 歸檔當前delete操作的線上日誌
SQL> alter system switch logfile;
系統已更改。
SQL> alter system switch logfile;
系統已更改。
SQL> alter system switch logfile;
系統已更改。
4. 根據獲得的時間戳,定位archive日誌檔案
SQL> col name for a55
SQL> select name, first_time, next_time from v$archived_log;
NAME FIRST_TIME NEXT_TIME
------------------------------------------------------- ------------------- -------------------
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00002_0666095554.001 2008-09-22 10:33:16 2008-09-22 11:05:04
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00003_0666095554.001 2008-09-22 11:05:04 2008-09-22 11:05:05
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00004_0666095554.001 2008-09-22 11:05:05 2008-09-22 11:05:07
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00005_0666095554.001 2008-09-22 11:05:07 2008-09-22 11:05:45
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00006_0666095554.001 2008-09-22 11:05:45 2008-09-22 11:05:52
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00007_0666095554.001 2008-09-22 11:05:52 2008-09-22 11:06:03
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00008_0666095554.001 2008-09-22 11:06:03 2008-09-22 11:28:50
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00009_0666095554.001 2008-09-22 11:28:50 2008-09-22 11:28:52
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00010_0666095554.001 2008-09-22 11:28:52 2008-09-22 11:28:56
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00011_0666095554.001 2008-09-22 11:28:56 2008-09-22 11:29:32
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00012_0666095554.001 2008-09-22 11:29:32 2008-09-22 11:29:37
NAME FIRST_TIME NEXT_TIME
------------------------------------------------------- ------------------- -------------------
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00013_0666095554.001 2008-09-22 11:29:37 2008-09-22 11:29:43
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00014_0666095554.001 2008-09-22 11:29:43 2008-09-22 11:33:14
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00015_0666095554.001 2008-09-22 11:33:14 2008-09-22 11:33:15
D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00016_0666095554.001 2008-09-22 11:33:15 2008-09-22 11:33:19
已選擇15行。
5. 新增待分析歸檔日誌,多個檔案可多次新增
SQL> exec sys.dbms_logmnr.add_logfile(LogFileName=>'D:/ORACLE/ORADATA/ALEX/ARCHIVE/ARC00014_0666095554.001');
PL/SQL 過程已成功完成。
6. 開始分析歸檔日誌
SQL> exec sys.dbms_logmnr.start_logmnr(Options => sys.dbms_logmnr.dict_from_online_catalog);
PL/SQL 過程已成功完成。
7. 抓取待恢復的資訊到臨時表
SQL> create table tmp_logmnr as
2 select operation,sql_redo,sql_undo from v$logmnr_contents
3 where seg_name='T1' and operation='DELETE'
4 and timestamp between to_date('2008-09-22 11:32:25','yyyy-mm-dd hh24:mi:ss')
5 and to_date('2008-09-22 11:32:45','yyyy-mm-dd hh24:mi:ss');
表已建立。
SQL> select count(*) from tmp_logmnr;
COUNT(*)
----------
10
8. 結束歸檔日誌分析操作
SQL> exec sys.dbms_logmnr.end_logmnr
PL/SQL 過程已成功完成。
9. 開始恢復誤刪資料
SQL> declare
2 mysql varchar2(4000);
3 num number := 0;
4 begin
5 for c_tmp in (select sql_undo from tmp_logmnr where operation = 'DELETE') loop
6 mysql := replace(c_tmp.sql_undo, ';', '');
7 execute immediate mysql;
8 num := num + 1;
9 if mod(num, 1000) = 0 then
10 commit;
11 end if;
12 end loop;
13 commit;
14 exception
15 when others then
16 null;
17 end;
18 /
PL/SQL 過程已成功完成。
10. 確認已恢復成功
SQL> select count(*) from t1;
COUNT(*)
----------
22
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7319461/viewspace-1010908/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle恢復誤刪資料Oracle
- mysql誤刪資料恢復MySql資料恢復
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 【NetApp資料恢復案例】針對NetApp誤刪除資料的恢復APP資料恢復
- Mongodb資料庫誤刪後的恢復MongoDB資料庫
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 磁碟誤刪卷資料恢復工具資料恢復
- Mysql 誤刪資料進行恢復MySql
- 【儲存資料恢復案例】Netapp誤操作刪除lun的資料恢復資料恢復APP
- 【儲存資料恢復】NetApp儲存誤刪除的資料恢復案例資料恢復APP
- 【儲存資料恢復】NetApp儲存誤刪資料夾的資料恢復案例資料恢復APP
- Sybase SQL Anywhere(ASA)資料庫恢復,ASA資料恢復,資料誤刪除恢復工具ReadASADBSQL資料庫資料恢復
- 【伺服器資料恢復】LINUX誤刪除、格式化的資料恢復伺服器資料恢復Linux
- 【伺服器資料恢復】NetApp儲存誤刪除的資料恢復案例伺服器資料恢復APP
- 【伺服器資料恢復】LINUX誤刪除、誤格式化怎麼恢復資料?伺服器資料恢復Linux
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- 【儲存資料恢復】HP EVA儲存誤刪除VDISK的資料恢復案例資料恢復
- 【伺服器資料恢復】EMC Unity儲存誤刪除的資料恢復案例伺服器資料恢復Unity
- 【伺服器資料恢復】EMC Isilon儲存誤刪除的資料恢復案例伺服器資料恢復
- 伺服器資料恢復-LINUX誤刪除/格式化資料的資料恢復方案伺服器資料恢復Linux
- 電腦檔案誤刪除了怎麼恢復找回?誤刪電腦資料恢復方法教程資料恢復
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- 誤刪除資料了怎麼辦?小編交易誤刪除資料的恢復方法
- 【伺服器資料恢復】伺服器誤刪除lun如何恢復資料?伺服器資料恢復
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- 伺服器資料恢復—NTFS誤操作刪除/格式化的資料恢復案例伺服器資料恢復
- 【資料庫資料恢復】HP-UX系統ORACLE資料庫被誤刪除的資料恢復資料庫資料恢復UXOracle
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- 超極本碟符誤刪的資料恢復方法資料恢復
- 伺服器資料恢復—EMC儲存資料卷被誤刪除如何恢復資料?伺服器資料恢復
- 【伺服器資料恢復】伺服器誤刪除卷怎麼恢復資料伺服器資料恢復
- 【虛擬化資料恢復】KVM虛擬機器誤刪除資料恢復案例資料恢復虛擬機
- 【北亞資料恢復】zfs檔案系統的伺服器誤刪除的資料恢復資料恢復伺服器
- 誤刪除ESXi虛擬機器資料恢復虛擬機資料恢復
- 【伺服器資料恢復】AIX環境下誤刪除邏輯卷的資料恢復方案伺服器資料恢復AI
- 【虛擬機器資料恢復】VMware ESXi誤刪除虛擬機器的資料恢復案例虛擬機資料恢復