Sqlplus在歸檔全的情況下,能搞定一部份的資料檔案的恢複,但真正要做備份恢複,RMAN才是專業的。
下面列了一些資料檔案損壞情況下的恢複做法.
1. 資料表空間的資料檔案損壞,但存放盤沒壞。
2. 資料表空間單個資料檔案所在存放盤壞。
3. close狀態下,所有資料表空間資料檔案存放盤都壞了。
4. 在資料庫open狀態下,有資料檔案損壞,報ORA-00376:此時無法讀取檔案xxx
1. 資料表空間的資料檔案損壞,但存放盤沒壞。
通過恢複資料表空間即可解決問題。
以SYSTEM資料表空間為例:
run{ startup force mount; restore tablespace system; recover tablespace system; alter database open; }
2. 資料表空間單個資料檔案所在存放盤壞。
這種情況下,只能另找地方恢複和存放資料檔案了。
以SYSTEM資料表空間為例:
run{ startup force mount;set newname for datafile 1 to '/u01/app/oracle/oradata/xcldb/system01.dbf';restore datafile 1;switch datafile 1;recover datafile 1;alter database open;}
這種方法與Sqlplus採用的alter database create datafile與rename file方法差不多,
但RMAN可以處理任意(包含SYSTEM)資料表空間的資料檔案恢複。
3. close狀態下,所有資料表空間資料檔案存放盤都壞了。
run{ startup force mount;set newname for datafile 1 to '/u01/app/oracle/oradata/xcldb/system01.dbf';...... --列出要更改存放路徑並恢複的所有資料檔案restore database;switch datafile all;recover database;alter database open;}
小提醒:
這種技巧不只可用在這種情況下,在異機重新導向恢複或單一實例與RAC互轉時也有用。
4. 在資料庫open狀態下,有資料檔案損壞,報ORA-00376:此時無法讀取檔案xxx
a.磁碟沒壞,但某個資料檔案壞了。
run{ sql 'alter database datafile xxx offline';restore datafile xxx;recover datafile xxx;sql 'alter database datafile xxx online';}
b. 資料檔案所在磁碟都壞了。
參考上面,只需加上set newname與switch datafile即可。
上面幾種情況中,不管資料庫open狀態下的恢複與close狀態下,差別就是,open狀態下,在恢複前,資料檔案要設為離線狀態。
恢複後在設為線上,還有一點要注意SYSTEM這類特殊的資料表空間需在mount狀態下才能恢複。
另外,只要歸檔齊全,上面幾種情況都可以恢複。這種不需要太在意損壞前這個資料檔案有沒有做RMAN備份,日誌都可以重演出來。
MAIL: xcl_168@aliyun.com
BLOG: http://blog.csdn.net/xcl168