Oracle數據庫利用日志挖掘來恢復誤刪除的數據
在數據庫操作中,當我們誤刪除了表、數據或者是視圖等,可以利用日志挖掘Oracle不完全恢復進行恢復,本文主要就介紹了利用日志挖掘Oracle不完全恢復來恢復數據的方法,接下來我們就開始介紹這一過程。
實施該方法需要滿足兩個條件:1. DB工作在歸檔模式下; 2. 有冷準備份的數據文件。
接下來我們介紹恢復過程,格式如下:
- col script for a80
- col SQL_REDO for a80
-- 拼接從哪里挖的語句
- select 'exec dbms_logmnr.add_logfile('''||member||''')' as script from v$logfile;
-- 從哪里挖
- exec dbms_logmnr.add_logfile('/oracle/oradata/orcl_new/redo03.log');
- exec dbms_logmnr.add_logfile('/oracle/oradata/orcl_new/redo02.log');
- exec dbms_logmnr.add_logfile('/oracle/oradata/orcl_new/redo01.log');
-- 開始挖
- exec dbms_logmnr.start_logmnr;
-- 找結果 --> 要恢復的語句時的時間戳;
- select scn, sql_redo from v$logmnr_contents where sql_redo like 'drop table emp%';
- SCN SQL_REDO
- ---------- --------------------------------------------------------------------------------
- 1036547 drop table t1 purge;
- 1037333 drop table scott.emp purge;
- -- 1037333 -->要恢復的時間戳
-- 關掉DB
- shutdown abort
-- 拷貝冷備的文件 -- *.dbf 到數據文件目錄下,并進行覆蓋;因為要利用日志把 sys,user等表空間的數據,重做一次;
- [oracle@OracleWeblogic orcl_new_bk]$ cp *.dbf ../orcl_new/
-- 啟動到 mount 下
- startup mount
-- 恢復到 1037333 drop table scott.emp purge 的時間點;
-- 要求:trc
- recover database until change 1035742;
-- 啟動DB in resetlogs;
- alter database open resetlogs;
原理:
1.冷備份的數據文件 *.dbf比現在要舊,那么數據文件的scn肯定就比現在的小;
2.使用日志挖掘方法,在日志中找出刪表時的scn;
3.在數據庫shutdown 的狀態下,用冷備份的數據文件 *.dbf,覆蓋現在的*.dbf文件;-- 保證數據文件完整性
4.啟動DB到 mount 下, 恢復到日志挖掘的時間點(利用日志對數據文件重做一次)
5.以 resetlog 方式 open --- 以前的日志就覆蓋了;
PS:
數據庫有四種狀態shutdown、nomount、mount、open。
shutdown是指關閉狀態。
nomount是指根參數文件已經構造出實例的狀態。
mount是指為實例打開控制文件,并讀出控制文件中相關信息,但并不驗證。
open是指對相關文件進行驗證,如沒有問題,就打開,讓用戶可以訪問。
關于利用日志挖掘Oracle不完全恢復恢復誤刪除的表/數據/視圖等的操作就介紹到這里了,希望能夠帶給您一些收獲吧!
【編輯推薦】