最近我帮用户诊断过一些脱机地址簿(OAB)的问题,其中一个最常见的问题就是Parent Distinguished Names(PDN)更改。我想花几分钟的时间来和大家分享我的关于排错OAB及PDN更改的问题的经验。
什么是PDN表格?
PDN表格是被父辨别名称的脱机地址簿生成器(OABGen)维护的一个字符表格。当脱机地址簿生成过程在生成一个地址列表的时候,它将把属于对象的ExchangeLegacyDN和x500代理地址分为两个不同的部分:
PDN——父辨别名称:/o=ORG/ou=SITE/cn=CONTAINER/
RDN——相对辨别名称:/CN=test
PDN表格被用来作为Exchange客户端(像Microsoft Outlook)的参考,当它组成邮件收件人的MAPI ID条目时。因为OAB中大多数收件人都共享PDN的一小部分设置,用一个表格来节省空间避免为每个收件人单独存储它们。在Exchange 2003 SP2之前,OAB生成过程在处理PDNs的增加和删除时有问题。当检测到PDN表格发生更改,它将引起OAB生成过程跳过一天的差异文件生成。OAB Version 2和OAB
Version 3a的客户端受到该问题的影响,结果导致客户端下载完整的OAB。随着Exchange 2003 SP2的出现,这对OAB Version 4客户端(Outlook 2003 SP2和以后的版本)来说已经不在是一个问题了。
注意:当您使用Offline Address Book version 4的时候,您必须在服务器上使用Exchange 2003 SP2(或以后的版本)和在客户端上使用Outlook 2003 SP2(或以后版本)。
问题的症状
在用户的Exchange服务器上的应用程序日志文件中,出现了下面的错误日志:
事件类型:Warning
事件来源:MSExchangeSA
事件类别:OAL Generator
事件ID:9340
日期:5/31/2008
时间:4:09:15 AM
计算机:SERVERNAME(考虑到用户的安全,我将实际的计算机名做了修改)
描述:
为脱机地址列表\全局地址列表"生成差异更新文件的过程中,发现了新的父级旧版Exchange DN容器值“/o=ORG/ou=SITE/cn=Recipients/cn=Recipients”。这将强制使用此脱机地址列表的客户端完全下载该脱机地址列表。
事件类型:Warning
事件来源:MSExchangeSA
事件类别:OAL Generator
事件ID:9360
日期:5/31/2008
时间:4:09:15 AM
计算机:SERVERNAME
描述:
OALGen在为地址列表“\全局地址列表”的版本2和版本3差异下载生成changes.oab 文件时遇到错误。脱机地址列表未更新,因此客户端无法下载当前更改集。请检查日志所记录的其他事件查找引起此错误的原因。
如果问题的原因是故意导致的或无法解决的,则可以通过在此服务器上创建DWORD注册表项 “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeSA\Parameters\OAL post full if diff fails”并将其设置为 1,来强制OALGen投递完整的脱机地址列表。当OALGen接下来生成脱机地址列表时,客户端将执行完整的OAB下载。然后,应该删除此注册表项以防 止进一步的完全下载。
为了隔离该问题,我让用户在Exchange服务器上运行Exchange最佳实践分析工具(ExBPA),然后将生成的.xml文件发给我,我仔细分析了XML文件 ,没有发现和OAB相关的错误。这时问题的分析进入僵局。
我又仔细看了9340和9360两个错误日志,我觉得问题和“新的父级旧版Exchange DN容器值”的更改有关,但是如何检查这个容器值呢。OABinteg.exe该工具可以实现这个。
由于我把该工具发送给用户,并拷贝Outlook客户端上的C盘的根目录中,然后进入命令行模式,运行下面的命令:
OABInteg /s:ExchSrvrName /t:proxytest /v:2 /l
在运行该命令时,必须确保您使用的Outlook配置文件处于在线模式,如果处于缓存模式的话,运行该命令会出现下面这些错误:
You are using a cached profile for your query. Please use an Online profile.
该命令运行完成后,会在C盘的根目录下生成OABinteg.txt文件,通过分析该文件,我发现下面这些信息:
Processing Address Book Entry #7 of 50.
Display Name = Object is a Distribution list object
LegacyExchangeDN starts with ’/o=’ or ’/O=’. Value = /o=org/ou=site/cn=Recipients/cn=Recipients/cn=user@abc.com
ERROR: LegacyExchangeDN has the ’@’ character present. This is a PDN issue and this can cause full downloads.
让用户在域控制器上使用adsiedit.msc工具来查看user@abc.com 的LegacyExchangeDN属性。该工具包含在Windows support tool中。正常的用户的LegacyExchangeDN属性 如图1所示,通过比较发现多了一个域名,修改过来后,然后执行下面的操作:
1.打开活动目录站点和服务工具,展开站点,展开服务器,展开NTDS Settings,右键选中活动目录连接,选择立即复制。
2.等待1小时左右,以便完成复制。
注意:这是一个推和拉的过程,您应该在所有的域控制器上进行双向的复制。
为了验证该错误已经彻底解决,我让用户执行下面的操作:
1. 打开Exchange系统管理器,定位到Exchange服务器,右键选中它,选择属性,然后点击诊断日志,选中MSExchangeSA,选中OAL Generator,将下面的日志级别调整到最大,如图2所示。
2. 定位到脱机地址簿,右键选中缺省的脱机地址簿,选择重建,
3. 然后观察应用程序事件日志,看是否出现Event ID为9340和9360的错误日志。
4. 用户反馈已经没有这样的日志了,问题到此完全解决。