備份:
alter database backup controlfile to 'xxxxxxx' reuse;
alter database bakcup controlfile to trace as 'xxxxxxx'; RMAN備份控制文件 |
1.控制文件損壞后利用二進制備份恢復(異常斷電)
?? ?
?備份控制文件:
alter database backup controlfile to '/home/oracle/control.ctl ' reuse; 插入測試數據: SQL> insert into t1 values(1); SQL> commit; 模擬斷電: SQL> shutdown abort; 模擬控制文件故障: rm -rf /database/oradata/skyread/control01.ctl rm -rf /database/oradata/skyread/control02.ctl rm -rf /database/oradata/skyread/control03.ctl 再次開啟數據庫: SQL> startup; ORA-00205: error in identifying control file, check alert log for more info 報00205錯誤 把備份文件復制到數據庫控制文件所在位置: cp /home/oracle/control.ctl /database/oradata/skyread/control01.ctl cp /home/oracle/control.ctl /database/oradata/skyread/control02.ctl cp /home/oracle/control.ctl /database/oradata/skyread/control03.ctl SQL> startup force mount Total System Global Area ? ? ? ? ? 5049942016 bytes Fixed Size ? ? ? ? ? ? ? ? ? ? ? ? ? ?2090880 bytes Variable Size ? ? ? ? ? ? ? ? ? ? ?1375733888 bytes Database Buffers ? ? ? ? ? ? ? ? ? 3657433088 bytes Redo Buffers ? ? ? ? ? ? ? ? ? ? ? ? 14684160 bytes Database mounted. |
? ?
檢查數據文件,數據文件頭,日志文件以及控制文件的scn信息,由于是機器斷電,所以這里fuzzy的狀態是YES
SQL> select file#,status,fuzzy,CHECKPOINT_CHANGE# from v$datafile_header;
? ? ? ? ? ? ? ?FILE# STATUS ?FUZ ? CHECKPOINT_CHANGE#
-------------------- ------- --- --------------------
? ? ? ? ? ? ? ? ? ?1 ONLINE ?YES ? ? ? ? 122694280130
? ? ? ? ? ? ? ? ? ?2 ONLINE ?YES ? ? ? ? 122694280130
? ? ? ? ? ? ? ? ? ?3 ONLINE ?YES ? ? ? ? 122694280130
? ? ? ? ? ? ? ? ? ?4 ONLINE ?YES ? ? ? ? 122694280130
? ? ? ? ? ? ? ? ? 18 ONLINE ?YES ? ? ? ? 122694280130
? ? ? ? ? ? ? ? ? 26 ONLINE ?YES ? ? ? ? 122694280130
? ? ? ? ? ? ? ? ? 31 ONLINE ?YES ? ? ? ? 122694280130
SQL> select group#,sequence#,members,archived,status,first_change# from v$log;
? ? ? ? ? ? ? GROUP# ? ? ? ? ? ?SEQUENCE# ? ? ? ? ? ? ?MEMBERS ARC STATUS ? ? ? ? ? ? ? ? ?FIRST_CHANGE#
-------------------- -------------------- -------------------- --- ---------------- --------------------
? ? ? ? ? ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ?1 NO ?CURRENT ? ? ? ? ? ? ? ? ?122694212304
? ? ? ? ? ? ? ? ? ?2 ? ? ? ? ? ? ? ? ? ?2 ? ? ? ? ? ? ? ? ? ?1 YES INACTIVE ? ? ? ? ? ? ? ? 122693905385
? ? ? ? ? ? ? ? ? ?5 ? ? ? ? ? ? ? ? ? ?3 ? ? ? ? ? ? ? ? ? 1 YES INACTIVE ? ? ? ? ? ? ? ? 122694191761
? ? ? ? ? ? ? ? ? ?4 ? ? ? ? ? ? ? ? ? ?4 ? ? ? ? ? ? ? ? ? ?1 YES INACTIVE ? ? ? ? ? ? ? ? 122694190542
? ? ? ? ? ? ? ? ? ?3 ? ? ? ? ? ? ? ? ? ?5 ? ? ? ? ? ? ? ? ? ?1 YES INACTIVE ? ? ? ? ? ? ? ? 122694168156
?
CONTROLFILE_CHANGE#是備份時的控制文件SCN,這里數據文件的檢查點肯定是大于當時備份的控制文件,所以數據打開的時候,數據文件,日志文件,控制文件的檢查點信息是不一致的,要進行介質恢復到一致,才能打開,以上V$LOG,V$DATAFILE都是和備份的控制文件的檢查點一致的。但是v$datafile_header記錄的是最新的,就是數據庫關閉前的。所以如果打開的時候做會做檢查,檢查數據文件頭的檢查點計數和與現在控制文件的檢查點技術是否相等,如果相等,進行第二次檢查,也就是檢查數據文件頭開始的SCN和控制文件結束的SCN是否相等,如果相等,就不需要進行恢復,不相等,就需要進行恢復。這里明顯是不相等的,所以需要recovery。
SQL> select checkpoint_change#,controlfile_change#,resetlogs_change# from v$database;?
? CHECKPOINT_CHANGE# ?CONTROLFILE_CHANGE# ? ?RESETLOGS_CHANGE#
-------------------- -------------------- --------------------
? ? ? ? 122694212305 ? ? ? ?
?
122694259161 ?
?
? ? ? 122693676208
介質恢復數據庫:提示需要應用redo01.log
SQL> recover database using backup controlfile;
ORA-00279: change 122694280130 generated at 05/03/2013 11:25:37 needed for
thread 1
ORA-00289: suggestion : /database/oradata/arch/1_1_814447469.dbf
ORA-00280: change 122694280130 for thread 1 is in sequence #1
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/database/oradata/skyread/redo01.log
Log applied.
Media recovery complete.
重置日志文件打開數據庫:
SQL> alter database open resetlogs;
Database altered.
2.控制文件損壞后利用trace文件重建控制文件(正常關機)
備份控制文件為文本格式
SQL> alter database backup controlfile to trace as '/home/oracle/controlfile.sql' reuse;
Database altered.
干凈關閉數據庫并破壞所有控制文件
SQL> shutdown immediate;
mv /database/oradata/skyread/control01.ctl /database/oradata/skyread/control01.ctl.bak
mv /database/oradata/skyread/control02.ctl /database/oradata/skyread/control02.ctl.bak
mv /database/oradata/skyread/control03.ctl /database/oradata/skyread/control03.ctl.bak
打開數據庫出錯
SQL> startup;
ORACLE instance started.
Total System Global Area 5049942016 bytes
Fixed Size ? ? ? ? ? ? ? ? ?2090880 bytes
Variable Size ? ? ? ? ? ?1375733888 bytes
Database Buffers ? ? ? ? 3657433088 bytes
Redo Buffers ? ? ? ? ? ? ? 14684160 bytes
ORA-00205: error in identifying control file, check alert log for more info
在nomount模式用
/home/oracle/controlfile.sql中的語句重建控制文件,注意這里用的是
NORESETLOGS,這里因為我們是干凈關閉數據做的測試,相當于數據文件和日志文件都是沒有損壞的,這里是基于數據文件頭和日志文件頭的信息構建出控制文件,所以這個控制文件和數據文件頭和日志文件頭都是一致的,既然是一致的,那么都不需要recover,直接打開數據庫即可。
注意:這里如果是用二進制備份控制文件進行恢復,還是需要recover的,因為你備份的二進制文件和當前的數據文件頭信息一般是不一致的。
CREATE CONTROLFILE REUSE DATABASE "SKYREAD" NORESETLOGS FORCE LOGGING ARCHIVELOG
? ? MAXLOGFILES 20
? ? MAXLOGMEMBERS 5
? ? MAXDATAFILES 1000
? ? MAXINSTANCES 8
? ? MAXLOGHISTORY 2337
LOGFILE
? GROUP 1 '/database/oradata/skyread/redo01.log' ?SIZE 512M,
? GROUP 2 '/database/oradata/skyread/redo02.log' ?SIZE 512M,
? GROUP 3 '/database/oradata/skyread/redo03.log' ?SIZE 512M,
? GROUP 4 '/database/oradata/skyread/redo04.log' ?SIZE 512M,
? GROUP 5 '/database/oradata/skyread/redo05.log' ?SIZE 512M
DATAFILE
? '/database/oradata/skyread/system01.dbf',
? '/database/oradata/skyread/tbs_test.dbf',
? '/database/oradata/skyread/sysaux01.dbf',
? '/database/oradata/skyread/users01.dbf',
? '/database2/oradata/skyread/TBS_MRPMUSIC01.dbf',
? '/database/oradata/skyread/sf01.dbf',
? '/database2/oradata/skyread/undotbs02'
CHARACTER SET UTF8;
SQL> alter database open;
Database altered
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
