手工恢復(非歸檔模式)
案例一:歷史日誌沒有被覆蓋
1.首先把數據庫切成非歸檔模式:
startup mountforce
alter database noarchivelog;
alter database open;
再次查看數據庫模式
sys@SIQIAN11>archive log list
Database log mode No Archive Mode
Automaticarchival Disabled
Archivedestination /backup/arch
Oldest online log sequence 15
Current log sequence 17
2.冷備
3.查看當前日誌信息
sys@SIQIAN11>select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
-------------------- --- ----------------
1 19 NO CURRENT
2 17 NO INACTIVE
3 18 NO INACTIVE
4.用test用戶登錄建表插入數據
test@SIQIAN11>create table t01(id int) tablespace test;
test@SIQIAN11>begin
2 for i in 1..10
3 loop
4 insert into t01 values(i);
5 end loop;
6 end;
7 /
commit;
再次查看當前日誌
sys@SIQIAN11>select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ------------- ----------------
1 19 NO CURRENT
2 17 NO INACTIVE
3 18 NO INACTIVE
說明這次變化記錄在了第1組日誌中,此時日誌沒有被覆蓋。
5.關庫刪除數據文件
shutdown abort
[oracle@siqian siqian11g]$ rm -f /u01/oradata/siqian11g/test01.dbf
6.起庫並查看要恢復的數據文件
startup
出錯:
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/oradata/siqian11g/test01.dbf'
查看要恢復的數據文件
sys@SIQIAN11>select file#,error from v$recover_file;
FILE# ERROR
---------- -----------------------------------------------------------------
1 UNKNOWNERROR
2 UNKNOWNERROR
3 UNKNOWNERROR
4 UNKNOWNERROR
5 UNKNOWNERROR
6 FILE NOT FOUND
6 rows selected.
7.還原數據文件並做恢復
[oracle@siqian siqian11g]$ cp /backup/cold/test01.dbf /u01/oradata/siqian11g/
sys@SIQIAN11>recover datafile 6;
Media recoverycomplete.
sys@SIQIAN11>alter database open;
8.驗證
sys@SIQIAN11>select * from test.t01;
ID
----------
1
2
3
4
5
6
7
8
9
10
10 rows selected.
案例二:日誌發生切換,歷史日誌被覆蓋(只能作不完全恢復)
承接上面的例子,這次做完一些操作後切日誌使其切換。
模擬環境:
1.test用戶登錄再在t01表中插入若干數據
test@SIQIAN11>begin
2 for i in 11..20
3 loop
4 insert into t01 values(i);
5 end loop;
6 end;
7 /
PL/SQL procedure successfully completed.
commit;
2.查看當前日誌信息
sys@SIQIAN11>select group#,sequence#,archived,first_change# from v$log;
GROUP# SEQUENCE# ARC FIRST_CHANGE#
-------------------- --- -------------
1 19 NO 2200111
2 20 NO 2225498
3 18 NO 2179197
也就是說剛纔的變化記錄在了第1組中
3.切換日誌,使其被覆蓋
alter system switch logfile;
多切幾次然後再次查看:
sys@SIQIAN11>select group#,sequence#,archived,first_change# from v$log;
GROUP# SEQUENCE# ARC FIRST_CHANGE#
---------- ------------- -------------
1 22 NO 2226207
2 23 NO 2226211
3 21 NO 2226205
現在序列19已經被覆蓋。
而且t01表中有20條記錄。
4.關庫刪除相應的數據文件
shutdown abort
[oracle@siqian siqian11g]$ rm -f /u01/oradata/siqian11g/test01.dbf
5.起庫並查看要恢復的數據文件
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/oradata/siqian11g/test01.dbf'
sys@SIQIAN11>select file#,error from v$recover_file;
FILE# ERROR
---------------------------------------------------------------------------
1 UNKNOWN ERROR
2 UNKNOWN ERROR
3 UNKNOWN ERROR
4 UNKNOWN ERROR
5 UNKNOWN ERROR
6 FILE NOT FOUND
6 rows selected.
6.還原數據文件並恢復
[oracle@siqian siqian11g]$ cp /backup/cold/test01.dbf /u01/oradata/siqian11g/
sys@SIQIAN11>recover datafile 6;
ORA-00279: change 2201687 generated at 06/29/2013 18:36:58 needed for thread 1
ORA-00289: suggestion : /backup/arch/arch_1_819372290_19.log
ORA-00280: change 2201687 for thread 1 is in sequence #19
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log '/backup/arch/arch_1_819372290_19.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
ORA-00308: cannot open archived log '/backup/arch/arch_1_819372290_19.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
因爲序列19的日誌沒有被歸檔,所以在恢復時會報錯。所以只能做不完全恢復。
7.還原所有控制文件和數據文件來做不完全恢復
[oracle@siqian siqian11g]$ cp /backup/cold/ *.ctl /u01/oradata/siqian11g/
[oracle@siqian siqian11g]$ cp /backup/cold/ *.dbf /u01/oradata/siqian11g/
8.把庫起到Mount並查看數據文件頭和控制文件頭的SCN信息
startup mount force
查看SCN
sys@SIQIAN11>select file#,checkpoint_change# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
----------------------------
1 2201687
2 2201687
3 2201687
4 2201687
5 2201687
6 2201687
6 rows selected.
sys@SIQIAN11>select file#,checkpoint_change# from v$datafile;
FILE# CHECKPOINT_CHANGE#
----------------------------
1 2201687
2 2201687
3 2201687
4 2201687
5 2201687
6 2201687
6 rows selected.
但redo裏的SCN和數據文件、控制文件裏的SCN是不同步的,所以現在開庫會出問題
alter database open;
ERROR at line 1:
ORA-00338: log 1 of thread 1 is more recent than control file
ORA-00312: online log 1 thread 1: '/u01/oradata/siqian11g/redo01.log'
7.對整個數據庫做不完全恢復
recover database untilcancel;
8.以resetlogs方式打開數據庫
alter database open resetlogs;
9.驗證
select * from test.t01;
發現只有10條記錄。
10.冷備
因爲數據庫是以resetlogs方式打開的,所以此時最好做一個數據庫全備。