此文講述如何恢複未備份的資料檔案,在歸檔日志模式,如果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
恢複成功,,,,
需要注意的是 此情況隻适用于歸檔模式。