Exchange 佇列問題與解答交易記錄檔、Cmdlet、遠端管理...等等

KC Lemson and Nino Bilic

問:你們為什麼在 Microsoft® Exchange Server 2007 中,把交易記錄檔大小降到 1MB?

答:Exchange 2007 有一項很酷的功能,叫做記錄檔傳送,這也是本機連續複寫 (Local Continuous Replication,LCR) 以及叢集連續複寫 (Cluster Continuous Replication,CCR) 等幾項新功能所採用的技術。在儲存群組 (SG) 層級啟用此功能時,SG 交易記錄檔會從實際執行中的 SG 複製到副本 SG。副本 SG 的記錄檔會在資料庫中重新顯示,以保持最新資料。這顯然是以最簡單的方式說明整個運作,但相信這樣已經足以提供概念。

其中的竅門就在於交易記錄檔必須先在實際執行的 SG 上關閉之後,才能傳送到副本 SG。換言之,必須等到 e00 記錄檔 (目前在第一個儲存群組中的記錄檔) 已滿、關閉並且重新命名之後,才能傳送。此外,還有一些設定可以控制此程序中的記錄檔數量,因為可用性與效能兩者無法兼得 (這些設定可以藉由在 Exchange Management Shell 中執行 Set-MailboxServer cmdlet 取得。說明檔有提供實際需要使用之參數的詳細資料)。

簡單的說,我們之所以會縮減交易記錄檔大小,是要將儲存群組兩個副本之間可能無法同步的資料最小化。例如,當實際執行資料庫的硬碟機損毀,而您必須自行從副本啟動 SG,這時候就會開始發揮作用。比較小的交易記錄檔,可以減少資料遺失的可能性。

這並不代表我們保證您只會遺失 1MB 的資料。雖然這些看起來都是交易記錄檔,但遺失的 1MB 檔案也有可能包括如 COMMIT 交易的 5MB 資料。在這種情況下,副本中可能會少了這 5MB 的資料,即使您可能已經接收五個記錄檔與資料,但最後一個少量資料的記錄檔以及必要的 COMMIT 交易是不可或缺的。

最終還是需要由您判斷,您在商務需求上是否能夠接受這樣的風險。犧牲少量資料的遺失以換取能夠在幾分鐘內就復原,與需要數小時的時間才能還原相較,或許可以接受。我們未來一定會再深入探討這個主題!

問:現在交易記錄檔變短了,我們是否會更快就把交易記錄檔用完?

答:在 Exchange 中,「用完」這個問題只會發生在交易記錄檔的名稱。在 Exchange Server 2003 中,交易記錄檔的命名方式如下:

E nn fffff.log

nn 是首碼,不同 SG 會有不同的首碼。在 SG 存留期間,nn 會維持不變,因此可以為儲存群組建立且名稱是唯一的交易記錄檔數量,基本上僅受限於 fffff 值,亦即大約是一百萬個記錄檔。由於有些客戶的郵件伺服器很繁忙,因此已經遭遇這項限制問題。

從 Exchange Server 2000 開始,我們就有提供 Hotfix 以便於達到限制時,在應用程式記錄檔中顯示事件 (請參閱 support.microsoft.com/kb/896001 以取得詳細資訊)。

那麼在 Exchange 2007 中又會發生什麼樣的情況呢?正如剛才所述,交易記錄檔已從 5MB (舊版 Exchange 的大小) 縮減為 1MB (Exchange 2007 的大小)。這是否表示只要有五分之一的資料,就會把唯一名稱的交易記錄檔用完?

答案是否定的。在 Exchange 2007 中,交易記錄檔的名稱格式如下:

E nn ffffffff.log

請注意我們一共有 ffffffff 個記錄檔可以使用,與舊版 Exchange 的 fffff 相差很多。由於內部可延伸儲存引擎 (Extensible Storage Engine,ESE) 的數學運算方式,Exchange 2007 無法建立所有 ffffffff 個記錄檔。相反的,它建立出 7fffffec 個記錄檔,這仍然是極龐大的數量 (如果您不相信,不妨從十六進位轉換為十進位看看!)

這在實際作業中代表什麼呢?實際上,這表示使用 Exchange 2007,您可以建立比舊版 Exchange 多上約 2048 倍的記錄檔。現在我們以五分之一大小的記錄檔計算:

2048 / 5 = 409.6

呈如上述,新的記錄檔命名配置可以處理比舊版多出 409 倍的資料量!而且別忘了,這只是每個 SG 的量,而不是每部伺服器的量,因為每個儲存群組都有不同的記錄檔首碼 (如 e00、e01 等等)。我們有沒有告訴過您,在 Exchange 2007 Enterprise 版中,您可以為每一部伺服器建立 50 個 SG 呢?我想在短時間內,應該不太可能用完交易記錄檔吧!

問:我如何遠端管理 Exchange 2007 伺服器?

