Oracle手工恢复案例(非归档模式)
案例一:历史日志没有被覆盖
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
---------------------------------------------------------------------------