天天看點

在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);

SQL> insert into t values(3);

SQL> insert into t values(4);

模拟資料檔案丢失。

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                                                                     

恢複成功,,,,

需要注意的是 此情況隻适用于歸檔模式。