【问题症状】
当天创建了大量AD用户并创建了对应的Lync账号,但是第二天无论是旧用户或者新建的用户,其Lync客户端无法模糊搜索到部分用户,但通过Lync账号地址可以搜索到,或删除本地地址簿文件后可以模糊搜索到。
【分析过程】
服务器地址簿生成原理:
1 活动目录 → 2 rtcab.dbo.AbUserEntry → 3 rtcab.dbo.AbAttributeValue → 4 地址薄Web查询
↓
5 服务器端地址薄文件(.lsabs .dabs)→ 6 客户端地址薄文件(GalContacts.db)
1 活动目录中对用户的相关信息进行了修改。
2 Lync前端服务中的User Replicator组件会每分钟对AD进行检查,然后将修改更新的属性写入到后台数据库中的rtcab数据库中的AbUserEntry表中。该表中的数据信息是二进制的信息无法直接阅读。
3 Lync将AbUserEntry表中的二进制数据解码并转存到rtcab数据库中的其它表中,具体的数据信息主要存储在AbAttributeValue中。
4 当您的地址簿策略启用了允许Web查询的方式,客户端在查询地址薄的时候会使用Web查询的方式,前端服务器会对Web查询会返回AbAttributeValue中的数据信息。
5 除了第三步之外,Lync还会将AbUserEntry中的二进制数据解码然后生成服务器端的地址薄文件,这些地址簿文件以lsabs或者dabs作为扩展名,存储在Lync的共享文件夹中。
6 客户端会去对服务器端的地址簿文件进行下载或者更新,然后生成本地的地址簿文件GalContcts.db。
客户端地址簿下载过程:
- 客户端第一次登录连接URL下载时,下载当前的Full data文件;
- 在后续的登录过程中,客户端将尝试下载增量文件。Lync会根据上次同步后的时间来决定下载哪个Delta增量文件以将本地地址簿文件更新为最新,举例:如果Lync自周五下午至周一上午脱机,周一上午登录时,客户端将下载包含这3天变化的Delta增量文件并同步到本地地址簿文件中;但如果客户端已经超出30天没有登录,客户端将下载最新的Full地址簿文件。
分析并解决本次问题:
- 可以通过全名称搜索到用户,推断Web查询地址簿是全新的,即Lync与AD的同步没有问题;
- 客户端删除离线地址簿文件后,下载Full地址簿文件可以正常搜索到用户,推断服务器的全地址簿文件是全新的,无异常;
- 分析客户端地址簿文件,可以看到地址簿文件更新时间为创建账号当天,推断客户端在下载Delta文件时失败导致更新失败;
- 查看服务器共享目录下的文件,可以看到该目录下没有Dealta文件,只有Full文件,故客户端找不到该文件,不能进行同步更新;
- 确认为Lync服务器端地址簿配置问题,当Delta文件大于Full文件的20%时,不生成Delta文件,故将其整为100%。
Before:
After:
参数解释:MaxDeltaFileSizePercentage
When changes are made to Active Directory (such as a new user being enabled for Skype for Business Server), the Address Book server typically records these changes in a "delta file," a file consisting only of the updated information; Skype for Business Server can then download the delta files rather than a complete Address Book file. The MaxDeltaFileSizePercentage property determines how large the delta files can get before they are incorporated into the complete Address Book file. By default, delta files can be as large as 20 percent of the complete Address Book file before a new Address Book file is generated. At that point, clients will download the complete file rather than a delta file.
6. 同步配置,并等待同步完成后,强制更新Address book,查看Delta文件已正常生成。
Invoke-CsManagementStoreReplication
Get-CsManagementStoreReplicationStatus
Update-CsUserDatabase
Update-CsAddressBook
【问题扩展】
当天创建了账号,之后Lync服务器在第二天凌晨进行脱机地址簿的更新,但是新建用户在第二天第一次登录Lync时应该下载的是全地址簿文件,为什么仍不能搜索到部分用户?
- 到LyncShare 共享目录下,找到全量通讯簿文件,然后复制到某一Lync前端服务器的本地硬盘路径。
- 然后以管理员身份运行命令行提示符,输入D:\Program Files\Skype for Business 2015\Server\Core\ABserver.exe –dumpfile D:\temp\通讯簿文件名称,然后在相同目录下会产生一个.txt 文件。
- 按照以上方法得到的脱机地址簿文件中并没有某些新建用户的信息,说明这些账号属性在修改后的第二天凌晨未同步到AD中,等待同步后,在服务器再次更新地址簿文件后,问题解决。