Oracle控制檔案基礎

dba_manganese發表於2014-03-11
本文所述內容根據Oracle Database Administrator’s Guide 11g Release 2(11.2)--管理控制檔案 章節學習整理而得。
一、控制檔案概述
控制檔案是一種二進位制檔案,它記錄了資料庫的物理結構。在控制檔案當中包含以下資訊:
1、資料庫名稱
2、與當前資料庫相關聯的資料檔案和重做日誌檔案的名稱和位置
3、資料庫建立的時間
4、當前日誌的序號
5、檢查點資訊
    資料庫開啟時,必須保證資料庫能夠向控制檔案寫入資訊。如果控制檔案丟失或損壞,資料庫將無法啟動到mount狀態,並會給資料庫的恢復帶來一定的困難。
控制檔案是隨資料庫的建立而建立的。預設情況下,至少會為其自身建立一個副本,在許多作業系統上都會為控制檔案建立多個副本。在資料庫建立期間,我們可以選擇建立兩個或更多的控制檔案。如果丟失(損壞)或是想修改控制檔案中的個別專案,也可以在以後建立它。


二、建立控制檔案

    在資料庫建立之前,通過oracle引數檔案中的CONTROL_FILE引數指定控制檔案的名字和儲存的位置。在資料庫startup期間,由例項識別和開啟控制檔案中包含的所有檔案,在資料庫操作期間,由例項負責寫入資訊和維護控制檔案。
在建立資料庫之前,如果未設定CONTROL_FILE初始化引數,則:
1、如果沒有使用OMF,oracle將以預設的名稱和路徑建立控制檔案
2、如果使用了OMF,oracle將根據OMF的設定確定控制檔案的名稱和路徑
3、如果使用Orale的自動儲存管理,通過設定DB_CREATE_FILE_DEST和DB_RECOVER_FILE_DEST初始化引數,Oracle ASM將自動在適當的位置建立控制檔案。
之前所述的控制檔案的建立是在建立資料庫(create database)的同時建立控制檔案,那麼該在何時建立新的控制檔案?又該如何建立新的控制檔案呢?oracle的官方文件中給出瞭如下說明:
1、何時建立新的控制檔案
    a、在控制檔案發生永久性的損壞且之前未對控制檔案進行備份
    b、需要修改控制檔案中的某些內容
2、如何建立新的控制檔案
    a、收集重做日誌檔案,資料檔案,控制檔案的資訊
        select group#,member from v$logfile;
        select name,bytes from v$datafile;
        select value from v$parameter where name='control_files';
    b、關閉資料庫
    c、備份資料檔案和重做日誌檔案
    d、啟動例項到nomount狀態
    e、使用create controlfile語句建立新的控制檔案,如下

點選(此處)摺疊或開啟

  1. CREATE CONTROLFILE
  2.    SET DATABASE prod  --指定資料庫的名字
  3.    LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
  4.                     '/u01/oracle/prod/redo01_02.log'),
  5.            GROUP 2 ('/u01/oracle/prod/redo02_01.log',
  6.                     '/u01/oracle/prod/redo02_02.log'),
  7.            GROUP 3 ('/u01/oracle/prod/redo03_01.log',
  8.                     '/u01/oracle/prod/redo03_02.log')
  9.    RESETLOGS  --重置日誌xuhao
  10.    DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
  11.             '/u01/oracle/prod/rbs01.dbs' SIZE 5M,
  12.             '/u01/oracle/prod/users01.dbs' SIZE 5M,
  13.             '/u01/oracle/prod/temp01.dbs' SIZE 5M
  14.    MAXLOGFILES 50
  15.    MAXLOGMEMBERS 3
  16.    MAXLOGHISTORY 400
  17.    MAXDATAFILES 200
  18.    MAXINSTANCES 6
  19.    ARCHIVELOG;
    f、備份新建控制檔案
    g、修改control_file初始化引數,建立控制檔案的多路複用,如果修改了資料庫的名字,還需要修改初始化引數檔案中的DB_NAME引數
    h、以如下方式開啟資料庫:
        alter database open;
        alter database open resetlog;
3、控制檔案建立後的問題處理
    在使用新建的控制檔案開啟資料庫後,應檢視告警日誌中是否記錄了諸如資料字典和控制檔案不一致之類的資訊。例如:某個資料檔案在資料字典中存在但是在控制檔案中卻沒有對應的記錄等等。
    如果某個檔案在資料字典中存在而在控制檔案中不存在,資料庫將在控制檔案中建立一個名為MISSINGnnnn的佔位符條目,nnnn是以十進位制表示的資料檔案編號。控制檔案中的MISSINGnnnn標誌意味著檔案號為nnnn的資料檔案被離線且需要介質恢復。
    與此相反,如果某個資料檔案的資訊在控制檔案中存在而在資料字典中卻不存在,資料庫將移除該資訊。在上述的兩種情況中,我們都可以從資料庫的告警日誌中得到相關的說明資訊,所以說,在使用新建的控制檔案開啟資料庫時,一定不要忘了檢視告警日誌中是否提示了相關的異常資訊。
4、建立控制檔案期間的錯誤處理
    當使用新建的控制檔案mount和open資料庫時,如果出現了ORA錯誤資訊(通常有 ORA-01173ORA-01176ORA-01177ORA-01215, ORA-01216),絕大多數的原因為:在create controlfile語句中遺漏了相關檔案的資訊或包含了不該有的檔案的資訊,這時只能重新建立控制檔案了。

