了解交易記錄

 

適用版本: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上次修改主題的時間: 2007-08-30

本主題說明 Microsoft Exchange Server 2007 中的交易記錄詳細資料,並包含循環記錄的簡短描述。

Exchange Server 交易記錄是健全的可延伸儲存引擎 (ESE) 修復機制,其設計的目的是要在資料庫突然停止之後,可以可靠地將 Exchange 資料庫還原為一致狀態。而還原線上備份時,也會使用記錄機制。

交換交易記錄

在變更 Exchange 資料庫檔案之前,Exchange 會先將變更寫入至交易記錄檔。而在安全記錄變更之後,就可以將變更寫入至資料庫檔案。在將變更安全記錄至交易記錄之後,而在將變更寫入至資料庫檔案之前,一般使用者都可以使用這些變更。

Exchange 運用複雜的內部記憶體管理系統 (調整成達到高效能),而且可以有效地管理大量 GB 之資料庫頁面的快取。因此,在一般作業期間,實際將變更寫入至資料庫檔案是低優先順序工作。

如果資料庫突然停止,則除非記憶體快取毀損,否則快取的變更並不會遺失。而重新啟動資料庫時,Exchange 會掃描記錄檔,並重新建構及套用所有尚未寫入至資料庫檔案中的變更。此處理程序稱為重新顯示記錄檔。資料庫是具有結構的,因此 Exchange 可以判斷是否已將任何記錄檔中的任何作業套用至資料庫中、是否需要將之套用至資料庫,或不屬於資料庫。

因為不想將所有記錄資訊都寫入至單一大型檔案,所以 Exchange 會使用一連串的記錄檔,而每個記錄檔的大小都剛好 1 MB 或 1,024 KB。當記錄檔已滿時,Exchange 會關閉該檔案,並以序號重新命名該檔案。填滿的第一個記錄的名稱結尾是 Enn00000001.log。nn 是兩位數字,即所謂的基準名稱或記錄前置詞。

每個儲存群組的記錄檔都是使用帶有編號前置詞的檔案名稱來區分 (例如,E00、E01、E02 或 E03)。目前為儲存群組開啟的記錄檔只會命名為 Enn.log;除非已填滿並關閉該檔案,否則該檔案不會有序號。

檢查點檔案 (Enn.chk) 會追蹤 Exchange 將記錄的資訊寫入至資料庫檔案的進度。每個記錄資料流都會有一個檢查點檔案,而且每個儲存群組都會有個別的記錄資料流。而在單一儲存群組內,所有資料庫都會共用單一記錄資料流。因此,單一記錄檔通常會含有多個資料庫的作業。

記錄檔是以十六進位方式編號,因此 E0000000009.log 後面的記錄檔是 E000000000A.log,不是 E0000000010.log。您可以使用 Windows 小算盤 (Calc.exe) 應用程式的 [工程型] 模式,將記錄檔序號轉換為它們的十進位值。作法是執行 Calc.exe,然後從 [檢視] 功能表中按一下 [工程型]。

若要檢視特定記錄檔的十進位序號,則可以使用 Exchange Server 資料庫公用程式 (Eseutil.exe) 工具來檢查它的標頭。每個記錄檔的前 4-KB 頁面會包含標頭資訊,用以說明及識別記錄檔及其所屬的資料庫。Eseutil /ml [記錄檔名稱] 命令會顯示標頭資訊。如需 Eseutil 的相關資訊,請參閱 Eseutil

如果使用錯誤的參數來顯示標頭 (例如,搭配使用 /ml 與資料庫標頭,而不是使用 /mh),則會顯示錯誤,或顯示的標頭資訊可能會不完整或不正確。

裝載資料庫時,您無法檢視該資料庫的標頭。裝載儲存群組中的任何資料庫時,您也無法檢視目前記錄檔 (Enn.log) 的標頭。只要有一個資料庫使用目前記錄檔,Exchange 就會開啟該記錄檔。然而,您可以在裝載資料庫時檢視檢查點檔案標頭。Exchange 會每隔 30 秒更新一次檢查點檔案,而且除非正在進行更新,否則都可以檢視它的標頭。

身為 Exchange 系統管理員,請務必了解 Exchange 檔案標頭。如果了解檔案標頭,就可以判斷哪些資料庫及記錄檔是一組的,以及成功復原所需要的檔案。

在下列記錄檔標頭範例中,請注意前四行。

Base name: e00
Log file: e00.log
lGeneration: 11 (0xB)
Checkpoint: (0xB,7DC,6F)

因為記錄檔名稱沒有序號,所以這些記錄檔標頭行顯示此記錄檔是目前的記錄檔。lGeneration 行顯示記錄在填滿並關閉之後,它的序號是 B (對應於十進位值 11)。基準名稱是 e00,因此最後一個記錄檔名稱會是 E000000000B.log。

