公用文件夹复制

 

上一次修改主题: 2005-05-23

在 Exchange 系统管理器中,公用文件夹树的根被称为顶级层次结构。在 Exchange Server 2003 中,可以有几个顶级层次结构。公用文件夹顶级层次结构(也称为 MAPI 顶级层次结构)只是很多公用文件夹树中的一个。Exchange Server 2003 中的 MAPI 顶级层次结构所执行的任务与它在 Exchange 以前的版本中所执行的任务相同,并且也要复制 Exchange 2000 或 Exchange 5.5 公用文件夹树。Exchange Server 2003 还支持其他树,通常称为应用程序顶级层次结构。每个顶级层次结构都有一个目录条目。该条目中包含向后指向顶级层次结构中所有公用存储的可分辨名称的链接。MAPI 顶级层次结构在 Exchange 组织中的“第一个管理组”下面的目录中受到保护。

单个服务器只能在一个顶级层次结构中驻留一个公用文件夹存储数据库。对于主动/主动群集来说,这意味着由于两个 Exchange 虚拟服务器 (EVS) 有可能都运行在同一个物理节点上,因此只有一个顶级层次结构数据库实例可以跨两个 EVS 而存在。Exchange Server 2003 Service Pack 1 现在支持在主动/被动群集中驻留多个公用文件夹树实例,因为单个物理节点无法驻留多个 EVS。

公用文件夹数据库被划分为两个树:IPM_Subtree 和 non-IPM_Subtree。IPM_Subtree 包含对用户和客户端可见的文件夹。例如,Microsoft Outlook 所创建的文件夹存在于 IPM_Subtree 中。用户可以直接搜索、访问 IPM_Subtree 中的文件夹,并且这些文件夹可用来存储用户数据。non-IPM_Subtree 包含的文件夹不能被用户直接访问。non-IPM_Subtree 文件夹的复制方式与 IPM_Subtree 文件夹完全相同,但无法由用户直接操纵。

non-IPM_Subtree 包括以下文件夹:

  • 站点文件夹 它们是文件夹(例如,SCHEDULE+ FREE BUSY)、事件注册表、MAPI 表单和脱机地址列表。
  • 限制 这些文件夹不被复制。
  • 视图 这些文件夹不被复制。

在 Exchange 系统管理器中查看系统文件夹时,站点文件夹是可见的。站点文件夹的复制方式与普通文件夹相同,并且它们的复制列表可以按普通公用文件夹的修改方式进行修改。管理组中运行 Exchange Server 2003 的第一个服务器含有脱机地址列表的副本、忙/闲数据以及其他站点文件夹的副本。可以通过 Exchange 系统管理器更改这些文件夹的位置(即驻留这些文件夹的公用文件夹存储)。每个管理组都有一个站点文件夹服务器(站点中的第一个服务器),这被作为管理组的目录条目的属性进行存储。这决定了由哪个服务器负责确保站点文件夹的存在。

公用文件夹复制是使用基于电子邮件的复制引擎在同一个顶级层次结构中的公用文件夹存储之间传输公用文件夹数据的过程。该过程对 MAPI 顶级层次结构和应用程序顶级层次结构都是相同的。文件夹层次结构是通过层次结构复制邮件进行复制的,而内容文件夹则是通过各个文件夹副本之间的内容复制邮件进行复制的。此外,还有回填请求和响应邮件,以及状态邮件和状态请求邮件,它们使存储之间的复制保持同步。

note注意:
存储在内部按文件夹 ID (FID) 确定文件夹的地址,FID 是十六进制 ID;例如,1-2A45。FID 是公用文件夹存储中的文件夹表中的行。同样,按邮件 ID (MID) 来引用邮件,MID 是 MsgFolder 表中的行。例如,层次结构复制邮件是 ID 为 1-1 的文件夹的内容复制邮件的特殊类型。

复制使用标准传输过程将复制邮件发送到其他公用文件夹存储。如果更新必须传到多个公用文件夹存储,那么将生成单个复制邮件,并发往多个公用文件夹存储(换句话说,发往文件夹的副本列表,因为对于层次结构来说,这是公用文件夹存储在顶级位置的所有项目)。SMTP 传输引擎必须对邮件进行分类和分叉,以便将它传递到每个单独的公用文件夹存储。有关邮件分类和分叉的详细信息,请参阅 SMTP 传输体系结构

公用文件夹复制是基于电子邮件的。复制邮件是在每个顶级层次结构中的公用文件夹存储之间发送的电子邮件。因此,公用文件夹存储之间必须有电子邮件路径,这样才能启用复制。

