控制檔案損壞重建實驗(上)
控制檔案(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
- Controlfile 重建控制檔案 noresetlogs, resetlogs..
- 【RMAN】如果控制檔案損壞那麼如何恢復?恢復控制檔案的方式有哪幾種?
- oracle控制檔案的損壞或完全丟失的恢復辦法Oracle
- linux檔案系統損壞如何修復Linux
- system資料檔案頭損壞修復
- InterBase資料庫檔案損壞的修復方法資料庫
- oracle快速拿到重建控制檔案語句的方法二Oracle
- u盤檔案損壞怎麼恢復資料 u盤恢復損壞資料的有效方法
- Oracle 無備份情況下undo檔案損壞處理Oracle
- 修復損壞的gzip壓縮檔案之原理篇
- win10引導記錄損壞怎麼辦 win10引導二進位制檔案損壞Win10
- SQL Anywhere db檔案損壞修復 DB檔案修復 DB資料庫修復SQL資料庫
- 記一次Oracle RAC for aix 儲存雙控鎖盤導致ASM控制檔案損壞恢復OracleAIASM
- u盤檔案損壞怎麼恢復資料 u盤損壞無法讀取怎麼恢復資料
- 什麼是硬碟邏輯損壞和檔案系統錯誤硬碟
- 檔案或目錄損壞且無法讀取怎麼辦?
- 故障分析 | MySQL 備份檔案靜默損壞一例分析MySql
- 用 Python 批量檢查 sqlite/db3 檔案是否損壞(qbit)PythonSQLite
- MongoDB 資料檔案損壞修復救命repair與致命危險MongoDBAI
- PostgreSQL DBA(30) - Backup&Recovery#3(資料檔案損壞恢復)SQL
- ibdata1檔案損壞時恢復InnoDB單表測試
- Oracle Database 12c RAC損壞ocr和votedisk恢復實驗OracleDatabase
- 圖解gzip壓縮檔案底層結構及檔案損壞的修復方法圖解
- freemarker生成複雜樣式圖片並無檔案損壞的excelExcel
- Win10系統損壞的cbs.log檔案如何修復Win10
- input 實現檔案上傳,並驗證檔案不大於5M
- win10不管解壓什麼都損壞怎麼辦 win10檔案損壞無法解壓解決方法Win10
- 記記憶體條硬體損壞藍色畫面的 dump 檔案分析記憶體
- 雙擊時它說“檔案或目錄損壞且無法讀取"
- 一次意外斷電導致mysql檔案損壞,啟動異常MySql
- 修復損壞的gz或tar.gz壓縮檔案之方法篇
- 2.7.10 恢復丟失或損壞的伺服器引數檔案(SPFILE)伺服器
- 解決Reiserfs檔案系統損壞的問題我們是認真的
- Vsan分散式檔案系統邏輯架構損壞恢復過程分散式架構
- JavaWeb之實現檔案上傳與下載控制元件JavaWeb控制元件
- maven編專案編譯後在target下的zip檔案損壞無法開啟Maven編譯
- 記錄一次 HotPE 導致的檔案系統損壞及修復