通常我們采用多路控制文件或者備份控制文件的方法避免Oracle控制文件被破壞而導致的數據庫無法啟動的問題。因為Oracle控制文件具有保持Oracle數據庫的完整性的功能,所以我們不得不重視。
Oracle控制文件是數據庫建立的時候自動生成的二進制文件,只能通過實例進行修改,如果手動修改的話會造成控制文件與物理信息不符合,從而導致數據庫不能正常工作。
控制文件主要包括下面內容:
1.控制文件所屬數據庫的名字,一個控制文件只能屬一個數據庫
2.數據庫創建時間
3.數據文件的名稱,位置,聯機,脫機狀態信息
4.所有表空間信息
5.當前日志序列號
6.最近檢查點信息
其中,數據庫名稱,標識和創建時間在數據庫創建時寫入;數據文件和重做日志名稱和位置在增加,重命名或者刪除的時候更新;表空間信息在增加或者刪除表空間的時候進行更新。
在初始化參數文件中control_files參數主要來描述控制文件的文件名跟物理路徑,如下所示:
control_files=("d:Oracleoradataoradbcontrol01.ctl")
該參數只設置一個,也可以設置多個,如下所示:
- control_files=("d:Oracleoradataoradbcontrol01.ctl"
- "e:Oracleoradataoradbcontrol02.ctl",
- "f:Oracleoradataoradbcontrol03.ctl")
這個方法叫做多路控制文件,oracle可以利用這個方法恢復被破壞的控制文件,Oracle最多允許設置8個多路控制文件。必須所有的多路控制文件都完整正確數據庫才能正常啟動,只要丟失一個或者一個內容不正確數據庫就不能順利啟動。對控制文件的管理原則:
1.明確控制文件的名稱和存儲路徑,參數設置錯誤將無法打開數據庫,數據庫打開以後,實例將同時寫入所有的控制文件但是只會讀取第一個控制文件的內容。
2.為數據庫創建多路控制文件
a.多路控制文件內容必須完全一樣,Oracle實例同時將內容寫入到control_files變量所設置的控制文件中。
b.初始化參數control_files中列出的第一個文件是數據庫運行期間唯一可讀取的控制文件。
c.創建,恢復和備份控制文件必須在數據庫關閉的狀態下運行,這樣才能保證操作過程中控制文件不被修改。
d.數據庫運行期間如果一個控制文件變為不可用,那麼實例將不再運行,應該終止這個實例,並對破壞的控制文件進行修復。
3.將多路控制文件放在不同的硬盤上
4.采用操作系統鏡像方式備份控制文件
5.手工方式備份控制文件
應該及時備份特別是發生了如下的操作的時候:
◆添加刪除重命名數據文件
◆添加刪除表空間,改變表空間讀寫狀態
◆添加刪除重做日志文件
如果手工備份不及時的話,就會產生備份的控制文件與正在使用的控制文件不一致,那麼利用備份的控制文件啟動數據庫時會破壞數據庫的一致性完整性,甚至不能啟動數據庫,因此手工備份控制文件要注意及時備份。
創建多路控制文件
利用spfile文件創建多路控制文件
(spfile以二進制文本形式存在,不能用vi編輯器對其中參數進行修改。文件格式為spfileSID.ora。如果要對spfile文件進行修改,可以采用SQL語言)
1.利用SYS帳號登陸SQL*PLUS,查詢一下控制文件信息視圖
本文就Oracle控制文件如何高效管理進行深入探討,主要內容包括:明確控制文件的名稱和存儲路徑,為數據庫創建多路控制文件,將多路控制文件放在不同的硬盤上等。
AD:
結果顯示為:
- NAME
- ----------------------------------
- d:Oracleoradataoradb01control01.ctl
- e:Oracleoradataoradb01control02.ctl
- f:Oracleoradataoradb01control03.ctl
這裡列出了控制文件的名稱以及位置
2.更改spfile中控制文件的信息:(增加了一個新的控制文件)
- SQL>alter system set control_files=
- 'd:Oracleoradataoradb01control01.ctl',
- 'e:Oracleoradataoradb01control02.ctl',
- 'f:Oracleoradataoradb01control03.ctl',
- 'g:Oracleoradataoradb01control04.ctl'
- scope=spfile
結果顯示為:
系統已經更改。
(第二步的操作需要注意的是:進行這些操作,必須是在DB啟動的時候,否則會彈出“Oracle not available”錯誤。)
3.關閉數據庫
4.在操作系統中將已有的控制文件復制,修改名稱保存到剛才增加控制文件的指定位置。(這步必須做的,否則數據庫無法啟動)
5.重新啟動控制文件,使控制文件改變生效。
管理控制文件
備份控制文件
- SQL> alter database backup controlfile to ‘d:\20080326.ctl’
數據庫已更改。
然後從這個備份的位置直接把文件拷貝回之前的目錄覆蓋就好了。
刪除控制文件(刪除某一路的控制文件)
spfile文件
1.利用SYS帳號登陸SQL*PLUS,查詢一下控制文件信息視圖
- SQL>select name from v$controlfile;
結果顯示為:
- NAME
- ----------------------------------
- d:Oracleoradataoradb01control01.ctl
- e:Oracleoradataoradb01control02.ctl
- f:Oracleoradataoradb01control03.ctl
- g:Oracleoradataoradb01control04.ctl
- 這裡列出了控制文件的名稱以及位置
- 2.更改spfile中控制文件的信息,刪除一個新的控制文件
- SQL>alter system set control_files=
- 'd:Oracleoradataoradb01control01.ctl',
- 'e:Oracleoradataoradb01control02.ctl',
- 'f:Oracleoradataoradb01control03.ctl',
- scope=spfile
結果顯示為:
系統已經更改。
3.關閉數據庫
4.在操作系統中刪除控制文件
5.重新啟動數據庫,使控制文件生效