1、首先,关闭数据库,然后备份所有的数据文件,注意,包括:system表空间的文件,用户表空间的文件、undo表空间的文件。
2、登录数据库,然后,创建一个表data01,并插入数据,提交,创建表data02、data03,并插入数据,提交,同时归档当前日志。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1068937216 bytes
Fixed Size 2182592 bytes
Variable Size 675283520 bytes
Database Buffers 385875968 bytes
Redo Buffers 5595136 bytes
数据库装载完毕。
数据库已经打开。
SQL> create table data01(v int) tablespace data01;
表已创建。
SQL> insert into data01 values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> create table data02 tablespace data01 as select * from dba_objects;
表已创建。
SQL> insert into data02 select * from dba_objects;
已创建12644行。
SQL> alter system switch logfile;
系统已更改。
SQL> create table data03 tablespace data01 as select * from dba_objects where 1=0;
表已创建。
SQL> insert into data03 select * from dba_objects;
已创建12645行。
SQL> alter system archive log current;
系统已更改。
SQL> commit;
提交完成。
SQL> alter system archive log current;
系统已更改。
3、关闭系统,删除存放data01、data02、data03数据的data01文件:
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
4、启动到mount,发现文件4,也就是data01文件是需要恢复的:
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1068937216 bytes
Fixed Size 2182592 bytes
Variable Size 675283520 bytes
Database Buffers 385875968 bytes
Redo Buffers 5595136 bytes
数据库装载完毕。
SQL> select file#,error from v$recover_file;
FILE# ERROR
---------- -----------------------------------------------------------------
4 FILE NOT FOUND
5、把所有的数据文件复制到指定的目录,注意,不仅是data01文件,还有其他所有的文件。
6、进行基于cancel的恢复,并用resetlogs选项来打开数据库:
SQL> recover database until cancel
ORA-00279: 更改 232570 (在 03/10/2014 21:03:03 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000015_0841612121.0001
ORA-00280: 更改 232570 (用于线程 1) 在序列 #15 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 232764 (在 03/11/2014 18:51:17 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000016_0841612121.0001
ORA-00280: 更改 232764 (用于线程 1) 在序列 #16 中
ORA-00278: 此恢复不再需要日志文件
'D:\DEMO\ARCHIVE3\ARC0000000015_0841612121.0001'
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 233240 (在 03/11/2014 19:36:19 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000017_0841612121.0001
ORA-00280: 更改 233240 (用于线程 1) 在序列 #17 中
ORA-00278: 此恢复不再需要日志文件
'D:\DEMO\ARCHIVE3\ARC0000000016_0841612121.0001'
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 233352 (在 03/11/2014 19:37:30 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000018_0841612121.0001
ORA-00280: 更改 233352 (用于线程 1) 在序列 #18 中
ORA-00278: 此恢复不再需要日志文件
'D:\DEMO\ARCHIVE3\ARC0000000017_0841612121.0001'
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00308: cannot open archived log
'D:\DEMO\ARCHIVE3\ARC0000000018_0841612121.0001'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> recover database until cancel
ORA-00279: 更改 233352 (在 03/11/2014 19:37:30 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000018_0841612121.0001
ORA-00280: 更改 233352 (用于线程 1) 在序列 #18 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;
7、测试发现data01、data02、data03都已经恢复,跳过了日志序号为18的归档日志,这个序号为18的归档日志是在归档了data03表的操作之后,也就是归档了序号日志为17后,再次归档的日志,也就是序号为18的归档日志,所以这3个表才都恢复了:
SQL> select * from data01;
V
----------
1
SQL> select count(*) from data02;
COUNT(*)
----------
25288
SQL> select count(*) from data03;
COUNT(*)
----------
0
日志序号已重置为1,resetlogs的意思就是重置日志:
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 d:\demo\archive3
最早的联机日志序列 1
下一个存档日志序列 1
当前日志序列 1
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\DEMO\SYSTEM01.DBF
D:\DEMO\SYSAUX01.DBF
D:\DEMO\UNDOTBS1.DBF
D:\DEMO\DATA01.DBF
SQL> alter database begin backup;
数据库已更改。
SQL> host copy d:\demo\system01.dbf d:\demo\backup1\system01.dbf;
已复制 1 个文件。
SQL> host copy d:\demo\sysaux01.dbf d:\demo\backup1\sysaux01.dbf;
已复制 1 个文件。
SQL> host copy d:\demo\undotbs01.dbf d:\demo\backup1\undotbs01.dbf;
系统找不到指定的文件。
SQL> host copy d:\demo\undotbs1.dbf d:\demo\backup1\undotbs1.dbf;
已复制 1 个文件。
SQL> host copy d:\demo\data01.dbf d:\demo\backup1\data01.dbf;
已复制 1 个文件。
SQL> alter database end backup;
数据库已更改。
SQL> alter database backup controlfile to 'd:\demo\backup1\orcl.ctl' reuse;
数据库已更改。
SQL> alter system archive log current;
系统已更改。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/653220/viewspace-1982377/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/653220/viewspace-1982377/