答:遠端管理 Exchange 2007 伺服器的方式有數種可供選擇。第一,您可於 Exchange Server 以外的另一台機器上安裝 Exchange 2007 管理工具,只要這部機器執行的是 32 位元或 64 位元版本的 Windows Server® 2003 Service Pack 1 (SP1) 或更新的版本、Windows Server 2003 R2,或者 Windows XP SP2 (含) 或更新的版本。請注意,實際執行環境中並不支援在 32 位元硬體上安裝任何伺服器角色 (用戶端存取、信箱、邊緣...等等),但是有支援在 32 位元的電腦上安裝管理工具。此外也請記住,此為 Exchange Server 2007 的初版,因此 Windows Vista™ 不支援管理工具。

在某些組織裡,IT 部門可建立單一伺服器來做為管理伺服器,將各種產品所有必要的管理工具都安裝到這台伺服器上。接著需要使用這些工具的管理者,可透過終端機伺服器存取管理伺服器,以便進行遠端管理。在其他環境下,使用者可以將管理工具安裝到自己的桌面上。

透過主控台或 Shell,即可於組織的伺服器上執行作業。在主控台中可以看到伺服器,因此可以遠端執行任何作業。在 Shell 中,許多工作都有支援類似篩選旗標的伺服器,可以讓您將作業範圍設定在單一伺服器上。不過仍有幾個例外情形,亦即有些命令必須在本機執行,例如 Get-NetworkConnectionInfo 命令。

問:在最後一個資料行中,您有建議 Exchange 2007 伺服器應配置的 RAM 數量。那請問分頁檔的大小呢?

答:為了防止 Exchange 2007 伺服器發生潛在的虛擬記憶體不足錯誤,我們建議採用以下方式,來判斷您的系統分頁檔最佳大小。

若伺服器的 RAM 小於 8GB,分頁檔的最小值應為 RAM 的大小加上 10MB。因此若伺服器的 RAM 是 4GB,則至少需要 4GB 加 10MB。不過建議的分頁檔大小是 RAM 的大小乘以 1.5。因此,4GB 的伺服器就需要 6GB 的分頁檔大小。

此外,針對 RAM 有 8 GB 以上的伺服器,其分頁檔的最小值計算方式相同,也就是 RAM 的大小加上 10MB。不過建議大小則各有不同的判斷方式。基本上,在 RAM 超過 8GB 的伺服器上,如果較小的分頁檔會導致虛擬記憶體不足的錯誤,則最多只應該設為 RAM 的 1.5 倍。

請注意,此處所指的錯誤其實與虛擬記憶體片段無關 (這是 Exchange 2000 和 Exchange 2003 伺服器的問題)。這些是系統實際記錄的快顯錯誤,表示分頁檔大小已增加或分頁檔太小。

問:我想學習如何使用 Exchange Management Shell,但我過去從未使用過命令列來管理系統。請問我應該從哪裡開始學習?

答:首先,我們可以從基本知識開始。Exchange Management Shell 中的每個 cmdlet,都是由單一動詞和單一名詞組合而成。Exchange Management Shell 僅使用少數幾個動詞:「Get」是用來擷取物件屬性、「Set」是用來變更物件屬性,而「New」則是用來建立新物件,諸如此類。Exchange Management Shell 的名詞則包括許多 Exchange 管理員皆已熟知的概念 (例如 Mailbox、Contact、Queue 及 OWAVirtualDirectory)。除此之外,Exchange Server 2007 還有一些新概念 (例如 TransportRule、StorageGroupCopy 及 UMAutoAttendant)。因此在實際執行上,基本 cmdlet 看起來會像 New-Mailbox (建立信箱) 或 Get-Mailbox (擷取組織的信箱清單)。

然而大多數的 cmdlet 都必須更精確的指出您想要進行的工作。舉例來說,如果您想變更信箱屬性,就必須指定哪個信箱和哪個屬性。這點可以透過參數完成。倘若 New-Sandwich 是 cmdlet,那麼參數有可能是 -NumberOfTomatoSlices 4、-Bread Wheat,以及其他各種類似選項,以詳細指定您希望 sandwich 採用的格式 (-FlufferNutter $true-ahhhh yum)。

只要了解動詞-名詞的區分,就可以使用 Exchange Management Console (EMC) 精靈中的命令列,以熟悉哪些 cmdlet 會執行何種作業。在 EMC 中,執行精靈以建立新使用者。在精靈結束且作業完成之後,會出現精靈在幕後執行的命令列副本 (請參閱 [圖 1])。按下 Ctrl+C 可複製該對話方塊內容,以便您將 cmdlet 貼入記事本,並且和自己的簡單批次檔組合在一起。

Figure 1 Command-line exposure for creating a new user

Figure 1** Command-line exposure for creating a new user **(按影像可放大)

