非系統資料檔案損壞,rman備份恢復

張衝andy發表於2017-04-24

實驗前提:已經做好備份。

SQL>

col file_name for a50
select file_id,file_name from dba_data_files;
FILE_ID FILE_NAME
---------- --------------------------------------------------
4 /home/oracle/app/oradata/orcl/users01.dbf
2 /home/oracle/app/oradata/orcl/sysaux01.dbf
1 /home/oracle/app/oradata/orcl/system01.dbf
5 /home/oracle/app/oradata/orcl/tbtb01.dbf
6 /home/oracle/app/oradata/orcl/ogg01.dbf
7 /home/oracle/app/oradata/andy01.dbf
8 /home/oracle/app/oradata/orcl/bbb.dbf
9 /home/oracle/app/oradata/orcl/andy02.dbf
10 /home/oracle/app/oradata/orcl/andy03.dbf
11 /home/oracle/app/oradata/orcl/tts01.dbf
12 /home/oracle/app/oradata/orcl/ttsind01.dbf
FILE_ID FILE_NAME
---------- --------------------------------------------------
13 /home/oracle/app/oradata/orcl/fda01.dbf
14 /home/oracle/app/oradata/orcl/fda02.dbf
15 /home/oracle/app/oradata/orcl/undotbs02.dbf
14 rows selected.

--模擬資料檔案損壞
[oracle@11g ~]$ mv /home/oracle/app/oradata/orcl/andy02.dbf /home/oracle/app/oradata/orcl/andy02.dbf.bak 
SQL> alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 2432
Session ID: 1 Serial number: 5
-- 檢視報錯資訊
[oracle@11g trace]$ cat alert_orcl.log |grep ORA-
ORA-01116: error in opening database file 9
ORA-01110: data file 9: '/home/oracle/app/oradata/orcl/andy02.dbf'
ORA-27041: unable to open file
ORA-63999: data file suffered media failure

SQL> startup mount;
SQL> set lin 400
SQL> col error for a40
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ---------------------------------------- ---------- ---------
9 ONLINE ONLINE FILE NOT FOUND 0

--利用備份恢復
(如果資料檔案損壞,發現及時,資料庫沒有當機,則立刻offline對應檔案,避免當機。如果已經當機,則可跳過offline)
RMAN> sql 'alter database datafile 9 offline'; 
RMAN> restore datafile 9;
RMAN> recover datafile 9;
RMAN> sql 'alter database datafile 9 online';
RMAN> alter database open;
database opened

補充:
在11.2.0.2之前,如果資料庫執行在歸檔模式下,並且寫錯誤發生在非SYSTEM表空間檔案,則資料庫會將發生錯誤的檔案離線,在從11.2.0.2開始,資料庫會Crash例項以替代Offline。注意:在非歸檔模式下或者SYSTEM遭受錯誤時,資料庫會直接崩潰。
如果我們不想嘗試這個新特性,可以透過將 _DATAFILE_WRITE_ERRORS_CRASH_INSTANCE 設定為FALSE來遮蔽該行為。
該引數是一個動態引數: alter system set "_datafile_write_errors_crash_instance"=false;

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

相關文章