運維案例 | Exchange2010數據庫損壞的緊急修復思路

關注嘉爲科技,獲取運維新知


Exchange後端數據庫故障,一般都會是比較嚴重的緊急故障,因爲這會直接影響到大面積用戶的正常使用,而且涉及到用戶數據。一旦遇到這種級別的故障,管理員往往都是在非常緊張、壓力非常大的狀態下進行恢復操作,需要在高壓狀態下迅速做出決策,下一步應該如何做。本文將總結數據庫緊急故障下的恢復思路,希望對遇到這種緊急情況的郵件系統管理員有所幫助。

注:以下案例僅針對Exchange 2010版本。


一般郵件數據庫的緊急故障,首先判斷數據庫狀態是否正常,是否可以掛載使用;數據庫無法掛載使用則可以通過命令判斷是否需要進行數據庫修復;使用如下圖的命令,如果數據庫狀態並非Clean Shutdown則需要進行修復操作。


如果數據庫需要進行修復,則管理員需要判斷,是等待數據庫完全修復好之後再進行恢復郵件服務?還是優先恢復用戶郵箱使用,郵箱數據則等待數據庫修復之後再進行恢復?


因爲有的時候數據庫修復時間較長,用戶無法等待這麼久的時間。筆者就曾遇到過修復600GB數據庫的案例,首先軟修復耗費3個多小時,硬修復耗費1個多小時的情況。


如需要緊急優先恢復用戶郵箱使用,後續再恢復數據的場景,則可以使用以下兩種方案。兩種方案基本大同小異,大家可以參考使用。



方案一,在原先的數據庫掛上空庫使用,後續合併數據

1、剪切目錄中所有原始數據庫的文件至其他磁盤,並額外備份一份,以防修復過程中出現意外。


2、 掛上空庫:

  • a) 加載數據庫DB;


  • b) 點擊"全是"創建一個空數據庫;


  • c) 現在數據庫上的用戶應該可以訪問郵箱並收發郵件了,只是原始的數據會找不到。


3、用命令exeutil /p修復原始數據庫文件(*.edb),如下圖示例:


4、確認數據庫狀態爲"Clean Shutdown";


5、創建恢復數據庫RDB;

New-MailboxDatabase -Recovery -Name name -Server servername -EdbFilePath "path" -LogFolderPath "path"


6、將修好的EDB文件複製到上面創建的RDB的路徑下,並重命名爲RDB指定的edb文件名稱;


7、加載RDB;


8、用以下命令合併DB與RDB的數據;

Get-Mailbox -Database 原DB名 | Restore-Mailbox -RecoveryDatabase RDB

注:也可以在第6步dismount原有的數據庫,將空庫的文件剪切到RDB的路徑下,將修復的數據庫掛到原始數據庫路徑下,在重新mount原始數據庫的RDB之前,修改數據庫屬性,勾上“This database can be overwritten by a restore”。




方案二,將用戶郵箱設定到新數據庫,後續合併數據

1、創建新的數據庫,使用下面的命令將原始數據庫中的郵箱全部設置到新的數據庫上;

Get-Mailbox -Database 舊數據庫名 | Set-Mailbox -Database 新數據庫名


2、同第一種方法對故障數據庫進行修復,待數據庫修復完畢,我們可以:

新建RDB,將修復好的數據庫拷入合併數據到新建的數據庫,具體步驟可以參照第一部分。

或者將郵箱從臨時數據庫切回當前數據庫。

Get-Mailbox -Database 新數據庫名|Set-Mailbox -Database 舊數據庫名


運行命令,將數據進行合併。

$mailboxes = Get-Mailbox -Database 舊數據庫名

$mailboxes | %{New-MailboxRestoreRequest –SourceStoreMailbox $_.ExchangeGuid –SourceDatabase 新數據庫名 –TargetMailbox $_}

注意區分舊數據庫名和新數據庫名。



以上就是針對郵箱數據庫的緊急故障的恢復思路。

總的來說,出現重大緊急故障,不要慌不要亂,保持清晰的思路,做出最佳的判斷。但是不論怎樣,做好日常運維的管理,防範故障於未然纔是最好的辦法。


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