衛星資料庫作為 GeoSync 訂閱者

此程序可解決如下情況: 已經透過 (使用匯入/匯出功能) 將部分或全部組態從較大的主要資料庫匯出以建立個人化伺服器資料庫,並且供數目較少的使用者在遠端使用。客戶希望使用 GeoSync 自動同步化主要資料庫與衛星資料庫之間的使用者子集,方法是讓他們分別成為 GeoSync 發行者以及訂閱者。無法使用現有的合併式複寫指令碼,因為它們同步所有資料庫。

組態的匯入/匯出會變更 GeoSync 功能依賴以符合發行者與訂閱者的資料庫 ID (GUID)。修改訂閱者中的所有 GUID 以便與發行者相符,即可解決這個問題。若要解決問題,訂閱者需要有停機時間 - 任何受影響的使用者皆無法登入,使用者電腦中的任何離線快取將會失效,因為在下次連線時,無法將它們存回修改的資料庫。同時,如果任何 Windows 設定群組 'OriginalName' 欄在發行者與訂閱者上不符合,則不能執行同步。

GUID 對應是由使用 sqlcmd 公用程式的 PowerShell 指令碼 (PrepareGeoSubscriber.ps1) 以及需要出現在相同資料夾的兩個 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 版之前,會根據平常的 GUID 演算法隨機分配使用者角色 (UserPK 欄)。從 8.4 版開始,GUID 來自使用者的 SID,並且在資料庫間維持一致。這個問題的解決辦法是使用 dbo.[User].table 的 SQL DELETE,從其中一個資料庫中實際刪除受影響的使用者。

先決條件

  • 執行指令碼的使用者透過 Windows 整合式驗證,將擁有兩個資料庫的 sysadmin 存取權限。
  • 指令碼會在目前路徑中有 sqlcmd.exe 公用程式的電腦上執行。相關的其中一個資料庫伺服器可能是最方便的,但是透過 Microsoft 下載適當的 MSI,即可將 sqlcmd.exe 安裝在不同的電腦中。
  • 發行者與訂閱者資料庫必須可以彼此存取,並且是網路上的指令碼。Sqlcmd 和 GeoSync 軟體本身是使用一般的 SQL 伺服器連線 (通常是連接埠 1433)。

初始設定

指令碼會套用至單一個人化群組一次。個人化群組 (依名稱識別) 在開始之前必須出現在發行者與訂閱者上。會假設尚未設定 GeoSync,而「發行者」和「訂閱者」這兩個名詞是指他們的預期用途。

通常會假設個人化群組是使用匯入/匯出功能從發行者匯出,並且匯入訂閱者。但如果是使用從發行者匯入的應用程式群組以及視窗設定群組在訂閱者上建立新的個人化群組,可以透過從訂閱者匯出群組然後重新匯入發行者的方式進行同步。

在任一情況下,指令碼會假設最初要同步的個人化群組存在於兩個資料庫中。

執行指令碼

PowerShell 指令碼和兩個 SQL 指令碼必須位於相同目錄。從 PowerShell 命令提示執行 PowerShell 指令碼 - 不需要提高權限。 它會提示輸入兩個資料庫的詳細資訊,以及要同步的個人化群組的名稱。在指定資料庫存在的情況下會進行檢查,接著會執行兩個 SQL 指令碼。這些指令碼會在訂閱者執行,但是會透過建立連結的伺服器項目 (之後將會刪除) 聯絡發行者。

兩個指令碼會執行以下動作:

  • CheckMapping.sql - 比較群組的所有詳細資訊以找出可能的問題。這些問題分為三類:
    • 警告 - 此為發行者上的個人化群組包含不存在於訂閱者上的額外實體 (例如應用程式群組) 的位置。在同步之後,訂閱者可能因此會收到其他實體。
    • 錯誤 - 訂閱者中的個人化群組有不存在於發行者中的額外實體。這些可能會導致訂閱者中的資料消失,應該對此進行調整。
    • 嚴重 - Windows 設定群組 'originalname' 欄位在發行者與訂閱者中不符,通常是由於類似資料已經存在於訂閱者中。無法執行對應。
  • MapUGs.sql - 執行對應。如果已經發現「嚴重」,則無法執行。使用者會在此執行之前先收到提示,因此其可以進行必要的更改並且重新啟動。

設定 GeoSync

在同步個人化群組之後,可以依照此處的描述在兩個資料庫之間啟用 GeoSync。在設定之後,必須在「環境管理員」控制台的 GeoSync 索引標籤中將同步的個人化群組設定為同步。如果此群組在發行者已有現存資料,可能需要設定 GeoSync 條件以確定不會將所有發行者的資料傳輸給訂閱者。

CheckMapping 動作

CheckMapping.sql 會在發行者和訂閱者資料庫檢查以下內容:

檢查

問題類別

個人化群組中不存在於兩個資料庫中。

嚴重

「設定」索引標籤中的核取方塊項目在個人化群組之間並不相同。

警告

受到影響的使用者存在於兩個資料庫中,其 SID 相同但是 GUID 不同。

嚴重

資料庫之間的進階屬性 UpgradeFbrToHive 的設定不同。

嚴重

應用程式群組指派不同。

發行者有較多應用程式群組: 警告

訂閱者有較多應用程式群組: 錯誤

指定給應用程式群組的應用程式不同。

發行者有較多: 警告

訂閱者有較多: 錯誤

應用程式定義不同 - EXE、OS 版本、檔案版本。

發行者有較多: 警告

訂閱者有較多: 錯誤

指定至應用程式群組的登錄、檔案和資料夾路徑不同。

發行者有較多: 警告

訂閱者有較多: 錯誤

應用程式群組託管資料夾不同。

發行者有較多: 警告

訂閱者有較多: 錯誤

資料庫之間的 Windows 設定群組指派不同。

發行者有較多: 警告

訂閱者有較多: 錯誤

Windows 設定群組元件、設定、自訂設定、條件不同。

發行者有較多: 警告

訂閱者有較多: 錯誤

要同步的 WSG 的 OriginalName 欄不同。

如果訂閱者中的現有 WSG 包括有相符的原始名稱,則在匯入期間會發生此情況。無法輕易解決此問題,因為資料中使用了「原始名稱」,而 MapUGs.sql 指令碼並未修正封存。

嚴重