文件夹复制是通过在公用文件夹存储之间发送电子邮件来进行的。因此,公用文件夹存储需要有电子邮件地址(该地址由收件人更新服务添加)。

将复制数据放在准备发送的复制邮件中的过程称为打包。从复制邮件中检索复制数据的过程称为解包。同一个文件夹的多个层次结构更新或多个内容更新都可以打包到单个复制邮件中。这样可以减少邮件通信,因为单个邮件可以包含多个更新(换句话说,有更少的邮件信封和邮件头开销)。层次结构更新无法与内容更新一起打包到同一个复制邮件中,而不同文件夹的内容更新也无法打包到同一个复制邮件中。

所有更新(创建、删除和修改)都会被分配更改号码。更改号码由复制引擎用来跟踪更新。对文件夹的每个修改都会被指定一个更改号码。更新被复制到另一个服务器时,特定更改的更改号码会附带在更新中。然后,接收服务器使用更改号码来确定是否这是新的更改。复制邮件也携带一份存在于发送服务器上的文件夹中的完整的更改号码集合,以便接收服务器可以确定是否它丢失了任何数据。一个更改号码集合称为更改号码集 (CNset)。

有六种复制邮件类型。这六种类型是:层次结构复制邮件(FID 为 1-1 的内容复制)、内容复制邮件(在各个文件夹副本之间复制内容)、回填请求邮件、回填响应邮件、状态邮件和状态请求邮件。下表描述了这六种邮件类型。

复制邮件类型

邮件类型 描述 何时使用

层次结构复制邮件 (0x2)

层次结构复制邮件是 ID 为 1-1 (FID 1-1) 的特殊文件夹的副本之间的复制邮件。

将层次结构更改从一个公用文件夹存储复制到同一个顶级层次结构上其他所有公用文件夹存储。

内容复制邮件 (0x4)

内容复制邮件在各个文件夹之间复制内容更新。公用文件夹存储只向包含该文件夹副本的另一个公用文件夹存储发送内容复制。

将内容更改从一个副本复制到该文件夹的所有其他内容副本。

回填请求邮件 (0x8)

回填是丢失复制更新的公用文件夹存储请求重新发送已丢失的数据的过程。回填过程有两个部分:回填请求和回填响应。当公用文件夹存储确定它没有被同步时,它会在检测到文件夹中的 CNSet 与某些最近收到的复制邮件中的 CNSet 相比存在差异时发出回填请求。该过程需要通过复制,或通过由其他公用文件夹存储所发送的状态邮件来完成。

回填请求邮件向另一个公用文件夹存储请求在 CNSet 中丢失的数据(数据包括层次结构和内容)。回填请求邮件只发送给文件夹的其他内容副本(如果这是针对层次结构的,则发送给所有顶级层次结构成员)。

回填响应邮件(0x80000002 或 0x80000004)

回填响应在结构上与它们的正常对应项相同,但被作为回填请求的响应发送,并且只发往请求者。它们包含明确请求的更改内容。如果所有被请求的数据都太大而无法用单个响应回答,则有可能对单个请求发送多个响应。而且,响应可能根本不包含任何数据。

回填响应邮件将丢失的数据发送给请求丢失更新 (CNSet) 的公用文件夹存储。

状态邮件(0x10)

状态邮件是作为对状态请求的响应而发送的邮件。它包含该服务器所拥有的更改的完整 CNSet。该更改集并非必须代表实际发生的所有更改,因为所有更改可能还没有复制到该特定公用文件夹存储。

在 Exchange 2000 Server 之前,公用文件夹存储中所有文件夹的状态邮件每隔 24 小时广播。这导致网络超载。因此,Exchange 2000 Server 中删除了这种定期的广播。

将文件夹的当前 CNSet 发送到该文件夹的另一个副本。用于层次结构(文件夹 1-1 的副本)和内容(特定的内容副本)。

状态请求邮件 (0x20)

将文件夹的当前 CNSet 发送给其他所有副本。它同时请求这些副本的某些子集返回它们自己的 CNSet。该响应作为状态邮件返回。如果发出请求的服务器的 CNSet 不是被请求的服务器的更改集的严格子集,则被请求的服务器不会进行响应。

在以下情况下 Exchange 存储将发送状态请求邮件:

  • 公用文件夹的现有副本可能已经丢失了复制邮件,或者可能已经从过时备份还原。状态请求邮件由一个公用文件夹存储发送到另一个公用文件夹存储,以确定是否在本地丢失了任何更改。
  • 公用文件夹的新副本将添加到公用文件夹存储中。文件夹的新副本将生成对内容的状态请求。
  • 新的公用文件夹存储被创建,并与特定公用文件夹层次结构相关联。由于创建了新的层次结构文件夹 (FID 1-1),因此新的公用文件夹存储将生成层次结构状态请求。
  • 已从公用文件夹存储中删除公用文件夹的现有副本。由于层次结构文件夹 (FID 1-1) 的内容发生了更改,因此被删除的公用文件夹也会生成状态请求。

