在open状态下恢复未备份的数据文件

        此文讲述如何恢复未备份的数据文件,在归档日志模式,如果dba增加了新的数据文件,当没有备份新的数据文件,那么该文件出现损坏时,可以恢复该数据文件。前提是 从建立新的数据文件到丢失为止的所有归档日志必须全部存在。

一 模拟实验环境。在数据文件test 里建立t1表 并插入数据,提交,归档日志文件。

SQL> create table t(num number) tablespace test;

表已创建。

SQL> insert into t values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into t values(2);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into t values(3);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into t values(4);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

模拟数据文件丢失。
SQL> host del f:\lib\test.dbf

SQL> shutdown immediate
数据库已经关闭。

已经卸载数据库。
ORACLE 例程已经关闭。

二   实施恢复。

 

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             130024340 bytes                                      
Database Buffers          398458880 bytes                                      
Redo Buffers                5844992 bytes                                      
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'F:\LIB\TEST.DBF'

2)使数据文件脱机。
SQL> alter database datafile 6 offline;

数据库已更改。

3)打开数据库。

SQL> alter database open;

数据库已更改。

4)重建数据文件,在执行恢复命令之前,首先需要复制数据文件的备份,但该文件没有备份,所以只能用alter database create datafile命令重建数据文件。

SQL> alter database create datafile 'f:\lib\test.dbf';

数据库已更改。

5)恢复数据文件。

SQL> recover  datafile 'f:\lib\test.dbf';--也可以用recover  datafile 6;
ORA-00279: 更改 2325010 (在 05/09/2010 21:06:57 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\APP\YANG\ARCHIVE2\53_1_715961434.LOG
ORA-00280: 更改 2325010 (用于线程 1) 在序列 #53 中


指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 2326948 (在 05/09/2010 21:27:02 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\APP\YANG\ARCHIVE2\54_1_715961434.LOG
ORA-00280: 更改 2326948 (用于线程 1) 在序列 #54 中


ORA-00279: 更改 2328241 (在 05/09/2010 21:40:37 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\APP\YANG\ARCHIVE2\55_1_715961434.LOG
ORA-00280: 更改 2328241 (用于线程 1) 在序列 #55 中


ORA-00279: 更改 2329131 (在 05/09/2010 21:48:01 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\APP\YANG\ARCHIVE2\56_1_715961434.LOG
ORA-00280: 更改 2329131 (用于线程 1) 在序列 #56 中


已应用的日志。
完成介质恢复。---意味着恢复成功了

最后,验证一下。

SQL> alter database datafile 6 online;

数据库已更改。

SQL> select * from t;

       NUM                                                                     
----------                                                                     
         1                                                                     
         2                                                                     
         3                                                                     
         4
                                                                     

恢复成功,,,,

需要注意的是 此情况只适用于归档模式。

上一篇:Rainbond部署Mysql主从集群应用说明


下一篇:Rainbond集群安装和运维原理解读