Exchange Server 運維管理02:郵箱數據庫存儲原理

重申一下,出此係列文章的目的是爲了加強運維管理的能力,也就是說不是部署或者是常規配置,這就需要掌握一些基本的理論知識。如果有朋友需要了解Exchange的部署或者是基本操作,可以參考其他的資源,也可以看我之前的Exchange系列文章。

本文將瞭解一下Exchage 2010數據庫文件的存儲原理,可能Exchange部署配置完成後,客戶很少去關心底層數據庫文件的存儲格式,只要DAG副本能正常複製,用戶郵箱正常使用就可以了,當然,這是理想狀態,但萬一數據庫發生故障需要對數據庫進行修復或者是還原時候,就需要用到和數據庫存儲相關的知識。

首先,Exchange 2010 Standard 版支持多達五個數據庫。Exchange 2010 Enterprise 版支持多達 100 個數據庫。但需要注意的是,這是指一臺服務器上所支持的數據庫的最大數量,包括活動數據庫和被動數據庫。

存儲內容:

Exchange Server 2010中主要存儲郵箱數據庫和共用文件夾的內容,郵箱數據庫是大家接觸最多的,至於公用文件夾,大家簡單瞭解即可,在 Outlook 2007之前的版本中,對於像忙/閒信息和脫機通訊簿 (OAB) 下載等功能,需要用到公用文件夾。也就是說如果企業中都是使用Outlook2007之後的版本,就可以和公用文件夾說拜拜了。因此,我們今天的重點是介紹郵箱數據庫的內容。

郵箱數據庫:

如果大家學習過任一數據庫系統,則對於學習Exchange郵箱數據庫一樣簡單。Exchange郵箱數據庫分爲數據庫文件和事務日誌文件兩大類,當然除此之外,還有檢查點文件,我們下面會一一介紹:

image

數據庫文件:(.edb)    此文件是重中之重,用於存儲真正的數據,只要此文件在,就沒有什麼大不了。Exchange版本每一次升級都號稱對存儲的IO要求越來越低,不再需要專業的存儲設備支撐,就與此文件結構的設計有很大的關係。就其Exchange 2010來說,採用B樹結構,使得用戶可以在一個I/O循環內訪問任意數據頁面,與早期2007相比,速度提高了四倍。

事務日誌文件(.log) Log文件中存儲的不是真正的數據,而是對數據庫所進行的操作,像創建、刪除、修改等,存放的是一個動作。其主要目的是爲了保證數據的完整性和致性,對於已提交的操作,將被寫到數據庫文件中。當前使用是E04.log文件,此文件用來存放目前最新的郵件更改信息,在到達日誌文件目標大小後,將會被重命名爲下一個帶有lGeneration 數字序列的日誌文件,比如從 E0000000001.log 到 E000000000E.log,這裏的數字是16進制。 在重命名完成後,會創建新的 E0x.log 文件。

還有一個e04tmp.log文件,每當 E0x.log 文件被寫滿之後,這個臨時的 E0xtmp.log 文件將被用來接收新的內容,最後將會被改名爲新的E0x.log。

這裏面還有一些jrs的文件是幹什麼的?.jrs文件稱爲保留日誌文件,如果當前日誌文件已滿,這些文件可以用來預留額外日誌文件空間的。當磁盤即將寫滿的時候,此時已經寫入日誌的數據也沒法提交應用到EDB數據庫中,可能會導致文件丟失,有了預留文件件以後,在磁盤即將寫滿的時候,系統會自動將 .jrs作爲下一個新的日誌文件,以保證以前的事務數據能夠正常寫入,然後再自動卸載數據庫以保證數據的一致性。就是說,在掛載數據庫的時候,系統已經預留了10MB的空間來預防數據的丟失。

總來的說一個數據庫,最多可以達到1億個日誌文件。

檢查點文件:(.chk) chk文件稱爲檢查點文件,此文件的重要性在於,Exchange將通過檢查點文件來標記哪些日誌已經被寫入數據庫文件了,哪些還沒有寫入。如果在某個時刻,系統發生故障了,Exchange正常恢復時,擴展存儲引擎 (ESE)實例會將上次未寫的數據開媽,將日誌文件自動重播至不一致的數據庫中,從而保證了數據的一致性和完整性。其實就是用來檢查哪些日誌寫了數據文件,哪些沒有寫入。Exchange 每隔三十秒更新一次檢查點文件。.chk 文件與 .log 文件放置在相同的日誌位置。

理論上創建一個郵箱數據庫至少要求50MB的磁盤空間,數據庫所用到的文件至少佔用23MB,但在創建的過程中需要額外的空間來完成數據的讀、寫操作。除此之外,在子文件夾中,還有.ci .wid .dir .000等索引文件。

事務日誌記錄:

Exchange 不是將所有日誌信息寫入單個大文件中,而是使用一系列日誌文件,每個日誌文件的大小正好是 1 MB(即 1,024 KB)。如果日誌文件已滿,Exchange 將關閉該文件並使用序號重命名該文件。第一個寫滿的日誌以名稱 Enn00000001.log 結尾。nn 代表一個兩位數,稱爲基本名稱或日誌前綴。每個數據庫的日誌文件用帶有編號前綴(例如,E00、E01、E02 、 E03、…… E09、E0A)的文件名進行區分。當前對數據庫打開的日誌文件名爲 Enn.log。該文件在被填充並關閉之後纔會有序號。

