控制檔案損壞重建實驗(上)
控制檔案(Control File)是Oracle執行和工作的心臟。在Oracle執行過程中,需要實時藉助控制檔案來記錄、響應關鍵資訊。在控制檔案中,Oracle儲存了包括資料和日誌檔名稱位置、備份後設資料資訊、系統SCN資訊。
鑑於控制檔案的重要性,Oracle也採用最重要的保護級別,如線上多路冗餘、自動備份功能。應該說,在合理規劃、配置的情況下,online control file出現故障不可恢復的場景,應該說是很少的。
本篇目的在於實驗如何在控制檔案損壞,利用trace檔案格式備份恢復資料庫。中間的操作步驟權當記錄。
1、實驗故障環境準備
我們選擇10gR2進行實驗,系統處於歸檔模式下,相關引數正常。
SQL> select name from v$database;
NAME
---------
ORA10GL
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/ORA10GL/controlfile/o1_mf_8brvwzwc_.ctl, /u01/app/oracle/flash_recovery_area/ORA10GL/controlfile/o1_mf_8brvx088_.ctl
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 5
Next log sequence to archive 7
Current log sequence 7
SQL>
此處注意控制檔案引數control_files,這個引數是配置在spfile/pfile中。在nomount階段,Oracle首先會讀取引數檔案(spfile/pfile),用於建立後臺例項,讀取的control_files引數就是定位mount階段時候控制檔案的依據。控制檔案完整性對於mount階段很重要,mount需要定位的資料檔案、日誌檔案資訊都是寫在控制檔案中的。同時,在open的階段,控制檔案中的SCN一致性資訊,是進行完整性檢查和例項恢復(Instance Recovery)的依據。
我們首先準備出一份備份控制檔案,主要透過backup to trace的方法。
SQL> show parameter dump
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string /u01/app/oracle/admin/ora10gl/bdump
core_dump_dest string /u01/app/oracle/admin/ora10gl/cdump
max_dump_file_size string UNLIMITED
shadow_core_dump string partial
user_dump_dest string /u01/app/oracle/admin/ora10gl/udump
SQL> alter database backup controlfile to trace;
Database altered
我們可以在user_dump_dest中找到生成的trace檔案。
[oracle@bspdev udump]$ pwd
/u01/app/oracle/admin/ora10gl/udump
[oracle@bspdev udump]$ ls -l
total 8
-rw-r----- 1 oracle oinstall 7802 Feb 20 14:38 ora10gl_ora_2691.trc
在文字化的trace檔案中,我們可以找到Oracle替我們生成的恢復trace檔案語句和建議步驟。
篇幅原因,就不一一將其中內容羅列在本文中。control file跟蹤檔案備份中可以分為兩個部分,NORESETLOG和RESETLOG模式。兩者區別就在於是否擷取online日誌。在每個部分,都包括了建立control file的語句和恢復步驟,非常完全。
下面我們關閉資料庫,注意:要實現完全關閉,不能是abort方式。之後破壞控制檔案。
--關閉資料庫
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
--破壞處理
[oracle@bspdev udump]$ cd /u01/app/oracle/oradata/ORA10GL/controlfile/
[oracle@bspdev controlfile]$ ls -l
total 6908
-rw-r----- 1 oracle oinstall 7061504 Feb 20 14:47 o1_mf_8brvwzwc_.ctl
[oracle@bspdev controlfile]$ mv o1_mf_8brvwzwc_.ctl o1_mf_8brvwzwc_.ctl.bk
[oracle@bspdev controlfile]$ cd /u01/app/oracle/flash_recovery_area/ORA10GL/controlfile/
[oracle@bspdev controlfile]$ ls -l
total 6908
-rw-r----- 1 oracle oinstall 7061504 Feb 20 14:47 o1_mf_8brvx088_.ctl
[oracle@bspdev controlfile]$ mv o1_mf_8brvx088_.ctl o1_mf_8brvx088_.ctl.bk
注意,原有資料庫的control file管理方式是OMF外加OFA。兩個控制檔案互為冗餘備份,一個在OFA目錄,另一個recovery area中。
2、恢復控制檔案過程
我們首先啟動資料庫到nomount狀態。
SQL> startup nomount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 109053520 bytes
Database Buffers 171966464 bytes
Redo Buffers 2973696 bytes
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/ORA10G
L/controlfile/o1_mf_8brvwzwc_.
ctl, /u01/app/oracle/flash_rec
overy_area/ORA10GL/controlfile
/o1_mf_8brvx088_.ctl
成功的進入nomount狀態,control_files正式配置。
注意:如果是使用OMF方式的控制檔案,也就是Oracle來負責檔案的命名。我們是不能直接進行create control file的語句執行的。所以,解決方法是在nomount階段修改control_files引數到一個合理的取值。
如果不是OMF方式,就可以進行下一步建立control file了。
SQL> alter system set control_files='/u01/app/oracle/oradata/ORA10GL/controlfile/control01.ctl' scope=spfile;
System altered.
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 109053520 bytes
Database Buffers 171966464 bytes
Redo Buffers 2973696 bytes
SQL> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /u01/app/oracle/oradata/ORA10G
L/controlfile/control01.ctl
下面建立control file。
SQL> CREATE CONTROLFILE REUSE DATABASE "ORA10GL" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 (
9 '/u01/app/oracle/oradata/ORA10GL/onlinelog/o1_mf_1_8brvx1mo_.log',
10 '/u01/app/oracle/flash_recovery_area/ORA10GL/onlinelog/o1_mf_1_8brvx3s1_.log'
11 ) SIZE 50M,
12 GROUP 2 (
13 '/u01/app/oracle/oradata/ORA10GL/onlinelog/o1_mf_2_8brvx94v_.log',
14 '/u01/app/oracle/flash_recovery_area/ORA10GL/onlinelog/o1_mf_2_8brvxc8g_.log'
15 ) SIZE 50M,
16 GROUP 3 (
17 '/u01/app/oracle/oradata/ORA10GL/onlinelog/o1_mf_3_8brvxfk5_.log',
18 '/u01/app/oracle/flash_recovery_area/ORA10GL/onlinelog/o1_mf_3_8brvxhkc_.log'
19 ) SIZE 50M
20 -- STANDBY LOGFILE
21 DATAFILE
22 '/u01/app/oracle/oradata/ORA10GL/datafile/o1_mf_system_8brvr0gf_.dbf',
23 '/u01/app/oracle/oradata/ORA10GL/datafile/o1_mf_undotbs1_8brvr10h_.dbf',
24 '/u01/app/oracle/oradata/ORA10GL/datafile/o1_mf_sysaux_8brvr0j3_.dbf',
25 '/u01/app/oracle/oradata/ORA10GL/datafile/o1_mf_users_8brvr12n_.dbf'
26 CHARACTER SET AL32UTF8
27 ;
Control file created.
注意上面程式碼,裡面沒有Temp檔案和表空間的資訊。之後按照控制檔案的提示選擇適當的語句執行。
SQL> VARIABLE RECNO NUMBER;
SQL> EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');
PL/SQL procedure successfully completed.
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-00264: no recovery required
SQL> alter system archive log all;
System altered.
SQL> alter database open;
Database altered.
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/ORA10GL/datafile/o1_mf_temp_8brvy20c_.tmp'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
Tablespace altered.
恢復結束。
3、驗證恢復和潛在問題
成功open資料庫之後,我們需要驗證結果。
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 6
Next log sequence to archive 8
Current log sequence 8
歸檔狀態正常。控制檔案一個重要作用就是儲存備份集資訊,之前資料庫中有備份集,我們檢視一下。
RMAN> list backup;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1 Full 7.11M DISK 00:00:07 20-FEB-13
BP Key: 1 Status: AVAILABLE Compressed: NO Tag: TAG20130220T150218
Piece Name: /u01/app/oracle/flash_recovery_area/ORA10GL/autobackup/2013_02_20/o1_mf_s_807894138_8l8x7y1j_.bkp
Control File Included: Ckp SCN: 545929 Ckp time: 20-FEB-13
SPFILE Included: Modification time: 20-FEB-13
有一份備份集合,但是並不是我們所說的control file恢復之前的備份集。而是open資料庫之後,我們重建Temp檔案資訊之後,由於設定了autobackup策略產生的備份。
那麼,檔案系統中還有這些集合。
[oracle@bspdev backupset]$ cd 2012_11_22/
[oracle@bspdev 2012_11_22]$ ls -l
total 575008
-rw-r----- 1 oracle oinstall 30759936 Nov 22 08:29 o1_mf_annnn_TAG20121122T082929_8btwhbsx_.bkp
-rw-r----- 1 oracle oinstall 4096 Nov 22 08:30 o1_mf_annnn_TAG20121122T083020_8btwjxb0_.bkp
-rw-r----- 1 oracle oinstall 557457408 Nov 22 08:30 o1_mf_nnndf_TAG20121122T082934_8btwhgn2_.bkp
我們的方法雖然可以恢復控制檔案,但是會丟失備份資料資訊。那麼,我們如何在re-create控制檔案的時候還能儲存住備份資訊呢?在下篇,我們繼續討論介紹。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-754393/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 控制檔案損壞重建實驗(下)
- 一個控制檔案損壞
- 陣列櫃故障造成控制檔案損壞,資料檔案損壞陣列
- 備份與恢復--重建控制檔案後資料檔案損壞的恢復
- 控制檔案備份增加、破壞恢復系列實驗(上)
- Oracle 控制檔案損壞解決方案Oracle
- 損壞控制檔案的恢復方法
- 恢復之單個控制檔案損壞
- 單個控制檔案損壞的恢復
- 重建控制檔案
- 重建控制檔案--
- undo 檔案損壞
- 控制檔案損壞,丟失其中一個
- 某個控制檔案損壞的恢復案例
- 單個控制檔案損壞的解決方法
- 一次控制檔案損壞的恢復
- Oracle重建控制檔案Oracle
- DataGuard重建控制檔案
- oracle 重建控制檔案Oracle
- 備份&恢復之十三:損壞全部控制檔案
- 所有控制檔案損壞的恢復--resetlogs方式
- 所有控制檔案損壞的恢復--noresetlogs方式
- Online Redo Log損壞處理實驗(上)
- 控制檔案損壞恢復(20100402)
- 備份&恢復之十二:損壞單個控制檔案
- Oracle 控制檔案的重建Oracle
- 利用trace重建控制檔案
- 控制檔案備份增加、破壞恢復系列實驗(下)
- 一次控制檔案損壞後的恢復經歷
- rman執行與控制檔案損壞_loss_小測試
- 如何重建RAC的控制檔案
- RAC環境重建控制檔案
- ORACLE控制檔案的重建 (轉)Oracle
- 控制檔案重建以及備份
- 物理DG從庫損壞後的重建
- undo檔案丟失或損壞
- 資料檔案損壞、丟失
- 【RMAN】如果控制檔案損壞那麼如何恢復?恢復控制檔案的方式有哪幾種?