【關鍵術語】
Control file 控制檔案
Multiplex 複用
Backup 備份
三、控制檔案操作
1.複用控制檔案
1) 保證控制檔案的可用性
保證控制檔案的可用性的方法是通過保留控制檔案的多個複本,多個控制檔案副本互為鏡像,内容總是保持完全一緻。這樣當一個控制檔案發生損壞或丢失,仍然可以使用其它的控制檔案副本啟動資料庫,而不需要進行資料庫恢複。然後,在适當時機增加新的控制檔案,使控制檔案仍然保持有多個鏡像。每個 Oracle 資料庫至少應該包含兩個或兩個以上的控制檔案,控制檔案的總數不能超過 8 個。
應該合理地放置控制檔案,在設計資料庫時,盡可能将控制檔案分布到不同的磁盤上,以避免磁盤損壞導緻所有控制檔案丢失。另外,在修改了 Oracle 資料庫的實體結構後,最好對控制檔案進行一次備份。
2) 複用控制檔案的方法
控制檔案的複用是如何實作的呢?又怎樣才能增加新的控制檔案鏡像呢?
p1-1 控制檔案的複用
方法很簡單,停止資料庫後,我們可以首先檢視初始化參數檔案,找到參數 control_files,如圖 p1-1 所示,其中描述了目前使用的控制檔案和位置。為了增加新的控制檔案鏡像,可以先用作業系統指令複制一個新的控制檔案,然後修改該參數的設定。注意:在資料庫打開時,控制檔案是動态的,不能在資料庫運作過程中複制控制檔案,隻有停止資料庫後控制檔案才是靜止和一緻的。否則增加鏡像的過程就會失敗。
3) 鏡像丢失的維護
我們嘗試在關閉資料庫的狀态下,删除一個控制檔案到資源回收筒,來模拟控制檔案的丢失,然後啟動資料庫,觀察控制檔案丢失一個鏡像的現象。并采取相應的維護措施。使資料庫能夠正常工作。
控制檔案鏡像丢失的維護
- 1 檢視目前的控制檔案
SQL> SELECT name FROM v$controlfile;NAME-----------------------------------------/disk1/orcl/control01.ctl/disk2/orcl/control02.ctl/disk3/orcl/control03.ctl2
- 2關閉資料庫,删除最後一個控制檔案 CONTROL03.CTL 到資源回收筒
SQL> SHUTDOWN資料庫已經關閉。已經解除安裝資料庫。ORACLE 例程已經關閉。
- 3 手工删除控制檔案/disk3/orcl/control03.ctl
- 4 重新啟動資料庫,觀察現象
SQL> STARTUPORACLE 例程已經啟動。Total System Global Area 64035360 bytesFixed Size 453152 bytesVariable Size 29360128 bytesDatabase Buffers 33554432 bytesRedo Buffers 667648 bytesORA-00205: ?????????????????????
資料庫停止在 NOMOUNT 狀态,錯誤 ORA-00205 表示控制檔案錯誤,但這條資訊并不明确。
- 5 檢視跟蹤記錄資訊
通 過 查 看 跟 蹤 記 錄 信 息 , 可 以 進 一 步 确 定 錯 誤 類 型 。 跟 蹤 文 件 位 $Oracle_Base/admin/db01/bdump,名稱為 Alert_db01.log。該檔案是 db01 資料庫的跟蹤警告檔案,檔案的最後有如下資訊。
Fri Apr 14 14:52:00 2006ORA-00202: controlfile: '/disk3/orcl/control03.ctl' ORA-27041: unable to open fileOSD-04002: 無法打開檔案
可以看出'/disk3/orcl/control03.ctl'無法打開
- 6 修改伺服器端參數檔案
SQL> ALTER SYSTEM SET control_files ='/disk1/orcl/control01.ctl','/disk2/orcl/control02.ctl'SCOPE=SPFILE;系統已更改。
- 7 關閉并重新啟動資料庫,使初始化參數的修改生效。
SQL> SHUTDOWNORA-01507: ??????ORACLE 例程已經關閉。SQL> STARTUPORACLE 例程已經啟動。Total System Global Area 64035360 bytesFixed Size 453152 bytesVariable Size 29360128 bytesDatabase Buffers 33554432 bytesRedo Buffers 667648 bytes
- 8 檢視控制檔案資訊
SQL> SELECT name FROM v$controlfile;NAME-----------------------------------------/disk1/orcl/control01.ctl/disk2/orcl/control02.ctl
可以看到,控制檔案隻有兩個鏡像,至此資料庫已經打開并可以正常工作了。
2.為控制檔案增加鏡像
在資料庫啟動狀态下,修改伺服器端初始化參數檔案
SQL> ALTER SYSTEM SET control_files = '/disk1/orcl/control01.ctl','/disk2/orcl/control02.ctl','/disk3/orcl/control03.ctl' SCOPE=SPFILE;
- 1 關閉資料庫,以確定複制後的控制檔案與源控制檔案内容完全相同
SQL> SHUTDOWN資料庫已經關閉。已經解除安裝資料庫。ORACLE 例程已經關閉。
- 2 複制控制檔案
可以使用目前的兩個控制檔案任意一個,複制為新的控制檔案。在本執行個體中,在/disk1/orcl/目錄下,将控制檔案 control01.ctl 複制為/disk1/orcl/control03.ctl。
3 重新啟動資料庫
SQL> STARTUPORACLE 例程已經啟動。Total System Global Area 64035360 bytesFixed Size 453152 bytesVariable Size 29360128 bytesDatabase Buffers 33554432 bytesRedo Buffers 667648 bytes資料庫裝載完畢。資料庫已經打開。
- 4 檢視結果
SQL> select name from v$controlfile;NAME---------------------------------------------/disk1/orcl/control01.ctl/disk2/orcl/control02.ctl/disk3/orcl/control03.ctl
四、備份與重建控制檔案
1.控制檔案重建的意義
當控制檔案全部丢失或損壞,但資料檔案和重做日志沒有丢失和損壞。如果有一份在用資料檔案、重做日志以及控制檔案清單,還是可以嘗試使用 CREATE CONTROLFILE 指令來重建控制檔案。另外,如果要改變資料庫名稱或永久參數(MAX_DATAFILE 等)的話,也隻能重建立立控制檔案。
但是,必須要注意,建立控制檔案是一項非常危險的工作,如果建立控制檔案不成功,可能會潛在地損壞資料檔案和重做日志。是以在建立控制檔案之前,必須首先備份所有資料檔案和重做日志,避免損壞使用者的資料庫。另外,建立控制檔案要求使用者必須要具有SYSDBA 系統權限。
2.控制檔案的備份
控制檔案本身也有必要在适當的時候進行備份,特别是資料庫的結構進行了很大的修改。那麼,可不可以将控制檔案複制到另外一個位置,就算是備份了呢?這樣做沒有任何意義,因為控制檔案裡面的資訊是不斷更新的,如果把這樣的備份用于啟動資料庫就會失敗。Oracle 9i 提供了一個系統指令,可以将控制檔案以腳本的形式備份到跟蹤(或二進制)檔案中,可以将此備份的腳本通過修改用于控制檔案的重建。這條指令如下:
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
五、小結
控制檔案是用于維護資料庫完整性的重要檔案,控制檔案中記錄了日志檔案和資料檔案以及檢查點等資訊,控制檔案的位置由初始化參數檔案指明,控制檔案在裝載資料庫階段打開。為了保證控制檔案的可用性,通常需要通過移動、增加或删除鏡像檔案的方法來對其進行維護。
寫在最後的話
感謝各位的支援與閱讀,後續會繼續推送相關知識和交流,歡迎交流、轉發和關注,感謝!