檢查點文件 (Enn.chk) 跟蹤 Exchange 將記錄的信息寫入數據庫文件的進度。每個數據庫都有各自的日誌流,每個日誌流都有一個檢查點文件。

下面,咱們來研究一下日誌文件頭,每個日誌文件的第一個 4KB 頁包含文件頭信息,說明並標識日誌文件及其所屬的數據庫。可以使用命令:Eseutil /ml [log file name] 來查看文件頭的信息,但注意如果是Exchange SP1 可能會出現下圖所示的提示:

image

我這裏直接升級到SP3,然後重啓再運行此命令eseutil /ml 日誌文件名,如下圖所示:

image

下面,咱們就查看一個具體的看一下,着重查看前四行,

日誌文件文件頭的這幾行表明此日誌文件是當前日誌文件,lGeneration 行表明在日誌已被填充並關閉時,其序號將是 49,對應於十進制值 73。基本名稱是 e01,因此,最終的日誌文件名將是 E0100000049.log。 Checkpoint 值實際上不是從日誌文件文件頭中讀取的,但是看上去好像是從日誌文件文件頭中讀取的它。Eseutil.exe 直接從 Enn.chk 讀取 Checkpoint 值,這樣就不必輸入單獨的命令即可瞭解檢查點文件的位置。如果檢查點文件已被破壞,Checkpoint 值將顯示爲 NOT AVAILABLE。在此例中,檢查點位於當前日誌文件 (0x50) 中,數字 FFFFFFFF 指示檢查點在日誌文件中的位置。一般,我們在修復或者是還原數據文件時,很少會用到檢查點的信息。如果檢查點文件被破壞,Exchange 仍可以正確地恢復並重播日誌文件。只是Exchange 將從頭開始掃描日誌文件,從最早的可用文件開始,而不是從檢查點日誌開始。Exchange 跳過已應用於數據庫的數據(寫入到數據庫的數據),並按順序處理日誌,直到遇到必須應用的數據。通常,Exchange 掃描已應用於數據庫的日誌文件只需要一兩秒的時間。如果日誌文件中包含必須被寫入數據庫的操作,應用操作可能需要 10 秒到幾分鐘不等。平均來算,可以在 30 秒或更短的時間內將一個日誌文件的內容寫入數據庫。

Exchange 數據庫正常關閉時,所有未處理的數據都將被寫入數據庫文件。正常關閉後,將認爲數據庫文件集是一致的,Exchange 將其與日誌流分離。這表明數據庫文件現在是自包含文件(最新)。不需要事務日誌即可啓動數據庫文件。儘管在關閉所有數據庫之後可以刪除日誌文件,但這樣做將影響還原早期備份並前滾的能力。當前數據庫不再需要現有的日誌文件,但是如果必須還原早期數據庫,則可能需要這些日誌文件。

通過運行 Eseutil /mh 命令並檢查數據庫文件頭,可以判斷數據庫是否已正常關閉,如果顯示狀態是cleanshutdown。則顯示爲正常關閉,否則,恭喜您,就修復吧。。。。。。。。。一個痛苦而漫長的過程。如果數據庫處於異常關閉狀態,必須提供檢查點之後的所有現有事務日誌,才能再次裝入數據庫。如果這些日誌不可用,則必須運行 Eseutil /p 命令來修復數據庫,以使數據庫處於一致狀態並可以啓動。修復數據庫,就有數據會丟失。儘管數據丟失量通常非常少,但是可能是災難性的。對數據庫運行 Eseutil /p 之後,應運行 Eseutil/ d 對數據庫進行碎片整理。此操作將丟棄並重建所有數據庫索引和空間樹,如下圖所示:

image

循環日誌記錄

很多管理員很喜歡針對數據庫啓用循環日誌記錄功能,目的就是爲了節省磁盤空間,不然空間上會生成很龐大的日誌信息,直至耗盡磁盤空間,影響到正常使用。在 Exchange 2010 中,默認情況下禁用循環日誌記錄。通過啓用循環日誌記錄,可以降低對驅動器存儲空間的要求。但是,如果沒有一組完整的事務日誌文件,則無法恢復晚於上一次完整備份的任何數據。在正常的生產環境中,建議不啓用循環日誌記錄:

image

如果 Exchange 2010 使用的是標準事務日誌記錄方式,則每個數據庫事務都會被寫入日誌文件中,然後寫入數據庫中。如果日誌文件的大小達到 1 MB,則將重命名該文件並新建日誌文件。隨着時間的推移,將產生一組日誌文件。如果 Exchange 意外地停止,可以通過將這些日誌文件中的數據重播到數據庫中來恢復事務。循環日誌記錄方式則允許 Exchange 在事務日誌文件包含的數據提交到數據庫之後覆蓋這些事務日誌文件。但是,如果啓用循環日誌記錄,則可以將數據只恢復到上一完整備份。因此,一般沒有專門對Exchange數據庫進行備份時,可以啓用循環日誌記錄,爲防止日誌文件過多,影響到正常應用,需要啓用循環日誌記錄。所以說,針對數據庫進行有效的備份纔是控制日誌文件增長的有效辦法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章