記一次Oracle控制文件分析狀況

最近兩天在從頭看一些與DBA有關的書籍,有一章講到了控制文件,如今整理一下有關的知識點及實際對照生產庫對比的狀況sql

  • 控制文件的定義及引入的目的數據庫

    Oracle數據庫的控制文件是數據庫中極其重要的文件,該文件是一個比較小的二進制文件,它記載了物理數據庫的當前狀態,每個控制文件只屬於一個數據庫,但爲了防止控制文件丟失,一個數據庫通常有不止一個控制文件,這些控制文件中的內容徹底同樣,在數據庫裝載或打開以前,Oracle服務器沒必要須可以訪問控制文件。當數據庫在打開狀態下,Oracle服務器會隨時修改控制文件中的內容,任何用戶,包括數據庫管理員都不能修改控制文件中的數據。安全

    若是因爲某種緣由Oracle服務器不能訪問控制文件了,那麼數據庫也就沒法正常工做了。若是一個數據庫的全部控制文件都出了問題,那麼這個數據庫就須要進行恢復。所以,實際的商用數據庫至少須要2個(通常爲3個)控制文件,爲了防止磁盤的物理故障,這些控制文件最好放在不一樣的物理磁盤上,並且最好放在不一樣的物理磁盤控制器上。服務器

  • 實際對比一個生產庫來看一下
    咱們先執行命令:
    select name from v$controlfile;
    輸出結果:架構

    SQL> select name from v$controlfile;
    NAME
    --------------------------------------------------------------------------------
    /oradata/orcl/control01.ctl
    /oradata/orcl/control02.ctl

    接下來咱們登錄到服務器路徑下,看一下說的是否跟書上同樣。oracle

    [oracle@oradb1 orcl]$ du -ks *
    9616    control01.ctl
    9616    control02.ctl

    這裏發現,2個控制文件,大小是同樣的。code

    以後按照書上的說法,目前看來,這2個控制文件都在一個目錄下,是有安全隱患的,若是磁盤壞了的話兩個控制文件都沒辦法訪問了,那麼數據庫就啓動不了了。(注意,這裏同理,Redo文件也同樣須要在不一樣的磁盤下)文檔

  • 接下來問題來了
    咱們怎麼知道實際在Linux下,這些文件系統都掛載在哪些盤上了呀?好像印象中,咱們都是作的Raid1或者Raid5,而且這臺生產系統,仍是在雲上的虛擬機,貌似沒辦法知道哪一個磁盤是給咱們這臺服務器用的,這樣的話,這個風險豈不是很高麼?
    關於這裏,我詢問了比較懂Linux存儲的同事,也上網找了一下相關資料,獲得以下結論:虛擬機

    在oracle文檔上強烈建議將使用多個控制文件並放置在不一樣的硬盤上。這樣的建議和架構對控制文件的保護上沒錯,可是在實際的生產系統中這樣的架構彷佛並不合理。加入放在兩個硬盤上,那麼兩塊硬盤中有故障的機率要比一塊硬盤大。而在oracle系統中,不管哪一個contorlfile失效都會致使系統宕掉。這可能到增長了系統故障的可能。因此達不到高可用的要求。而一些實際的系統架構是依賴於硬件的冗餘,好比raid1或者raid5/raid6的配置來保證系統的高可用運行和controlfile在硬盤出現故障時不會丟失。
    另外,對controlfile的備份也須要重視。系統架構

    看起來Oracle官方的推薦,跟實際生產狀況仍是有差別的,咱們能作到的就是在備份數據庫的時候,必定要注意把控制文件備份出來,這樣無論經過什麼方式恢復了數據庫,若是磁盤有問題的話,咱們能夠拿備份的控制文件來用。

相關文章
相關標籤/搜索