利用日志挖掘 Oracle 不完全恢復 恢復誤刪除的表/數據/視圖等
1./* --------------------------
2.前題:
3. 1. DB工作在歸檔模式下;
4. 2. 有冷準備份的數據文件;
5.---------------------------*/
1.col script for a80
2.col SQL_REDO for a80 3.
4.-- 拼接從哪里挖的語句 5.select 'exec dbms_logmnr.add_logfile('''||member||''')' as script from v$logfile; 6.
7.-- 從哪里挖 8.exec dbms_logmnr.add_logfile('/Oracle/oradata/orcl_new/redo03.log'); 9.exec dbms_logmnr.add_logfile('/Oracle/oradata/orcl_new/redo02.log'); 10.exec dbms_logmnr.add_logfile('/Oracle/oradata/orcl_new/redo01.log'); 11.
12.
13.-- 開始挖 14.exec dbms_logmnr.start_logmnr; 15.
16.-- 找結果 --> 要恢復的語句時的時間戳; 17.select scn, sql_redo from v$logmnr_contents where sql_redo like 'drop table emp%'; 18.
19. SCN SQL_REDO
20.---------- -------------------------------------------------------------------------------- 21. 1036547 drop table t1 purge; 22. 1037333 drop table scott.emp purge; 23.-- 1037333 -->要恢復的時間戳 24.
25.-- 關掉DB 26.shutdown abort
27.
28.-- 拷貝冷備的文件 -- *.dbf 到數據文件目錄下,并進行覆蓋;,因為要利用日志把 sys,user等表空間的數據,重做一次; 29.[Oracle@OracleWeblogic orcl_new_bk]$ cp *.dbf ../orcl_new/
30.
31.-- 啟動到 mount 下; 32.startup mount
33.
34.-- 恢復到 1037333 drop table scott.emp purge 的時間點; 35.-- 要求:trc 36.recover database until change 1035742; 37.
38.-- 啟動DB in resetlogs; 39.alter database open resetlogs; 40.
41.
42.原理
43.1.冷備份的數據文件 *.dbf比現在要舊,那么數據文件的scn肯定就比現在的小;
44.2.使用日志挖掘方法,在日志中找出刪表時的scn;
45.3.在數據庫shutdown 的狀態下,用冷備份的數據文件 *.dbf,覆蓋現在的*.dbf文件;-- 保證數據文件完整性 46.4.啟動DB到 mount 下, 恢復到日志挖掘的時間點(利用日志對數據文件重做一次)
47.5.以 resetlog 方式 open --- 以前的日志就覆蓋了; 48.
49.PS:數據庫有四種狀態shutdown、nomount、mount、open 50.shutdown是指關閉狀態
51.nomount是指根參數文件已經構造出實例的狀態
52.mount是指為實例打開控制文件,并讀出控制文件中相關信息,但并不驗證
53.open是指對相關文件進行驗證,如沒有問題,就打開,讓用戶可以訪問
本文出自:億恩科技【www.sunshares.net】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|