在open狀態下恢復未備份的資料檔案

楊奇龍發表於2010-05-11

        此文講述如何恢復未備份的資料檔案,在歸檔日誌模式,如果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
                                                                     

恢復成功,,,,

需要注意的是 此情況只適用於歸檔模式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-662459/,如需轉載,請註明出處,否則將追究法律責任。

相關文章