先前標頭範例中的 Checkpoint 值實際上並不是讀取自記錄檔標頭,但顯示出來的就像它是自記錄檔標頭中讀取而來。Eseutil.exe 會直接從 Enn.chk 讀取 Checkpoint 值,因此您並不需要輸入個別的命令來取得檢查點檔案的位置。如果檢查點檔案已毀損,則 Checkpoint 值會是 NOT AVAILABLE。在此情況下,檢查點是在目前記錄檔 (0xB) 中,而數字 7DC6F 則指出檢查點在記錄檔中的位置。請注意,您在實務上很少會需要用到此資訊。

如果檢查點檔案毀損,Exchange 還是可以適當地復原及重新顯示記錄檔。而為了進行上述作業,Exchange 會開始掃描記錄檔 (以可用的最舊檔案開始,而不是從檢查點記錄開始)。Exchange 會略過已套用至資料庫的資料,而且循序使用記錄檔,直到找到必須套用的資料。

一般而言,Exchange 只需要一或兩秒的時間就可以掃描完已套用至資料庫的記錄檔。如果記錄檔中的作業必須要寫入至資料庫中,則可能需要 10 秒到數分鐘的時間來套用它們。平均來說,記錄檔的內容可以在 30 秒 (含) 以內寫入至資料庫。

正常關閉 Exchange 資料庫時,會將所有未完成的資料寫入至資料庫檔案中。而正常關閉之後,會將資料庫檔案集視為一致,而且 Exchange 會將它從其記錄資料流中分離出來。這表示資料庫檔案現在已十分完備;它們已具有最新的資訊。而且不需要有交易記錄,就可以啟動資料庫檔案。

您可以執行 Eseutil /mh 命令,並檢查檔案標頭,分辨是否已完全關閉資料庫。

如果已中斷儲存群組中之所有資料庫的連線,而且處於正常關機狀態,則可以放心地刪除所有記錄檔,而不會影響資料庫。如果您接著刪除了所有記錄檔,則 Exchange 會產生一連串新的記錄檔 (以 Enn00000001.log 開始)。您甚至可以將資料庫檔案移至已有記錄檔的不同伺服器或儲存群組中,而資料庫也會自行連接至不同記錄資料流。

note附註:
雖然您可以在關閉儲存群組中的所有資料庫之後刪除記錄檔,但是這樣做會影響還原較舊備份及向前復原的功能。雖然目前資料庫不再需要現有的記錄檔,但是如果必須還原較舊的資料庫,還是會需要用到它們。

如果資料庫是處於不正常關機狀態,則在重新裝載資料庫之前,必須要有檢查點之前的所有現有交易記錄。如果無法取得這些記錄檔,則必須執行 Eseutil /p 命令讓資料庫一致,並準備好資料庫以供啟動,以修復資料庫。

Caution請注意:
如果您必須修復資料庫,部分資料會遺失。通常只是會遺失少許的資料;但是卻會造成大的災難。在資料庫上執行 Eseutil /p 之後,應該使用下列兩個作業來完整修復資料庫:首先,請執行 Eseutil/d 重組資料庫。此作業會放棄並重建所有資料庫索引及空間樹狀目錄。其次,請在其 -fix 模式中執行資訊儲存庫完整性檢查程式 (Isinteg.exe) 工具。此工具會掃描資料庫中是否有因放棄未完成交易記錄而產生的邏輯不一致。例如,資料庫中的參照可能彼此都不是最新的。Isinteg.exe 會嘗試在遺失最少資料的情況下更正這類問題。

交易記錄除了可讓 Exchange 以可靠方式來復原意外停止的資料庫外,製作及還原線上備份時也需要有交易記錄。如需製作及還原線上備份的相關資訊,請參閱資料庫備份及還原

循環記錄

雖然循環記錄並不是建議的最佳作法,但是您可以設定 Exchange 啟用循環記錄以節省磁碟空間。循環記錄可以讓 Exchange 在資料庫認可交易記錄檔所含的資料之後,覆寫這些交易記錄檔。不過,如果啟用循環記錄,最多只能還原上次完整備份的資料。

在 Exchange 2007 使用的標準交易記錄中,儲存群組中的每個資料庫交易都會先寫入至記錄檔,然後再寫入至資料庫。當記錄檔的大小達到 1MB 時,會重新命名該記錄檔,並建立新的記錄檔。而經過一段時間後,這會產生一組的記錄檔。如果 Exchange 意外停止,則可以將資料從記錄檔中重新顯示至資料庫,以復原交易。循環記錄會在第一個記錄檔中所含的資料寫入至資料庫之後,覆寫及重複使用第一個記錄檔。