公用文件夹存储通过电子邮件相互发送复制邮件。因此,在公用文件夹存储之间必须要有电子邮件路径,这样才能接收复制邮件。Store.exe 进程中有一个连续运行的线程,它会轮询复制事件。复制事件以特定时间间隔定期发生。当预定的事件发生时,复制线程将生成新的线程,后者将执行指定的复制任务。下面是默认的复制时间间隔:

  • 层次结构复制事件每隔 5 分钟发生一次。
  • 内容复制事件每隔 15 分钟发生一次。
  • 状态邮件在最后一次例行复制广播之后被广播 24 小时。

一旦修改了层次结构,就会生成层次结构复制邮件。下面是层次结构修改示例:

  • 创建、删除或重命名文件夹
  • 修改文件夹权限或描述
  • 更改复制日程和优先级设置
  • 向文件夹添加内容或从文件夹中删除内容
  • 修改副本列表
  • 在层次结构中移动文件夹

下图说明了层次结构复制过程。

c205e2b8-7e5a-44b4-bfe2-48040152948d

在该图中,文件夹 1、文件夹 2 和文件夹 3 被添加到服务器 A 中。然后,服务器 A 将层次结构更改复制到服务器 B,以便服务器 B 知道层次结构中的这些公用文件夹。服务器 B 上用户现在可以导航整个层次结构,并选择这些文件夹中的任何一个,但只有服务器 A 有公用文件夹的内容。客户端尝试访问文件夹 1、文件夹 2 或文件夹 3 时,服务器 B 将客户端重定向到服务器 A。服务器 A 将内容返回给客户端,然后该客户端就可以显示内容。重定向过程对用户是透明的。

文件夹内容会在文件夹的各个副本之间进行复制。文件夹内容被修改时,将通过更改号码来跟踪更改。到达复制间隔时,更改将被复制到拥有该文件夹副本的其他所有公用文件夹存储。

下图说明了内容复制过程。

606cb78f-bd85-45b1-820f-84cf31c23961

在该图中,项目 1 被投递到服务器 A 上的文件夹中,而该文件夹在服务器 B 上拥有副本。因此,服务器 A 上的公用文件夹存储将把更改复制到服务器 B 上的公用文件夹存储。同样,项目 2 和 3 被投递并复制。

在整个回填过程中文件夹将保持同步。只有当文件夹丢失内容时才会发生回填。因此,对于发出回填请求的文件夹来说,它必须首先确定它丢失了某个更新。这是通过确定各个文件夹的文件夹 CNSet 中是否有丢失的序列来完成的。

内容回填和层次结构回填的工作方式相同。层次结构回填是在文件夹 1-1 的 CNSet 存在不连续时发出的,内容回填则是在其他任何文件夹中存在不连续而请求的。

回填过程可以占用较长时间,尤其是在公用文件夹存储发生故障并丢失了原始复制更新和随后的状态邮件时。它可能没有意识到它丢失了内容,直到后继复制邮件到来时,才会发现这一点。

回填数组用来存储挂起的回填请求。公用文件夹存储确定文件夹未同步时,它会将一个条目写入回填数组。该条目是对来自另一个文件夹副本的丢失数据的挂起请求。该条目将停留在回填数组中直到超时,发生超时时将发出回填请求。下表列出了默认回填超时。

默认回填超时

回填 站点内 站点间

初始回填

6 小时

12 小时

第一次回填重试

12 小时

24 小时

后续回填重试

24 小时

48 小时

如果第一次回填尝试未得到答复,则随后的回填尝试会在发送之前等待更长时间。延长这些时间是为了防止发生不必要的回填。复制邮件可能正在传输、被延迟或等待连接器的日程安排。如果回填超时太短,则公用文件夹存储将开始对已在传输中的邮件发出回填请求。

状态邮件有两个类别:状态请求和状态邮件。状态请求邮件从一个公用文件夹存储发送到另一个公用文件夹存储,以请求另一个公用文件夹存储的特定文件夹的当前状态。状态邮件从一个公用文件夹存储发送到另一个公用文件夹存储,以指示发送方服务器上特定文件夹的当前状态。如果状态邮件指示发送方公用文件夹存储拥有有关该文件夹的更新的信息,则接收方存储将把一个条目写入到它的回填数组以请求执行回填。如果结果显示 CNSet 是相等的(或接收方服务器更新),则不执行任何操作。

