了解具名內容和複本識別碼限制對 Exchange 資料庫的影響

 

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

上次修改主題的時間: 2012-03-26

Microsoft 使用訊息 API (MAPI) 做為連接不同訊息傳輸元件的方法。MAPI 規格將大多數的物件以內容來呈現。為識別這些內容,MAPI 會使用識別碼 (也稱為內容識別碼或 PropID)。

內容識別碼是一組範圍從 1 到 0xFFFF 的十六進位值。可允許 65,534 個內容。這些內容可區分成下列群組 (也稱為範圍):

  • 可傳輸的內容 - 這個範圍是由 Exchange 可以隨郵件傳送的內容所組成。
  • 內部內容 - 這個範圍是由只能由 Exchange 設定的內容所組成。
  • 非可傳輸內容 - 這個範圍呈現 Exchange 傳遞訊息時,不能在組織外傳遞的內容。

這些範圍中的內容稱為標準內容。標準 MAPI 內容有固定的 ID,表示所有低於 0x8000 的內容。

除了這些範圍外,還有另一個範圍。這是最大的範圍,表示 0x8000 以上的所有內容。這個範圍中的內容稱為具名內容。具名內容會為廠商提供一種方法,透過新增他們自己的內容,來延伸標準的 MAPI 內容集。

具名內容是由下列兩種主要的類型所組成:

  • 以號碼做為名稱的內容。這些是 Microsoft Outlook 這類程式使用的內容。這些內容的名稱通常是在來源檔案中定義。
  • 以字串值做為名稱的內容。這些內容稱為「字串具名內容」。除了名稱外,這些內容都還有一個關聯的 GUID。這能讓開發人員將具名內容劃分成內容集。

因為具名內容不具備專門指定給它們的 ID,所以 MAPI 會提供一種機能,可為具名內容動態建立唯一的 ID,並持續維護具名內容和其唯一 ID 之間的對應。不過,動態建立這些 ID 表示具名內容的內容 ID 會隨著電腦而不同。

Microsoft Exchange 資訊儲存庫服務會針對每個資料庫維護一個具名內容表格。當資訊儲存庫在處理含自訂資訊的訊息時,會針對先前未曾處理過的任何自訂內容,自動將項目新增至具名內容表格中。

透過網際網路傳送的訊息,都會以名為 Message/RFC822 的格式進行傳輸。這是一種文字格式,其中包含純文字格式的訊息,以及包含一組機碼和值配對的標頭。而 RFC822 支援一組名為 X-header 的內容。

為將 Message/RFC822 格式轉換成 MAPI 格式,Exchange 使用一個名為 Imail 的元件。Imail 會從 RFC822 訊息中取出機碼值組,如果可能的話,就會將機碼值組轉換成 MAPI 內容。Imail 同時還提供逆向轉換,可以取出 MAPI 內容並將其轉換成 RFC822 機碼值組。

從 Microsoft Exchange 2000 Server 開始,Imail 元件即可支援名為臨機操作標頭的標頭。這些是 Exchange 保留以供未來使用的標頭。臨機操作標頭定義中包含的其中一個標頭類型是 X-header。因此,Exchange 會儲存 X-header 資訊以供稍後使用。

例如,當某家公司實作與 Exchange 整合的新應用程式並使用 SMTP X-header 時,Microsoft Exchange 資訊儲存庫服務會在處理包含該 X-header 的第一封訊息時,為該自訂資訊建立具名內容。

note附註:
任何包含相同 X-header 的後續訊息,Exchange 都不會建立其他具名內容。

Exchange 儲存這些具名內容和包含特定 X-header 的訊息。Microsoft 會從透過網際網路收到的訊息,發佈 PS_INTERNET_HEADERS 命名空間來群組 X-header。

具名內容的限制

