關於控制檔案的總結

RAYSUNNNY發表於2013-12-09
最近一直被控制檔案搞得暈暈的,所以找了各種資料惡補了一下,自己在這把自己知道的再整理梳理一下,可能不一定全,以後再看時在來補充。

首先,一定要講一下控制檔案的內容和它的重要性。當初剛開始接觸ORACLE就從引數檔案 控制檔案 日誌檔案開始學了,只知道控制檔案很重要,但到底有多重要呢?通過學習到後面備份恢復,再回頭來看看控制檔案,才發現它的重要性不言而喻。
控制檔案中包括的重要內容:
1.日誌檔案,資料檔名稱及位置,這個就不用多說了,它用來開啟資料庫(open
2.日誌序列號,用於到時做例項奔潰恢復或者介質恢復。
3.檢查點,這個檢查點時常發生,在資料庫正常關閉時要寫發生完全檢查點寫scn到控制檔案的結束scn,因此如果在資料庫執行時,控制檔案發生損壞,資料庫是不能正常的關閉的
4.日誌歷史資訊
5.Rman的備份資訊
控制檔案內容詳細見下圖

上面是從控制檔案的組成方面,從另外一個方面看,控制檔案也可以分為2部分(可變部分+不可變部分
1.不可變部分:即資料庫名稱,檔案位置,大小,日誌位置等。ORACLE控制檔案會為每個資料檔案預留 180 位元組的空間,該空間將用於記載資料檔案的名稱、尺寸、狀態以及檢查點等資訊。
2.可變部分:即通過control_file_record_keep_time引數(預設7天),規定了歸檔日誌資訊,Rman備份資訊等可以保留在控制檔案中的最短時間,也就是說,為了不使控制檔案無限增大(oracle資料庫會把歸檔資訊,備份資訊等記錄到控制檔案中,佔用空間),過了control_file_record_keep_time引數所設定的天數後,這些備份資訊就會被新增進來的資料資訊所覆蓋。比如過了7天了,資料庫奔潰了,如果最近7天沒備份,那麼可能恢復就會出問題了。

講了這麼多,大概的控制檔案內容作用就講完了。下面總結一下控制檔案的備份。
針對不同的控制檔案丟失,主要分為以下幾種情形:
1.控制檔案完全丟失 2.控制檔案不完全丟失 3.歸檔模式 4.非歸檔模式 5.有備份 6.無備份
別看情形多,但解決辦法總共2種
那麼組合就來了:
如果控制檔案完全丟失,現在控制檔案都沒了。
以orcl資料庫為例
1)我控制檔案在丟失前,資料庫時處於歸檔模式的,而且我有備份 /home/oracle/rectl.bak
那麼就照著下面步驟恢復
--不論資料庫現在是什麼狀態,把它關閉切到nomount狀
startup nomount;
ho cp /home/oracle/rectl.bak /$ORACLE_BASE/oradata/orcl/control01.ctl
ho cp /home/oracle/rectl.bak /$ORACLE_BASE/oradata/orcl/control02.ctl
ho cp /home/oracle/rectl.bak /$ORACLE_BASE/oradata/orcl/control03.ctl
(上面這一步是在OS中將備份控制檔案複製到原來資料庫的控制檔案應該放的位置,並保持名稱一致)
--使用recover命令進行恢復
recover database using backup controlfile;
在這一步會提示你輸入你的日誌地址,即重跑日誌讓你的控制檔案scn值跑到最新的和日誌檔案資料檔案一致的狀態
--接下來開啟資料庫
alter database open resetlogs; --resetlogs選項是要恢復日誌的序列號,即你現在是要開啟一個新的資料庫了,和之前的資料那個狀態已經沒有關係了,所以的日誌檔案(redo log)對於現在的資料庫來說,它的資料已經失效了,所以清空。
這樣就能開啟資料庫了。
2)如果控制檔案在丟失前,處於歸檔模式,但是你沒備份檔案,那麼重建控制檔案吧!因為你沒有備份檔案,你有日誌也沒用。
3)如果控制檔案在丟失前,處於非歸檔模式,不管你有沒有備份檔案,那麼你還是重建吧!你有備份檔案,但是沒日誌,你就不能將控制文    件恢復到當前最新狀態。除非你關閉它的一致性校驗,強制開啟資料庫。


如果控制檔案並未完全丟失,那麼就好辦了(不管你是有沒有備份,有沒有開歸檔),在資料庫關閉狀態下,複製現在可以使用的控制檔案,這樣就可以解決了。要注意的是,不能再資料庫開啟時對控制檔案進行移動和複製,移動會造成檔案損壞,複製的話,也是一個無用的控制檔案,因為資料庫在開啟時,會不斷往控制檔案中寫入資訊,你複製出來的可能是已經失效的檔案了。那麼順便說一下就是,對於其他的資料檔案也不要再資料庫執行時對它進行移動操作,會導致檔案損壞。我之前就一不小心,在沒有將users表空間進行離線的情況下移動了它的資料檔案,後來就資料庫啟動出錯,最後恢復了,但是users表空間不能再用了,之前已有的資料還在,但是不能再在它裡面建表插入資料了,報ORA-00600錯,如果哪位大俠能幫我解決,感激不盡。

最後講到控制檔案備份和重建
控制檔案的備份
        熱備:
            alter database backup controlfile to '';  --熱備份控制檔案
            alter database backup controlfile to trace as '' ;--得到建立控制檔案的指令碼
        RMAN:
            backup current controlfile;
            backup database include current controlfile;
            -- 或者設定RMAN 為自動備份
            RMAN > configure controlfile autobackup on;
 建立控制檔案是一項非常危險的工作,如果建立控制檔案不成功,可能會潛在地損壞資料檔案和重做日誌。所以在建立控制檔案之前,必須首先備份所有資料檔案和重做日誌,避免損壞使用者的資料庫。
 重建語句:
CREATE CONTROLFILE REUSE DATABASE "orcl" NOARCHIVELOG NORESETLOGS
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 20
        MAXINSTANCES 8
        MAXLOGHISTORY 3
        LOGFILE
          GROUP 1(
            '/u01/app/oracle/oradata/orcl/redo01.log'
             ) SIZE 50M,
          GROUP 2(
            '/u01/app/oracle/oradata/orcl/redo2.log',
            '/u01/app/oracle/oradata/orcl/redo02.log'
             ) SIZE 50M,
          GROUP 3(
            '/u01/app/oracle/oradata/orcl/redo3.log',
            '/u01/app/oracle/oradata/orcl/redo03.log'
             ) SIZE 100M
        DATAFILE
          '/u01/app/oracle/oradata/orcl/tbs1_2.dbf',
          '/u01/app/oracle/oradata/orcl/tbs1_1.dbf',
          '/u01/app/oracle/oradata/orcl/example01.dbf',
          '/u01/app/oracle/oradata/orcl/users01.dbf',
          '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
          '/u01/app/oracle/oradata/orcl/system01.dbf',
          '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
        CHARACTER SET WE8ISO8859P1

以上如果有錯誤的地方,望指正。共同學習








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

相關文章