在下列两种环境下,公用文件夹存储将生成状态邮件:

  • 响应状态请求 如果公用文件夹存储从另一个公用文件夹存储那里收到状态请求,它将返回状态邮件。这发生在文件夹的副本列表被更改时(例如,从服务器删除文件夹)。
  • 文件夹发生最后一次本地更改之后 24 小时 这是对以前的 Exchange 版本的重要更改。文件夹发生更改时,将为该文件夹设置状态邮件的过期时间。如果对该文件夹进行另一次更改,则过期时间将重置为 24 小时。

到达过期时间之后,将为该文件夹生成状态邮件。生成状态邮件之后,将清除过期时间,并且不会为该文件夹生成其他状态邮件,除非发生另一次更改,如果这样将把过期时间重置为 24 小时。

默认情况下,用于确定是否应当发送状态邮件的线程在格林威治标准时间 12:15 A.M. 和 12:15 P.M. 运行。当它运行时,它将检查并确定是否已经到达任何文件夹的超时时间,如果已到达,它将广播状态邮件。因此,它可以用最多 36 小时的零更改时间来生成状态邮件。

可以用以下注册表设置改变复制状态线程的定时:

  • Replication Send Status Timeout(复制发送状态超时)
  • Replication Send Status Alignment(复制发送状态调整)
  • Replication Send Status Alignment Skew(复制发送状态调整偏差)

在 Exchange Server 2003 发送的状态邮件数目减少的情况下,修改默认值不是必需的。有关这些设置的详细信息,请参阅 Microsoft 知识库文章 203170“XADM: Controlling Public Folder Hierarchy Status Messages”(英文)。

在公用文件夹存储需要远程服务器的特定文件夹的状态时,发生状态请求。状态请求可能触发返回状态邮件,这取决于环境。

状态请求是在以下环境中生成的:

  • 第一次装入新的公用存储时 当公用文件夹存储被第一次装入时,它会为文件夹 1-1 生成层次结构状态请求。(因为不能给该公用文件夹存储分配内容副本,所以它丢失的唯一内容只是层次结构)。这会触发另一个公用文件夹存储发送层次结构的状态邮件,而这将导致在新的服务器的回填数组中添加几个条目。此后不久,将发送对丢失的更改的回填请求,这将使其他服务器发送其中包含丢失的更新的复制邮件。
  • 文件夹的副本列表发生更改时 文件夹的副本列表发生更改时,将生成状态请求邮件。添加新的副本、删除副本或临时副本重新驻留都将生成状态请求。
  • 从备份还原公用存储数据库时 当被还原的数据库脱离复制循环一段不确定的时间后,将广播对层次结构和层次结构中的所有内容副本的状态请求。该请求完成两件事。所有其他服务器都将获得经过修订的该服务器更改号码信息,并且刚还原的数据库上将发生大量的更改号码信息更新。这将导致回填条目被归档,并最终导致发送回填请求。

修改副本列表是对层次结构的更改。但是,因为副本列表正在更改(文件夹副本正在被创建或从服务器删除),所以还会使用状态邮件和状态请求。

新的副本添加到文件夹中时,将执行下列步骤:

  1. 发送层次结构复制邮件,以便复制文件夹的副本列表中的更改。
  2. 作为副本新添加的服务器向其他所有内容副本服务器发送状态请求邮件。
  3. 因为新添加的服务器的 CNSet 为空,因此它是所有其他内容副本的 CNSet 的严格意义下的子集,所以它们全部都会用状态邮件做出响应。
  4. 回填条目被归档,回填请求被发送到相应的服务器,同时服务器就内容做出响应。
  5. 在步骤 1 之后的任一时刻,其他内容副本有可能向新的副本服务器发送常规内容复制广播。

步骤 1 和 2 可能不会总是按同一顺序发生,这取决于最初的更改发生在哪个公用文件夹存储上。如果管理员在有内容副本的服务器上进行更改,那么步骤 1 和 2 将按上述顺序发生。如果管理员在驻留新副本的服务器上进行更改,则步骤 1 和 2 可能按相反的顺序发生。

从服务器删除副本时,不会立即删除文件夹。而是将文件夹置于延迟删除状态。当文件夹处于延迟删除状态时,不能对它进行管理,客户端也无法查看它。(Exchange 系统管理器不会在公用文件夹存储上所驻留的文件夹的列表上显示该文件夹。)

