在open狀態下恢復丟失的資料檔案

楊奇龍發表於2010-05-11

    在open狀態下恢復丟失的資料檔案,這個實驗比較簡單,要注意資料庫必須1)資料庫必須是歸檔狀態2)資料庫在資料檔案丟失前做過全備份 。次實驗模擬test.dbf 意外丟失。

一 實驗前的準備。建立一個名為yang的表,插入資料,並提交。歸檔日誌。

SQL> conn system/yang as sysdba
已連線。
SQL> create table yang (num number) tablespace test;

表已建立。

SQL> insert into yang values(1);

已建立 1 行。

SQL> insert into yang values(2);

已建立 1 行。

SQL> insert into yang values(3);

已建立 1 行。

SQL> commit;

提交完成。
SQL> alter system switch logfile;

系統已更改。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。

二  用os 命令刪除 test.dbf

--刪除test.dbf

三 重新啟動,發現啟動失敗,恢復資料庫。
SQL> startup
Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             138412948 bytes                                      
Database Buffers          390070272 bytes                                      
Redo Buffers                5844992 bytes                                      
資料庫裝載完畢。
ORA-01157: 無法標識/鎖定資料檔案 6 - 請參閱 DBWR 跟蹤檔案
ORA-01110: 資料檔案 6: 'F:\LIB\TEST.DBF'

1)確定資料庫的狀態,確認損壞的資料檔案,此步可省略。因為從錯誤提示可以看出哪個資料檔案壞了。
SQL> select status from v$instance;

STATUS                                                                         
------------                                                                   
MOUNTED        

SQL> select file#,error from v$recover_file;

     FILE# ERROR                                                               
---------- -----------------------------------------------------------------   
         6 FILE NOT FOUND
                                                      

 

2)使檔案離線。為了恢復出現介質失敗的資料檔案,必須確保該檔案為離線。透過v$DATAFILE ,可以取得檔案的狀態。如果出於online的狀態時,務必將其離線。
SQL> alter database datafile 6 offline;

資料庫已更改。

3)複製資料檔案備份。

SQL> host copy f:\backup\test.dbf f:\lib

4)恢復表空間或資料檔案。

SQL> recover datafile 6;
指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 2282417 (在 05/08/2010 22:53:52 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:\APP\YANG\ARCHIVE2\52_1_715961434.LOG
ORA-00280: 更改 2282417 (用於執行緒 1) 在序列 #52 中

5)詩檔案聯機。
SQL> alter database datafile 6 online;

資料庫已更改。

SQL> alter database open;

資料庫已更改。

6)檢查資料恢復情況。

SQL> select * from scott.yang;

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

從查詢可得 資料恢復成功。

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

相關文章