控制檔案的結構

楊奇龍發表於2010-07-10

控制檔案的結構(1) 
控制檔案分為檔案頭和內容兩部分。檔案頭包含:
控制檔案塊大小
控制檔案包含的塊的數量

    在MOUNT資料庫的時候,會讀取控制檔案的頭塊,並進行校驗。如果校驗失敗,資料庫會報錯。初始化引數DB_BLOCK_SIZE確定了資料庫的預設塊大小。資料庫預設塊大小就是控制檔案的塊大小。

    要操作控制檔案,首先要獲得排他性的CF ENQUEUE。在控制檔案的最開頭的記錄使資料庫資訊。這部分資訊佔210位元組,佔用一個控制檔案塊。控制檔案的所有資訊都有備份。在同一個控制檔案中,每個控制檔案記錄都有備份記錄,每個邏輯塊都有兩個物理塊來儲存資料,一個物理塊儲存當前的資訊,另外一個物理塊儲存的是早期版本的資訊,或者一個仍然沒有被確定,等待提交的資訊。為了知道每個邏輯塊對應的物理塊中儲存的是最新的資料,Oracle維護了一個關於塊版本的點陣圖資訊,這個點陣圖儲存在控制檔案的第一條記錄中。
   要從控制檔案中讀取資料,會話需要首先讀取塊版本點陣圖,以確定去讀取哪些物理塊,然後如果要對某個邏輯塊進行更改,首先寫入儲存非當前版本的物理塊,然後透過原子操作,重寫塊版本點陣圖。如果要對某個控制檔案塊的多條記錄進行修改,比如說修改每個線上檔案的CHECKPOINT SCN,這些資訊首先被儲存在緩衝中,達到一定數量的時候一次性寫入。要注意的是,每個控制檔案事務需要至少4次對控制檔案的序列的IO操作,如果一次修改了多個邏輯塊,那麼可能需要更多次IO。如果有備份的控制檔案並系統不支援非同步IO,也會造成多次IO。因此來說,控制檔案事務是一種開銷十分大的操作。
  當控制檔案事務完成後,控制檔案序列號會增長。這個序列號和塊版本點陣圖以及資料庫資訊項一起儲存在控制檔案的第一條記錄中。這個序號被存放在每個控制塊的緩衝頭中。如果多個控制檔案中的序列號不同,資料庫會提示一個ORA-235錯誤。
 

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

相關文章