BLOG zzy.my

合抱之木, 生于毫末; 九层之台, 起于累土; 千里之行, 始于足下。

Lync 2013 中文版 部署持久聊天服务器 (Persistent Chat Server) 遇到的问题

部署持久聊天服务器,其实相对是比较简单的。但就是出了问题很麻烦
在Lync 2010 时代,它叫做组聊服务,是一个类似第三方应用服务。

如果部署过Lync2010的组聊服务,我们都知道,它的数据库必须安装在英文的SQL Server上。
进化到 Lync 2013,本以为这个限制消失了,
没想到在部署持久聊天服务器时还是遇到了这样的问题。

 

本篇文章主要说明我遇到的两个问题:

问题 1

无法对数据库“cpsdyn” 执行该操作,
某些操作不允许对正在参与数据库镜像会话或可用性组的数据库执行

原因:
表“cpsdyn”已经建立了镜像,所以操作会失败。

解决方案
在主数据库服务器对 表"cpsdyn" 取消镜像,并且删除镜像数据库上的 表"cpsdyn"
(镜像数据库上的 表"cpsdyn" 此时显示正在还原)。以后可以重建镜像。

 

重建镜像
Install-CsMirrorDatabase -ConfiguredDatabases -FileShare "\\SQL3\MirrorShare" -SqlServerFqdn sql1.lync.com

 

问题 2 

中文系统、中文SQL Server,部署中文版的Lync 2013,发布拓扑时遇到错误
数据库建立失败

 

查看 Log 日志,看到如下错误:

--------------

正在检查数据库 mgc 的状态。
正在检查数据库 mgc 的状态。
数据库 mgc 的状态为已分离。
正在从数据路径 \\sql1.lync.com\E$\CsData\PersistentChatStore\(default)\DbPath、
日志路径 \\sql1.lync.com\E$\CsData\PersistentChatStore\(default)\LogPath 附加数据库 mgc。
由于缺少文件“\\sql1.lync.com\E$\CsData\PersistentChatStore\(default)\DbPath\mgc.mdf”,
操作失败
附加数据库失败,因为找不到其中一个文件。将创建数据库。
数据库 mgc 的状态为 DbState_DoesNotExist。
正在从头开始创建数据库 mgc。数据文件路径 E:\CsData\PersistentChatStore\(default)\DbPath,
日志文件路径 E:\CsData\PersistentChatStore\(default)\LogPath。
清理正在安装的数据库 mgc。
正在将数据库 mgc 设置为受限模式。
数据库 mgc 已设置为模式 Restricted。
正在设置数据库选项。
正在从 dbcommon.sql 创建对象。
正在创建数据库对象。
正在执行 MgcSchema.sql...
正在执行 MgcSprocs.sql...
执行批处理错误。详细信息:
创建过程 sp_dropmessage 时出错:
SQL 错误代码 = 15179,错误消息 = 消息号 50100 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
SQL 错误代码 = 15179,错误消息 = 消息号 50200 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
SQL 错误代码 = 15179,错误消息 = 消息号 50201 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
SQL 错误代码 = 15179,错误消息 = 消息号 50202 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
SQL 错误代码 = 15179,错误消息 = 消息号 50291 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
SQL 错误代码 = 15179,错误消息 = 消息号 50300 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
SQL 错误代码 = 15179,错误消息 = 消息号 50301 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
SQL 错误代码 = 15179,错误消息 = 消息号 50302 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
SQL 错误代码 = 15179,错误消息 = 消息号 50303 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
SQL 错误代码 = 15179,错误消息 = 消息号 50320 或指定的语言版本不存在。,行号 = 54
SQL 错误代码 = 15043,错误消息 = 必须指定 'REPLACE' 以覆盖现有的消息。,行号 = 133
... 

--------------

 

原因:
建立数据的脚本缺少语言支持

 

解决方案:

注意,可以不需要在拓扑中删除已发布的“持久聊天池”。

如果你部署持久聊天服务启用了数据库镜像,先对 表"Mgc" 取消镜像,方法如同 表"cpsdyn"

然后在前端以管理员身份运行"Lync Server Powershell",执行:

Uninstall-CsDatabase -DatabaseType PersistentChat -SqlServerFqdn sql1.lync.com

 

或者:

登录主数据库服务器,打开SQL Server management Studio,连接到服务器,删除 表"Mgc"

(我们可以发现 表"mgc" 后面有显示"受限制用户")

 

在删除了主数据库后,我们还要删除镜像数据库服务器上的 表"mgc"

使用SQL Server management Studio,连接到镜像数据库服务器,删除 表"Mgc"

(镜像数据库服务器表"mgc" 的状态应该是“正在还原”)

 

 

刚说了,这是针对启用数据库镜像的操作。如果部署的持久聊天服务没有启用数据库镜像,
那么直接执行命令
Uninstall-CsDatabase -DatabaseType PersistentChat -SqlServerFqdn sql1.lync.com

或者 使用SQL Server management Studio,连接到数据库服务器,删除 表"Mgc"

 

准备工作做完,下面解决中文版安装失败的问题。

在前端(你执行拓扑发布的这台服务器上),打开如下路径

C:\Program Files\Common Files\Microsoft Lync Server 2013\DBSetup\

找到文件:MgcSprocs.sql,修改前先备份

以管理员身份用记事本打开它,对 sp_dropmessage 做修改

例:
修改前:if (@x=1) exec sp_dropmessage 50100
修改后:if (@x=1) exec sp_dropmessage 50100 ,us_english

 

对 sp_addmessage 修改
例:
修改前:@msgtext=N'parameter cannot be null: <%s>'
修改后:@msgtext=N'parameter cannot be null: <%s>', @lang='us_english'

 

附件是我修改好的 MgcSprocs.zip (30.00 kb),可以直接替换使用。

 

然后开始重建持久聊天服务数据库。
在当前服务器已管理员身份运行"Lync Server Powershell",执行:
Install-CsDatabase -ConfiguredDatabases -SqlServerFqdn sql1.lync.com


这条命令会根据已发布的拓扑建立未安装的数据库表,因为拓扑中已经发布了持久聊天服务,
而数据库中没有相应的数据表,所以系统会自动建立表,其它已存在的数据库表不会受到影响

可以看到 表"mgc" 已被成功建立 

 

至此我们可以在发布一下拓扑 执行 Enable-CsTopology

这时在登录SQL Server,打开SQL Server management Studio,连接服务器,查看数据库,

会发现,所有表都已经完成建立好镜像了。

 

可以通过以下命令查看

Get-CsDatabaseMirrorState -PoolFqdn poolchat.lync.com (前端池/持久聊天池的FQDN)

 

Loading