下列清單摘要一些具名內容的相關重點:

  • X-header 是 Message/RFC822 訊息的欄位,存放某些重要的值。
  • 具名內容是 Exchange 用來針對特定值保留識別碼的方式。
  • 具名內容的內容識別碼範圍從 0x8000 到 0xFFFF。因此,能在訊息資料庫 (MDB) 中建立的具名內容數量是有限制的。
  • 具名內容一旦配置後,就無法取消配置。該內容便會保留給特定的名稱和 GUID 組合。
    note附註:
    雖然技術上可以復原已配置的具名內容。但是程序很困難,而且在檢查每個訊息以判斷哪個內容尚未使用的期間,需要卸載 MDB。

因為可用的具名內容數量有限,所以 Exchange 會使用配額系統來追蹤已配置的具名內容數量。在這個系統中,Store.exe 處理程序會在可用的具名內容識別碼快用完時警告您。到達第二個閾值時,Store.exe 處理程序就不會再配置具名內容識別碼。

具名內容耗盡

雖然許多程式都會使用具名內容,但 Microsoft Outlook 才是具名內容的最大使用者。當具名內容識別碼用盡時,Outlook 就無法對應具名內容。在此例中,您可能會遇到類似下列的狀況:

  • 應用程式記錄檔中記錄事件識別碼 9666 和 9667。如需相關資訊,請參閱Exchange 資料庫的具名內容或複本識別碼用盡時,收到事件 9666、9667、9668 及 9669

  • 無法傳遞包含無法對應之內容的訊息。在您檢查受影響訊息的郵件追蹤資訊時,注意到有類似下列的資訊:

    550 5.2.0 STOREDRV.Deliver:Microsoft Exchange 資訊儲存庫服務報告一個錯誤。下列資訊應該能協助識別這個錯誤的原因:

  • 在 Outlook 中安裝一個會新增具名內容或 X-header 到訊息的增益集時,某些訊息可能無法傳送給組織中的其他使用者。在此例中,寄件者會收到類似下列的未傳遞回報 (NDR):

    該訊息已到達收件者的電子郵件系統,但是傳遞遭到拒絕。將會嘗試重送訊息。如果仍然失敗,請連絡您的系統管理員。

複本識別碼

限制具名內容可用性的問題也會影響公用資料夾複本識別碼。每個資料庫之內容識別碼的個數上限為 32,767 個。若特定的資料庫已達此限制,Exchange 便無法再建立任何新的內容識別碼。

如果此問題發生在信箱資料庫上,您必須建立新的信箱資料庫、將所有信箱移至新的資料庫,並刪除已達內容識別碼限制的信箱資料庫。接著可建立新的信箱資料庫,並將信箱移回該信箱資料庫。

若此問題發生在公用資料夾資料庫上,則復原程序會更為複雜。在此例中,您必須將所有的公用資料夾複寫到另一部伺服器,然後刪除受影響的公用資料夾資料庫。接著將內容複寫回原始的伺服器。不過,如果已經設定了公用資料夾的複寫,可能您組織中的其他公用資料夾資料庫也包含了用盡具名內容的項目。這些資料庫可能也將達到設定的識別碼限制。若要解決此問題,您必須設定公用資料夾的過時管理,以便清除不再存取且可能消耗具名內容的較舊內容。此外,您也可以將公用資料夾資料庫的內容分散到多個公用資料夾資料庫。

依預設,Microsoft Exchange Server 2007 對於由已驗證使用者所建立的具名內容以及複本識別碼,配額為 16,384 個。由未驗證之使用者所建立的具名內容預設配額則為 8,192 個。這些預設配額可讓您接收到有關可能會耗盡內容識別碼的早期通知。接著您可以在到達上限而導致資料庫無法使用之前,先採取行動。因此,配額可協助您將有問題之應用程式或惡意阻絕服務攻擊的影響降至最低。您也可以針對具名內容和複本識別碼的數量設定配額。如需設定配額的詳細步驟,請參閱如何設定 Exchange 2007 資料庫的具名內容和複本識別碼配額

Exchange 2007 SP1 更新彙總套件 8 和 Exchange 2007 SP2 中的 X-Header 變更