在 Exchange 2007 中,循環記錄預設會停用。而啟用循環記錄,會減少磁碟機儲存空間需求。不過,若沒有完整的一組交易記錄檔,則無法復原比最近一次的完整備份更新的任何資料。因此,在一般的生產環境中,不建議使用循環記錄。

如需如何在 Exchange 2007 中啟用及停用循環記錄的相關資訊,請參閱如何啟用或停用儲存群組的循環記錄

連續複寫及循環記錄

您可以將循環記錄與連續複寫合併。在此組態中,會有一個新類型的循環記錄,名為連續複寫循環記錄 (CRCL),其不同於本主題稍早說明的 ESE 循環記錄。不同於 ESE 循環記錄是由 Microsoft Exchange Information Store 服務來執行和管理,CRCL 是由 Microsoft Exchange 複寫服務來執行和管理。

啟用 ESE 循環記錄時,不會產生其他記錄檔,而是會在需要時,覆寫目前的記錄檔。然而,在連續複寫環境中,需要有記錄檔來傳送及重新顯示記錄。因此,當您啟用 CRCL 時,不會覆寫目前的記錄檔,並且會針對記錄傳送及重新顯示處理程序來產生關閉的記錄檔。具體而言,Microsoft Exchange 複寫服務會管理 CRCL,以維護記錄的連續性,而且如果仍需要這些記錄來進行複寫,記錄刪除器也不會將其刪除。因此,啟用 CRCL 對複寫應該不會有負面影響。

在 Exchange 2007 的量產發行 (RTM) 版本中,可支援將循環記錄與叢集連續複寫 (CCR) 或本機連續複寫 (LCR) 合併。然而,建議您不要這麼做,因為這樣一來,將備份還原之後,將無法進行向前復原功能。Exchange 2007 Service Pack 1 (SP1) 也允許對 CCR、LCR 或待命連續複寫 (SCR) 環境中的儲存群組啟用循環記錄。然而,基於上述的相同原因,也建議您不要這麼做。無論是在上述何種環境中啟用,該功能都是 CRCL,而不是 ESE 循環記錄 (亦稱為 Joint Engine Technology (JET) 循環記錄)。在 CCR、LCR 或 SCR 環境中,應一律使用下列程序來啟用或停用循環記錄:

  1. 使用 Suspend-StorageGroupCopy 指令程式暫停連續複寫。
  2. 啟用或停用循環記錄。如需如何啟用或停用循環記錄的詳細步驟,請參閱如何啟用或停用儲存群組的循環記錄
  3. 將資料庫卸載後再裝載在要啟用或停用循環記錄的儲存群組中。
  4. 使用 Resume-StorageGroupCopy 指令程式繼續連續複寫。

若為 LCR 環境中的儲存群組,在執行 Enable-StorageGroupCopy 指令程式來為儲存群組啟用 LCR 之前,您必須先將資料庫卸載後再裝載在該儲存群組中,以確保 Microsoft Exchange 資訊儲存服務能夠偵測到並採用目前的循環記錄設定。雖然 Microsoft Exchange Information Store 服務需要您將資料庫卸載後再裝載,以偵測並採用組態變更,但 Microsoft Exchange 複寫服務可動態偵測並採用組態變更,而不需重新啟動。因此,如果沒有執行前面的程序,資料庫最後的狀況就是,Microsoft Exchange 複寫服務以為循環記錄已停用 (或啟用),而 Microsoft Exchange Information Store 服務以為循環記錄是相反的狀態。這樣會導致記錄檔永久截斷。

note附註:
停用 LCR 或 SCR 可讓備份或循環記錄不先進行複製就刪除記錄檔,但 CCR 中沒有停用選項。無論 CRCL 是否啟用,在 CCR 中,永遠都不會刪除尚未複寫的記錄。

為了使建立的交易記錄數量獲得控制,系統管理員有時會在大型信箱移動期間啟用循環記錄。因為信箱移動作業牽涉到兩個不同的資料庫,所以您可以在信箱移動期間,為這兩個資料庫都啟用循環記錄。

note附註:
由於發生失敗時,循環記錄會妨礙儲存群組維持最新狀態,所以建議您使用循環記錄的時間不要太長。

若要移動信箱,或是進行會導致建立大量記錄檔的其他案例,您可以在 CCR、LCR 及 SCR 環境中啟用 CRCL。然而,在 CRCL 啟用期間,您不能執行任何備份。因此,您必須確定:

  • 移動信箱不會妨礙備份作業,因為如果 CRCL 啟用,您就不能執行備份。
  • 完成移動信箱之後,即停用 CRCL,以讓備份作業繼續。

若要確保您目前閱讀的是最新資訊,並尋找其他的 Exchange Server 2007 說明文件,請造訪 Exchange Server 技術資源中心.