卫星数据库作为 GeoSync 订阅服务器

此过程旨在应对下面这种情况:使用导入/导出功能从较大的主数据库导出部分或全部配置来创建个性化服务器数据库后,将其提供给少数用户远程使用。客户希望使用 GeoSync 自动同步主数据库和卫星数据库之间的用户子集,方法是让它们分别成为 GeoSync 发布服务器和订阅服务器。使用现有的合并复制脚本无法实现这一点,因为这些脚本会同步所有数据库。

配置的导入/导出会改变数据库 ID (GUID),GeoSync 功能需要依靠此 ID 才能匹配发布服务器和订阅服务器。修改订阅服务器中的所有 GUID 使其与发布服务器相匹配即可解决这个问题。为此,订阅服务器需要停机,在此期间,任何受影响的用户都无法登录,用户计算机上的任何脱机缓存也将失效,因为它们不能在下次连接时保存回修改过的数据库中。此外,如果发布服务器和订阅服务器上的任何 Windows 设置组 'OriginalName' 列不匹配,则无法执行同步。

GUID 映射由 PowerShell 脚本 (PrepareGeoSubscriber.ps1) 执行,该脚本需要使用 sqlcmd 实用程序和两个位于相同文件夹中的 SQL 脚本(CheckMapping.sql 和 MapUgs.sql)。

这些脚本位于此处::%systemdrive%\Program Files\AppSense\Environment Manager\Personalization Server\Support

限制

如果没有使用相同的软件版本创建发布服务器数据库和订阅服务器数据库,可能会出现以下问题:

  • 由于 Windows 10 和 Server 2016 的引入,部分 Windows 设置组 (WSG) 名称在不同数据库版本之间发生了变化。如果将组导出并导入到订阅服务器,并且订阅服务器有新旧两个名称,则无法同步 WSG,因为 DesktopSettings.[Group] 表格中的 OriginalName 列会有所差异。原始名称不能轻易更改,因为它需要扫描 ApplicationData 和 ApplicationDataArchives 表格。本主题中描述的映射流程不支持此操作。
  • 如果发布服务器数据库和订阅服务器数据库中存在要同步的相同用户,并且这些用户最初是使用个性化服务器 8.4 版之前的版本创建的,则无法进行同步。这是因为,在 8.4 版之前,用户标识(UserPK 列)是根据常规 GUID 算法随机分配的。从 8.4 版起,GUID 来源于用户的 SID,并且在各数据库中保持一致。此问题的解决方案是利用 dbo.[User].表格上的 SQL DELETE 从其中一个数据库物理删除受影响的用户。

先决条件

  • 运行脚本的用户可以通过 Windows 集成身份验证以系统管理员身份访问这两个数据库。
  • 脚本在当前路径中有 sqlcmd.exe 实用程序的计算机上运行。其中一个数据库服务器可能最方便,但用户可以从 Microsoft 下载合适的 MSI 将 sqlcmd.exe 安装在不同的计算机上。
  • 发布服务器数据库和订阅服务器数据库必须可以相互访问,而且必须是网络上的脚本。Sqlcmd 和 GeoSync 软件本身都会使用正常的 SQL Server 连接(通常在端口 1433 上)。

初始设置

该脚本一次应用于一个个性化组。个性化组(按名称识别)必须在开始前显示在发布服务器和订阅服务器上。假设 GeoSync 尚未设置好,则术语“发布服务器”和“订阅服务器”指的是其预期用途。

通常,脚本会假设个性化组从发布服务器导出,并使用导入/导出功能将其导入到订阅服务器中。但是,如果在订阅服务器上利用应用程序组和从发布服务器导入的 Windows 设置组来创建新个性化组,则可以通过从订阅服务器导出该组,然后将其导入回发布服务器的方式实现同步。

任一情况下,脚本都会假设要同步的个性化组最初存在于两个数据库中。

运行脚本

PowerShell 脚本和两个 SQL 脚本必须位于相同的目录中。使用 PowerShell 命令提示符,无需评估即可运行 PowerShell 脚本。它会提示两个数据库的详细信息和要同步的个性化组的名称。检查指定数据库是否存在,然后运行两个 SQL 脚本。这些脚本在订阅服务器上运行,但会通过创建链接的服务器条目与发布服务器联系,随后该条目会被删除。

这两个脚本执行以下操作:

  • CheckMapping.sql - 比较该组的所有详细信息,识别可能出现的问题。这些问题分为三类:
    • 警告 - 发布服务器上的个性化组包含订阅服务器上不存在的额外实体,如应用程序组。同步后,订阅服务器可能会因此收到额外的实体。
    • 错误 - 订阅服务器上的个性化组拥有发布服务器上不存在的额外实体。这可能会导致数据从订阅服务器上消失,应该对此类错误进行调查。
    • 致命 - 发布服务器和订阅服务器上的 Windows 设置组 'originalname' 字段不匹配,这通常是因为订阅服务器上已经存在相似数据。无法执行映射。
  • MapUGs.sql - 执行映射。如果发现“致命”问题,则无法运行此操作。运行之前,系统会首先提示用户进行必要更改并重新启动。

设置 GeoSync

同步个性化组后,可以在两个数据库之间启用 GeoSync,详情请见此处。设置后,必须在 Environment Manager 控制台的相应 GeoSync 选项卡上将同步的个性化组设置为已同步。如果此组在发布服务器上已有数据,则可能需要设置 GeoSync 条件,这样才能确保不会将发布服务器上的所有数据传输到订阅服务器中。

CheckMapping 操作

CheckMapping.sql 会检查发布服务器数据库和订阅服务器数据库中的以下内容:

检查内容

问题类别

两个数据库中均不存在个性化组。

致命

对于两个个性化组,“设置”选项卡上的复选框项有所不同。

警告

两个数据库中均存在受影响的用户,SID 相同,但 GUID 不同。

致命

两个数据库的“高级属性”设置 UpgradeFbrToHive 不同。

致命

应用程序组分配情况不同。

发布服务器中的应用程序组更多:警告

订阅服务器中的应用程序组更多:错误

分配到应用程序组的应用程序不同。

发布服务器更多:警告

订阅服务器更多:错误

应用程序定义不同 - EXE、OS 版本、文件版本。

发布服务器更多:警告

订阅服务器更多:错误

分配到应用程序组的注册表、文件和文件夹路径不同。

发布服务器更多:警告

订阅服务器更多:错误

应用程序组管理的文件夹不同。

发布服务器更多:警告

订阅服务器更多:错误

两个数据库的 Windows 设置组分配情况不同。

发布服务器更多:警告

订阅服务器更多:错误

Windows 设置组的组件、设置、自定义设置、条件不同。

发布服务器更多:警告

订阅服务器更多:错误

要同步的 WSG 的 OriginalName 列不同。

如果订阅服务器上的现有 WSG 具有匹配的原始名称,则可能会在导入期间出现此问题。由于“原始名称”在数据和存档中使用,并且无法由 MapUGs.sql 脚本修复,因此不太容易解决此问题。

致命