【Control File】Oracle個別控制檔案丟失故障場景模擬及處理方法

secooler發表於2011-07-01
  控制檔案是資料庫的重要組成部分,我們需要掌握有關控制檔案在不同故障場景下的恢復方法。本文討論當部分控制檔案丟失場景下的恢復方法。

1.查詢系統控制檔案資訊
sys@ora10g> col name for a50
sys@ora10g> select name from v$controlfile;

NAME
--------------------------------------------------
/oracle/ora10gR2/oradata/ora10g/control01.ctl
/oracle/ora10gR2/oradata/ora10g/control02.ctl
/oracle/ora10gR2/oradata/ora10g/control03.ctl

本系統中存在三個控制檔案。他們內容是完全一樣。目的何在?沒錯,就是為了防止個別控制檔案丟失或出現故障時後可以使用其他有效的控制檔案進行恢復。

2.模擬個別控制檔案丟失故障場景
1)人為刪除一個控制檔案
這裡,我們刪除控制檔案control03.ctl。
ora10g@secdb /home/oracle$ rm -f /oracle/ora10gR2/oradata/ora10g/control03.ctl

在刪除的這段時間裡,alert中並沒有記錄任何與之相關的資訊。

2)嘗試使用IMMEDIATE選項關閉資料庫
sys@ora10g> shutdown immediate;
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/oracle/ora10gR2/oradata/ora10g/control03.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

可見,在正常關閉資料庫的過程中,Oracle需要讀取控制檔案內容,當發現個別控制檔案丟失後會丟擲異常。

3)此時alert中也記錄相關的報錯資訊。
Fri Jul  1 21:21:35 2011
Errors in file /oracle/ora10gR2/admin/ora10g/udump/ora10g_ora_9062.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/oracle/ora10gR2/oradata/ora10g/control03.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Fri Jul  1 21:21:35 2011
Errors in file /oracle/ora10gR2/admin/ora10g/udump/ora10g_ora_9062.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/oracle/ora10gR2/oradata/ora10g/control03.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Fri Jul  1 21:21:35 2011
Errors in file /oracle/ora10gR2/admin/ora10g/udump/ora10g_ora_9062.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/oracle/ora10gR2/oradata/ora10g/control03.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3


3.恢復個別控制檔案丟失故障場景
方法很簡單,停止資料庫,使用完好的資料庫控制檔案生成丟失或損壞的控制檔案。

1)使用ABORT選項關閉資料庫例項
按照上面的方法,使用IMMEDIATE選項是不能關閉資料庫的。
資料庫後臺程式依然活躍著。
ora10g@secdb /home/oracle$ ps -ef | grep _ora10g | grep -v grep
oracle   31646     1  0 Jun27 ?        00:00:00 ora_pmon_ora10g
oracle   31648     1  0 Jun27 ?        00:00:00 ora_psp0_ora10g
oracle   31650     1  0 Jun27 ?        00:00:00 ora_mman_ora10g
oracle   31652     1  0 Jun27 ?        00:00:03 ora_dbw0_ora10g
oracle   31654     1  0 Jun27 ?        00:00:02 ora_lgwr_ora10g
oracle   31656     1  0 Jun27 ?        00:00:32 ora_ckpt_ora10g
oracle   31658     1  0 Jun27 ?        00:00:14 ora_smon_ora10g
oracle   31660     1  0 Jun27 ?        00:00:00 ora_reco_ora10g
oracle   31662     1  0 Jun27 ?        00:00:02 ora_cjq0_ora10g
oracle   31664     1  0 Jun27 ?        00:00:14 ora_mmon_ora10g
oracle   31666     1  0 Jun27 ?        00:00:05 ora_mmnl_ora10g
oracle   31676     1  0 Jun27 ?        00:00:00 ora_arc0_ora10g
oracle   31678     1  0 Jun27 ?        00:00:00 ora_arc1_ora10g
oracle   31682     1  0 Jun27 ?        00:00:00 ora_qmnc_ora10g
oracle   31688     1  0 Jun27 ?        00:00:00 ora_q000_ora10g
oracle   31690     1  0 Jun27 ?        00:00:01 ora_q001_ora10g

我們只好使用“粗暴”的ABORT方式停止例項。
ora10g@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jul 1 21:51:27 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

sys@ora10g> shutdown abort;
ORACLE instance shut down.

2)使用完好的控制檔案生成丟失的控制檔案control03.ctl
ora10g@secdb /home/oracle$ cp /oracle/ora10gR2/oradata/ora10g/control01.ctl /oracle/ora10gR2/oradata/ora10g/control03.ctl

3)啟動資料庫
ora10g@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jul 1 21:56:10 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

NotConnected@> startup;
ORACLE instance started.

Total System Global Area  419430400 bytes
Fixed Size                  1219784 bytes
Variable Size             318767928 bytes
Database Buffers           92274688 bytes
Redo Buffers                7168000 bytes
Database mounted.
Database opened.

到此,個別控制檔案丟失或損壞的故障處理完畢。

4.小結
對於僅僅丟失或損壞部分控制檔案的場景,恢復相對簡單。
恢復代價是需要重新啟動資料庫。

Good luck.

secooler
11.07.01

-- The End --

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

相關文章