從 Exchange Server 2007 SP1 的更新彙總套件 8 開始,已經針對 Exchange 支援 X-header 的方法進行變更。

note附註:
這些變更也包含在 Exchange 2007 Service Pack 2 (SP2) 中。

在舊版 Exchange 組建中,X-header 會在資料庫等級提升。因此,如果有特定使用者在資料庫對應具名內容,該資料庫的其他使用者就會針對該名稱和 GUID 組合收到相同的內容識別碼。更新彙總套件 8 和之後的更新,會針對那些可能耗用具名內容來儲存 X-header 值的活動實作新規則。

note附註:
如果特定 X-header 值的具名內容已在資料庫提升,更新彙總套件 8 和之後的更新就不會移除它。會保留現有的 X-header 對應。但是,如果 Exchange 收到的訊息包含未曾在資料庫中提升的 X-header,則新的 X-header 提升規則就會生效。

使用新的 X-header 提升規則後,許多會耗用新具名內容來保留 X-header 資料的情況就不會再發生。下列各節會描述部份的案例。

不會再耗用具名內容來保留 X-header 的案例

匿名提交

來自網際網路的匿名電子郵件不會再為 X-header 耗用具名內容。雖然會保留匿名電子郵件的現有 X-header 資訊,但 X-header 的值不會在電子郵件上儲存為內容。

內嵌訊息

會建立內嵌訊息功能,當做 MAPI 應用程式的交互操作功能。這個功能可讓您設定信封或頂層內容。內嵌訊息不會再耗用新的具名內容。

日誌郵件

日誌郵件代表 Exchange 中最大量的 X-header 耗用。請考慮下列案例:

  • 您的組織中有 100 個資料庫和一個日誌資料庫。
  • 每個訊息資料庫 (MDB) 每個月均會暴露於 100 個來自網際網路的新 X-header。

在此案例中,日誌 MDB 每個月會受限於 100 x 100 個新 X-header。因此,日誌 MDB 很快就會用盡可用的具名內容。

note附註:
雖然日誌郵件不會再提升新的 X-header 對應,但日誌內容仍會如預期儲存。例如,仍會儲存以日誌加以記錄的報告和郵件。

仍會耗用具名內容來保留 X-header 的案例

已驗證的使用者

已驗證的使用者仍然可以建立會提升其 X-header 的郵件。

MAPI 應用程式

MAPI 應用程式仍可以建立具名內容 (這些位於 PS_INTERNET_HEADERS 命名空間的內容將會是 X-header)。使用內容對應的 Exchange Web 服務應用程式也可以建立具名內容。這些內容也可以是 X-header。

note附註:
不需要對使用 MAPI 之 X-header 的應用程式進行任何變更。應用程式就會正確要求具名內容組合的識別碼。例如,應用程式會要求 PS_INTERNET_HEADERS 和 "X-<HeaderString>"。

如果在要求中使用 MAPI_CREATE 旗標,應用程式會自動將特定 X-header 新增到 MDB 保留的 X-header 清單中。此外,如果應用程式藉由在 PS_INTERNET_HEADERS 命名空間中建立具名內容對應來設定 MAPI 的 X-header,就已經為 X-header 建立對應。Exchange 將會保留這個對應給內送郵件,並為外寄郵件產生對應。

important重要事項:
如果應用程式在要求具名內容識別碼時不使用 MAPI_CREATE,並且所要求的名稱位於 PS_INTERNET_HEADERS 命名空間而另一個用戶端尚未要求識別碼,則應用程式將無法運作。但在獲授權的用戶端或 MAPI 用戶端依名稱要求 X-header 後,應用程式就可以正常運作。

Exchange 2010 的內容變更

Exchange Server 2010 包含一些額外的改良功能,可以解決本文件中所述的問題。在 Exchange 2010 中,具名內容資源已移至信箱等級,而不是資料庫等級。

相關資訊

如需管理資料庫的相關資訊,請參閱管理儲存群組及儲存區

若要進一步了解 Exchange 2007 中的安全性及保護功能,請參閱安全性與保護

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