三、多路複用控制檔案

    Oracle推薦最好將控制檔案分佈在不同的物理磁碟上。如果由於磁碟故障導致控制檔案發生損壞,與之相關聯的例項應被關閉。一旦磁碟被修復,可以通過其他磁碟上的控制檔案恢復損壞的控制檔案。待恢復完成後例項就可以重新啟動,不需要進行介質恢復。
多路複用控制檔案是如何進行工作的呢?
1、資料庫啟動時,僅讀取control_file中第一個引數檔案的資訊
2、資料庫開啟時,將會向control_file中所有的控制檔案更新資訊
3、在資料庫操作期間,如果任意一個控制檔案不可用,例項將無法操作。

四、備份與恢復控制檔案

1、何時需要備份控制檔案:
    a、新增、刪除或重新命名資料檔案                                        
    b、新增、刪除一個表空間或修改表空間的讀寫狀態                 //在新增,刪除或重新命名的前後都需要進行備份嗎?文件沒有說明,我認為應該這樣。
    c、新增、刪除重做日誌檔案或組
2、備份控制檔案的方法如下:
    a、以二進位制檔案的形式備份控制檔案:alter database backup controlfile to '/u02/backup';
    b、以SQL語句的形式備份控制檔案便於以後可以重建:alter database backup controlfile to trace;該備份的存放位置可以通過檢視alert告警日誌獲知。
3、恢復控制檔案的方法如下:
    a、假設control_file引數中的一個引數檔案發生損壞,但是控制檔案的存放目錄仍然可以訪問,這時可以:關閉資料庫--&gtcp控制檔案另一副本覆蓋損壞控制檔案--&gt startup
    b、假設control_file引數中的一個引數檔案發生發生介質損壞,這時可以:關閉資料庫 --&gt 在新介質上恢復控制檔案 --&gt 修改control_file引數 --&gt startup
4、刪除控制檔案
    關閉資料庫 --&gt 修改control_file引數(刪除對於資訊) --&gt startup,該系列操作不會刪除作業系統上的物理檔案,需要手動刪除。

五、記錄控制檔案相關資訊的資料字典檢視
1、v$database:記錄資料庫中關於控制檔案的資訊。
例如:
SQL> select controlfile_type,controlfile_created,controlfile_change#,controlfile_time from v$database;
CONTROLFILE_TY CONTROLFILE_CR CONTROLFILE_CHANGE# CONTROLFILE_TI
-------------- -------------- ------------------- --------------
CURRENT        31-1月 -14                 1237887 11-3月 -14
2、v$controlfile:顯示控制檔案的路徑和名稱。
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
D:\APP\ORACLE\ORADATA\ORCL\CONTROL01.CTL
D:\APP\ORACLE\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL
3、v$controlfile_record_section:資料字典檢視的作用不清楚
SQL> select * from v$controlfile_record_section;
TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
DATABASE                             316             1            1           0          0          0
CKPT PROGRESS                       8180            11            0           0          0          0
REDO THREAD                          256             8            1           0          0          0
REDO LOG                              72            16            3           0          0          3
DATAFILE                             520           100            6           0          0         40
FILENAME                             524          2298           10           0          0          0
TABLESPACE                            68           100            7           0          0          3
TEMPORARY FILENAME                    56           100            1           0          0          1
RMAN CONFIGURATION                  1108            50            0           0          0          0
LOG HISTORY                           56           292           13           1         13         13
OFFLINE RANGE                        200           163            0           0          0          0
ARCHIVED LOG                         584            28            0           0          0          0
BACKUP SET                            40           409            0           0          0          0
BACKUP PIECE                         736           200            0           0          0          0
BACKUP DATAFILE                      200           245            0           0          0          0
BACKUP REDOLOG                        76           215            0           0          0          0
DATAFILE COPY                        736           200            1           1          1          1
BACKUP CORRUPTION                     44           371            0           0          0          0
COPY CORRUPTION                       40           409            0           0          0          0
DELETED OBJECT                        20           818            1           1          1          1
TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
PROXY COPY                           928           246            0           0          0          0
BACKUP SPFILE                        124           131            0           0          0          0
DATABASE INCARNATION                  56           292            2           1          2          2
FLASHBACK LOG                         84          2048            0           0          0          0
RECOVERY DESTINATION                 180             1            1           0          0          0
INSTANCE SPACE RESERVATION            28          1055            1           0          0          0
REMOVABLE RECOVERY FILES              32          1000            0           0          0          0
RMAN STATUS                          116           141            0           0          0          0
THREAD INSTANCE NAME MAPPING          80             8            8           0          0          0
MTTR                                 100             8            1           0          0          0
DATAFILE HISTORY                     568            57            0           0          0          0
STANDBY DATABASE MATRIX              400            31           31           0          0          0
GUARANTEED RESTORE POINT             212          2048            0           0          0          0
RESTORE POINT                        212          2083            0           0          0          0
DATABASE BLOCK CORRUPTION             80          8384            0           0          0          0
ACM OPERATION                        104            64            6           0          0          0
FOREIGN ARCHIVED LOG                 604          1002            0           0          0          0
37 rows selected

4、v$parameter:說明在初始化引數中是由那個引數決定控制檔案的名稱和路徑的。
SQL> select name from v$parameter where name='control_files';
NAME
--------------------------------------------------------------------------------
control_files

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

相關文章