使用 Outlook 诊断日志记录解决 OAB 下载问题

 

适用于: Exchange Server 2007 SP1, Exchange Server 2007

上一次修改主题: 2007-09-05

本主题说明如何通过使用 Microsoft Office Outlook 客户端诊断日志记录并查看事件日志条目,解决与脱机通讯簿 (OAB) 下载有关的问题。除了讨论如何查看事件日志条目之外,本主题还提供与下列 OAB 下载问题有关的详细信息:

  • 脱机通讯簿序列

  • 服务器端地址列表名称

  • OAB GUID

只要 Outlook 执行完整 OAB 下载,Microsoft Office 2003 Service Pack 1 (SP1) 和 Outlook 2003 Service Pack 2 (SP2) 始终会在应用程序事件日志中生成一个事件。如果此下载由于任何原因而失败,Outlook 将记录事件 ID 27,事件类型为“错误”,并提供一段说明,包含与失败有关的信息。在这种情况下,记录的事件还包含结果错误代码,可以使用该错误代码帮助隔离问题。

通过查看事件日志条目(包括检查错误代码和 OAB 序号)可以解决 OAB 下载问题。然后,可以将 Exchange 服务器上的地址列表的名称与 Outlook 客户端进行比较。

查看事件日志条目

以下示例是用户在缓存 Exchange 模式下初次启动 Outlook 2003 时,记录的事件日志条目的十六进制数据部分。

0000: 01 00 00 00 00 00 00 00

0008: 00 00 00 00 75 00 00 00

0010: 75 00 00 00 00 00 00 00

0018: 00 00 00 00 00 00 00 00

0020: e9 fd 00 00 02 a3 48 9b

0028: ba 12 c4 01 00 00 00 00

0030: 00 00 00 00 00 00 00 00

0038: 00 00 00 00 00 00 00 00

0040: 00 00 00 00 00 00 00 00

0048: 00 00 00 00 00 00 00 00

0050: 00 00 00 00 00 00 00 00

0058: 00 00 00 00 00 00 00 00

0060: 00 00 00 00 00 00 00 00

0068: 00 00 00 00 00 00 00 00

0070: 00 00 00 00 00 00 00 00

0078: 00 00 00 00 00 00 00 00

0080: 00 00 00 00 00 00 00 00

0088: 00 00 00 00 00 00 00 00

0090: 5c 00 47 00 6c 00 6f 00

0098: 62 00 61 00 6c 00 20 00

00a0: 41 00 64 00 64 00 72 00

00a8: 65 00 73 00 73 00 20 00

00b0: 4c 00 69 00 73 00 74 00

00b8: 00 00 00 00 65 38 31 30

00c0: 35 35 61 38 2d 62 64 38

00c8: 38 2d 34 33 34 62 2d 39

00d0: 37 31 37 2d 64 34 33 37

00d8: 61 62 34 35 31 35 36 39

00e0: 00 65 38 31 30 35 35 61

00e8: 38 2d 62 64 38 38 2d 34

00f0: 33 34 62 2d 39 37 31 37

00f8: 2d 64 34 33 37 61 62 34

0100: 35 31 35 36 39 00

在所有 OAB 事件日志条目中,数据的第一个字节包含十六进制格式的错误代码。该错误代码指示完整下载的原因。在上一个示例中,数据的第一个字节包含在:

0000: 01 00 00 00 00 00 00 00

在此示例中,第一个字节是 01。

下表提供了对错误代码的说明。

脱机通讯簿错误代码

错误代码 说明

1

计算机上没有任何 OAB 文件,或无法打开 OAB 文件。

2

您手动强制完整下载。

3

在客户端上无法获取该 OAB 的名称。新建配置文件时会出现这种情况。

4

在客户端上无法获取该 OAB 的 GUID。

5

服务器中没有该 OAB 的名称。未期待完整下载会启动或成功完成,但是仍进行了记录。

6

服务器中没有该 OAB 的 GUID。未期待完整下载会启动或成功完成,但是仍进行了记录。

7

服务器的 OAB 名称与客户端的 OAB 名称不同。

8

服务器的 GUID 与客户端的 GUID 不同。如果服务器必须重新生成同名的新 OAB 并丢弃旧的 OAB 文件,可能会发生这种情况。如果 Outlook 客户端在不同的 Active Directory 目录服务林之间移动,也可能会发生这种情况。

9

客户端的序列号大于服务器的序号。

0a (10)

您需要该 OAB 中的详细信息,但是客户端上没有对应的 OAB 文件。如果您手动强制下载该 OAB,并且清除了“下载上次发送/接收以来的更改”复选框,可能会发生这种情况。

0b (11)

服务器中至少缺少一个增量 OAB 文件。

0c (12)

要下载的增量文件的总和可能未超过完整 OAB 文件的八分之一。

0d (13)

您将“允许 SRS 完整 OAB 下载”注册表项设置为 1,并且“发送/接收”设置已设置为始终执行完整下载。

0e (14)

系统上未安装该 OAB 的区域设置,并且您进行过手动完整下载。通常,Outlook 每个月更新一次通讯簿,或在您手动下载时进行更新。Outlook 使用这些方法更新通讯簿,以避免每天执行完整下载。

0f (15)

由于某种原因,对 OAB 文件应用增量文件失败。