若您想要練習使用 cmdlet (但不想造成任何損害),有一個妙方是把 -WhatIf 放在命令列的尾端。如此一來,系統會告訴您執行命令會產生哪些動作,但不會實際變更系統。

只要熟悉基本 cmdlet (例如 *-Mailbox) 之後,就可以開始做其他嘗試。若要尋找其他 cmdlet,可使用 Get-ExCommand cmdlet,這會顯示出所有 Exchange 管理 cmdlet 的清單 (您必須在執行 Exchange Management Shell 的情況下做這個動作。只打開 Microsoft Command Shell 或者 Windows PowerShell™ 並無法讓您執行這個動作,也無法執行其他 Exchange 管理工作)。這份清單相當龐大,因此請使用萬用字元來找出您要的項目。例如 Get-ExCommand *database* 會傳回所有名稱裡包含 database 的 Exchange cmdlet,例如 Dismount-Database、Move-DatabasePath,和 New-MailboxDatabase。

如果您知道要找的部分名詞,可以循環顯示所有選項。例如,您可以輸入 Get-Mailbox 然後按下 Tab 鍵,以便循環顯示所有工作名稱的名詞中有 mailbox 的 cmdlet。您甚至可以合併使用萬用字元以及 Tab 鍵的自動完成功能。舉例而言,您可以輸入 Get-*Mailbox*,並使用 Tab 鍵來循環顯示可能的選項。

另一個簡單的方法是使用提示。每個 cmdlet 都有一組預設的必要參數,這是執行作業時必須有的基本參數。如 Get-Mailbox 等「Get」cmdlets,則不需要任何參數。根據預設,Get-Mailbox 會傳回整個組織的所有信箱清單 (此清單預設不得超過 1000。若要變更上限設定,您可以輸入像是 Get-Mailbox -ResultSize 2000)。建立或修改物件的 Cmdlets (如 Set 或 New) 會提示您輸入必要的資訊,例如要建立或修改的物件。舉例來說,若您執行 New-Mailbox,Shell 會提示您一一輸入密碼、資料庫、名稱...等等。

若要進一步了解特定 cmdlet 可用的參數,請使用說明系統:Help Move-DatabasePath (您也可以直接輸入 Move-DatabasePath、Move-DatabasePath -? ...等等,我們已嘗試涵蓋所有基礎部分)。說明中會提供 cmdlet 的描述以及參數清單,並詳述每一項的用途。您也可以使用 Get-Help cmdlet 存取說明 (只要輸入簡短的 Get-Help 豈不是太棒了?您應該很希望在真實世界中的某些白目朋友也能夠執行這個 cmdlet (以獲救) 吧?)

找出某 cmdlet 可用參數的另一種方法,是於參數名稱中使用 Tab 鍵功能。輸入 Get-Mailbox -S 並按下 Tab 鍵,就可以循環顯示 S 開頭的可用參數。

當然,您也可以參考詳盡的說明系統。若您無法在離線狀態下找到需要的項目,別忘了試試會定期更新的說明內容,網址為 go.microsoft.com/fwlink/?linkid=79421,以及位於 go.microsoft.com/fwlink/?linkid=64647 的快速參考指南。

上述所有內容都能幫助您開始學習 Exchange Management Console,但這些資訊也只論及命令列之強大功能與彈性的皮毛而已。我們還會在未來的專欄中詳加討論。

問:在 Exchange Server 2003 ESM (Exchange 系統管理員) 中,可以輕易看見所有使用者的信箱大小。這項功能在 Exchange 2007 裡好像找不到了。請問 Exchange 2007 是否也能有同樣的功能?

答:在新的 Exchange 2007 主控台中,您可以在信箱本身的 [一般] 內容頁上得知信箱大小。若您想要看到多重使用者的資料,必須使用 Exchange Management Shell。

若您執行 Get-MailboxStatistics,則可取得整個伺服器的資料 (不僅是特定資料庫)。根據預設,並不會顯示信箱大小,您必須執行使用 Format-List 的 cmdlet 才能取得大小資訊:

get-mailboxstatistics | format-list

更好的方法是選擇您想看的內容,然後傳送到資料表中。在本範例中,我們將取得信箱的顯示名稱、郵件大小總數、刪除的郵件大小總數,以及信箱所屬的資料庫:

Get-MailboxStatistics | Select-Object 
displayname,totalitemsize,
totaldeleteditemsize,databasename 
| Format-Table

您可以依照想要尋找的資訊,使用不同的輸出格式。在本範例中,Format-Table 會比 Format-List 合適

KC Lemson 目前擔任 Exchange Server 小組的首席專案經理。她的 ATM 密碼是 0000:別一次把錢花光了。

Nino Bilic 目前擔任技術組長,他閒暇時都在忙著收取 $1,000 元的支票,這是他為 Bill (比爾) 轉寄電子郵件的酬勞。

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.