部署持久聊天服务器,其实相对是比较简单的。但就是出了问题很麻烦
在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)