可以使用错误代码确定出现 0f 错误的原因。确定了根本原因之后,可以采取措施来解决问题。为此,请执行下列步骤:

  1. 在应用程序事件日志中,找到“说明”部分包含“正在启动 OAB 下载”的事件 ID 27。

  2. 在事件的“说明”部分,找到可能包含下列部分或全部断言的原因代码:

    • 0050: 7a 65 61 7a 61 74 61 7a zeazataz

    • 0058: 70 69 61 7a 7a 65 61 7a piazzeaz

    • 0060: 61 74 61 7a 70 69 61 7a atazpiaz

  3. 使用下列方式解释这些原因代码:

    • “zaez”是“签名不匹配”的断言。

    • “zata”是 MAPI_E_UNEXPECTED_ID 的断言。

    • “zaip”意味着“HrApplyOABDiffs 失败。必须进行完整下载”。

  4. 根据事件日志中的数据,您可能需要安装 Microsoft 知识库文章 895476 Outlook may receive a full download instead of an incremental download when Outlook downloads the offline address book in Exchange Server 2003中所述的 Exchange 修补程序。

下表提供了这些事件中可能出现的一些说明的示例。

Outlook 2003 事件日志说明示例

事件日志条目的说明字段 说明

“OAB ModDif 失败。(事件数据中的细节记录)”

“OAB(脱机通讯簿)文件无效。请替换为存根。(事件数据中最后的错误)”

指示 Outlook 无法执行增量 OAB 下载。发生此事件时,Outlook 将尝试进行完整 OAB 下载。

“正在启动 OAB 下载”

指示正在启动完整 OAB 下载,并指示下载原因。

“OAB 下载已成功”

指示完整 OAB 下载已成功完成。

除了结果错误代码之外,还可以从应用程序事件日志数据中收集以下信息:

  • OAB 序号

  • 用于填充脱机地址列表的服务器端地址列表名称

  • 完整 OAB 文件下载的 GUID

可以使用此信息帮助确定发生与差异 OAB 下载或完整 OAB 下载有关的特定行为的原因。

脱机通讯簿序号

Outlook 和 Exchange Server 均使用 OAB 序号确定要下载到 Outlook 的 OAB 文件。根据客户端上发现的序号以及差异文件的累积大小,可能会进行差异下载或完整下载。可以通过检查所记录事件的数据部分来验证序号。

OAB 错误代码位于事件数据的第一行(偏移 0001)。客户端和服务器的 OAB 序号位于事件日志数据的第二行(偏移 0008)。以下是此类数据的示例:

  • 0000: 09 00 00 00 00 00 00 00 ........

  • 0008: 9b 00 00 00 9a 00 00 00 ........

在此示例中,通讯簿错误代码为 09,或缩写为 9。如本主题第一个表中所示,此错误代码指示客户端的序号大于服务器的序号。客户端序号包含在前四个字节(此示例中为 9b),服务器序号包含在第二个四字节(此示例中为 9a)。

服务器端地址列表名称

如果客户端的 OAB 和 Exchange 服务器的脱机地址列表的名称不匹配或丢失,则进行完整 OAB 下载。在这种情况下,生成的结果错误代码为 3、5 或 7。可以通过检查所记录事件的数据部分来验证 OAB(和脱机地址列表)的名称。

Exchange Server 用于填充服务器上的脱机地址列表的列表名称位于事件数据的第 19 行(偏移 0090)。Outlook 使用的列表名称从事件数据的第 24 行(偏移 00b8)开始。以下是此类数据的示例:

0090: 5c 00 47 00 6c 00 6f 00 \.G.l.o.

0098: 62 00 61 00 6c 00 20 00 b.a.l. .

00a0: 41 00 64 00 64 00 72 00 A.d.d.r.

00a8: 65 00 73 00 73 00 20 00 e.s.s. .

00b0: 4c 00 69 00 73 00 74 00 L.i.s.t.

00b8: 00 00 5c 00 47 00 6c 00 .\.G.l.

00c0: 6f 00 62 00 61 00 6c 00 o.b.a.l.

00c8: 20 00 41 00 64 00 64 00 .A.d.d.

00d0: 72 00 65 00 73 00 73 00 r.e.s.s.

00d8: 20 00 4c 00 69 00 73 00 .L.i.s.

00e0: 74 00 00 00 38 62 32 61 t...e810

在此示例中,默认全局地址列表 (GAL) 用于脱机地址列表。

脱机通讯簿 GUID

除了使用相匹配的地址列表名称之外,Exchange 和 Outlook 均使用相匹配的 GUID 来确保保持同步。如果 Outlook OAB GUID 与 Exchange 使用的 GUID 不匹配,将进行完整 OAB 下载。生成的 OAB 结果错误代码为 4、6 或 8。可以通过检查事件数据来验证 OAB GUID。

Exchange Server 使用的 GUID 从偏移 00b8 开始。Outlook 使用的 GUID 从偏移 00e0 开始。以下是此类数据的示例:

00b8: 00 00 00 00 65 38 31 30 ....e810

00c0: 35 35 61 38 2d 62 64 38 55a8-bd8

00c8: 38 2d 34 33 34 62 2d 39 8-434b-9

00d0: 37 31 37 2d 64 34 33 37 717-d437

00d8: 61 62 34 35 31 35 36 39 ab451569

00e0: 00 65 38 31 30 35 35 61 .e81055a

00e8: 38 2d 62 64 38 38 2d 34 8-bd88-4

00f0: 33 34 62 2d 39 37 31 37 34b-9717

00f8: 2d 64 34 33 37 61 62 34 -d437ab4

0100: 35 31 35 36 39 00 51569

如果 Outlook OAB 和 Exchange 计算机的 GUID 不匹配,则需要删除现有的 OAB 文件并执行完整 OAB 下载。

详细信息

有关 OAB 的详细信息,请参阅管理脱机通讯簿