延迟删除状态之所以存在,是为了让其他副本可以从它那里复制任何丢失的数据。延迟删除文件夹从其他所有副本那里收到状态邮件之后(这表示文件夹被同步),将删除这个被删除的副本。该过程确保:在将文件夹的唯一副本从一个服务器更改到另一个服务器的情况下,不会丢失任何内容。

删除副本时,将执行下列步骤:

  1. 从副本列表中删除文件夹。
  2. 复制层次结构邮件,以指示文件夹状态中的更改(例如,活动 -> 延迟删除)。
  3. 驻留“延迟删除”文件夹的服务器发送状态请求,该请求要求做出响应。
  4. 带有副本的服务器使用状态邮件对状态请求做出响应。如果状态邮件指示 CNSet 至少与要删除的副本一样新,则公用文件夹存储将继续执行步骤 5。否则,它将继续发送状态请求,直至收到正确的响应。
  5. 要删除的文件夹将其状态从延迟删除更改为立即删除,并删除该文件夹。

每个被复制的文件夹(包括层次结构)在复制状态表中都有一个行集,复制状态表包含有关每个文件夹的复制状态信息。文件夹的行集中的每一行代表该文件夹的一个副本。在其他内容中,本地服务器的行还包含最后一次广播的更改号码、本地拥有的 CNSet、回填数组、应当发生下一次状态广播的时间以及其他数据。其他副本的行则包含本地服务器最后一次从其他每个服务器那里所接收的 CNSet 信息(每行表示一个服务器)、来自其他每个服务器的复制电子邮件的平均传输时间、最后向其他每个服务器发送回填请求的时间等等。

每次发送复制邮件时,文件夹本地副本的复制状态表中的 CNSet 将附带在邮件中。

复制状态表本身不会复制。复制是由来自 CNSet 中的数据生成的。这就是公用文件夹存储确定文件夹的其他副本所包含数据的方法。

note注意:
每个服务器都会使用复制 ID (ReplID) 来跟踪来自其他服务器的更新。ReplID 在本地进行计算。因此,公用文件夹存储不会在多个服务器上具有相同的 ReplID。

下表说明与复制事件关联的某些更普通的默认超时。当到达这些默认超时时,主要复制任务线程将生成其他工作线程以处理复制任务。如果没有要复制的内容,则线程只是退出,而不生成任何复制邮件。

默认复制事件时间

复制事件 默认超时 注释

复制过期

24 小时

检查文件夹是否过期的频率。

始终发送复制

15 分钟

这是默认的始终复制值。这是检查存储以确定它是否需要复制内容的频率。可以使用 Exchange 系统管理器调整该值。

发送文件夹树复制

5 分钟

这是公用文件夹存储检查是否需要发送层次结构复制邮件的频率。

复制发送状态超时

24 小时

这是公用文件夹存储检查是否应当发送文件夹的状态邮件的频率。

复制超时

5 分钟

这是公用文件夹存储检查是否任何回填条目已经超时的频率。

复制新副本回填请求延迟

15 分钟

这是当数据在相同站点上可用时,在为新文件夹副本发送回填请求之前所使用的时间延迟。

复制回填请求短延迟

6 小时

这是当数据在相同站点上可用时,在发送回填请求之前所使用的时间延迟。

复制回填请求长延迟

12 小时

这是当数据在相同站点上不可用时,在发送回填请求之前所使用的时间延迟。

复制回填请求短超时

12 小时

这是当数据在相同站点上可用时,在重试发送回填请求时所使用的超时值。

复制回填请求长超时

24 小时

这是当数据在相同站点上不可用时,在重试发送回填请求时所使用的超时值。

复制回填请求短超时重试

24 小时

这是当数据在相同站点上可用并且这是重试以前的回填请求时,在发送回填请求时所使用的超时值。

复制回填请求长超时重试

48 小时

这是当数据在相同站点上不可用并且这是重试以前的回填请求时,在发送回填请求时所使用的超时值。

下表列出了在公用文件夹复制中所使用的其他某些默认值。

默认复制值

描述 注释

复制文件夹数限制

20

打包到层次结构复制邮件中的最大文件夹数。

复制已删除文件夹数限制

500

打包到层次结构复制邮件中的最大文件夹删除数。

复制邮件数限制

100

打包到内容复制邮件中的最大邮件数。

复制邮件大小限制

300 KB

最大复制邮件大小。可以使用 Exchange 系统管理器调整该值。如果需要,单个复制邮件可能超过此限制。该值代表打包功能应当停止打包的限制大小。如果文件夹中单个投递内容超过该限制,它将被完整地单独发送。

 
显示: