在Oracle中,資料一般是存放在資料檔案中,不過資料庫與Oracle最大的區別之一就是資料庫可以在資料出錯的時候進行恢複。 這個也就是我們常見的Oracle中的重做日誌(REDO FILE)的功能了。在重做日誌分成2部分,一個是線上重做記錄檔,另外一個就是歸檔記錄檔。
這裡不詳細說明線上重做日誌,而是說一下歸檔日誌(Archive Log)。線上重做日誌大小畢竟是有限的,當都寫滿了的時候,就面臨著2個選擇,第一個就是把以前線上重做日誌從頭擦除開始繼續寫,第二種就是把以前的線上重做日誌先進行備份,然後對被備份的日誌擦除開始寫新的線上Redo File。這種備份的線上重做日誌就是歸檔日誌。而資料庫如果採用這種產生歸檔日誌的模式的話,就是歸檔記錄模式(ARCHIVELOG模式),反之如果不產生歸檔日誌,就是非歸檔記錄模式(NOARCHIVELOG模式)。
有了歸檔日誌有什麼好處了。比如在這個月1號的時候備份了一次資料,然後過了10天,這10天產生了成百上千個線上重做日誌,突然發現其中有一個資料磁碟出問題了,不能用了,那我該如何是好呢。
如果沒有採用歸檔日誌,那麼實際上磁碟中只會有幾個最新的線上重做日誌。那麼我只能要不然把出問題的資料磁碟上所佔據的資料表空間都刪除掉。但是如果是SYSTEM資料表空間所涉及的磁碟出錯,就沒辦法這麼做了,只能用第二種方法。那第二種方法就是把1號備份的資料拿出來恢複。那麼1號到10號之間的10天的資料都丟了,如果是關鍵系統,比如證券金融什麼的系統,就要讓你賠錢賠死掉。
但是如果有了歸檔日誌,那麼你這10天的重做日誌都會存放起來,那麼DBA首先把1號的備份資料恢複,然後再拿這10天的REDO日誌來進行一次資料操作重放,那麼就可以完全恢複最新的資料庫,不會有什麼後果了。
在軟體開發的時候,由於測試伺服器的配置有限,特別是磁碟空間有限,所以有可能要限制REDO檔案的大小,有可能就把系統設定為NOARCHIVELOG模式了。但是在實際的生產運行環境下,基本上一定要使用ARCHIVELOG模式,否則萬一出了問題,真是哭都來不及了。
有人可能會怕歸檔日誌造成效能損失。其實這個完全是杞人憂天的,歸檔日誌只是做一個備份,其實也就是多耗一些磁碟空間而已。在當前的軟體系統中,硬碟的儲存容量成本已經屬於低到可以忽略的地步,而最重要的是資料庫的安全。DBA的任務本來就是確保資料的安全,如果連安全都保證不了,那點微乎其微的效能提高又有什麼用呢。