日期:2014-05-16  浏览次数:20623 次

【ORACLE备份与恢复】用户管理的:基于取消的数据库不完全恢复

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