XenApp/XenDesktop 7.x Datenbank Migration

Eine häufig auftretende Arbeit ist der Umzug der XenApp/XenDesktop Datenbank auf einen anderen/neuen SQL Server, z.B. wenn man sein Deployment mit der mit ausgelieferten SQL Express begonnen hat und nachträglich auf einen normalen SQL Server wechseln möchte.

Dies ist recht einfach zu bewerkstelligen.

XenApp/XenDesktop

Hierzu beendet man alle Management Konsolen und öffnet eine Admin-PowerShell auf den Delivery Controllern. Nacheinander löscht man auf allen Delivery Controller die bestehenden Datenbankverbindungen.

Add-PSSnapin Citrix*
Set-LogSite -State Disabled
Set-MonitorConfiguration -DataCollectionEnabled $false
Set-LogDBConnection -DataStore Logging -DBConnection $null
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null
Set-MonitorDBConnection -DBConnection $null
Set-AcctDBConnection -DBConnection $null
Set-AnalyticsDBConnection -DBConnection $null         # ab 7.6
Set-AppLibDBConnection -DBConnection $null            # ab 7.8
Set-ProvDBConnection -DBConnection $null
Set-BrokerDBConnection -DBConnection $null
Set-EnvTestDBConnection -DBConnection $null
Set-SfDBConnection -DBConnection $null
Set-HypDBConnection -DBConnection $null
Set-OrchDBConnection -DBConnection $null              # ab 7.11
Set-TrustDBConnection -DBConnection $null             # ab 7.11
Set-ConfigDBConnection -DBConnection $null -force
Set-LogDBConnection -DBConnection $null -force
Set-AdminDBConnection -DBConnection $null -force
SQL Server

Auf dem alten SQL Server müssen die DBs nun gesichert und auf dem neuen DB-Server wiederhergestellt werden. Wie das funktioniert, sollte man wissen oder eben diesen Job an einen DB-Admin „outsourcen“.

Für jeden Computer-Account der Delivery Controller ist ein Login mit entsprechenden DB-Berechtigungen anzulegen:

SQL> create login <Domain>\<DeliveryController-Computername>$ from windows
SQL> ALTER ROLE 'ADIdentitySchema_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'Analytics_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'     # ab 7.8
SQL> ALTER ROLE 'chr_Broker' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'     # ab 7.8
SQL> ALTER ROLE 'chr_Controller' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'ConfigLoggingSchema_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'ConfigLoggingSiteSchema_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'ConfigurationSchema_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'DAS_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'DesktopUpdateManagerSchema_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'EnvTestServiceSchema_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'Monitor_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'MonitorData_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'
SQL> ALTER ROLE 'OrchestrationSchema_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'     # ab 7.11
SQL> ALTER ROLE 'StorefrontSchema_ROLE' ADD MEMBER '<Domain>\<DeliveryController-Computername>$'     # ab 7.8
SQL> ALTER ROLE 'TrustSchema_ROLE' ADD MEMBER <Domain>\<DeliveryController-Computername>$'     # ab 7.11

Nach dem Umzug der Datenbank kann von einem beliebigen Delivery Controller aus getestet werden, ob die neu einzurichtende Datenbankverbindung korrekt funktioniert.

Add-PSSnapin Citrix*
$SQLServer = "<SQL-Servername>" {optional: $SQLServer = "<SQL-Servername>\<SQL-Instanzname>"}
$SiteDBName = "<Site-DB-Name>"
$DBConnectSite = "Server=$SQLServer;Initial Catalog=$SiteDBName;Integrated Security=True"
Test-AdminDBConnection -DBConnection $DBConnectSite
Test-AcctDBConnection -DBConnection $DBConnectSite
Test-AnalyticsDBConnection -DBConnection $DBConnectSite      # ab 7.6
Test-AppLibDBConnection -DBConnection $DBConnectSite         # ab 7.8
Test-BrokerDBConnection -DBConnection $DBConnectSite
Test-ConfigDBConnection -DBConnection $DBConnectSite
Test-EnvTestDBConnection -DBConnection $DBConnectSite
Test-HypDBConnection -DBConnection $DBConnectSite
Test-LogDBConnection -DBConnection $DBConnectSite
Test-MonitorDBConnection -DBConnection $DBConnectSite
Test-OrchDBConnection -DBConnection $DBConnectSite           # ab 7.11
Test-TrustDBConnection -DBConnection $DBConnectSite          # ab 7.11
Test-ProvDBConnection -DBConnection $DBConnectSite
Test-SfDBConnection -DBConnection $DBConnectSite
XenApp/XenDesktop

Nach erfolgtem Umzug der Datenbank muss analog zur vorherigen Löschung die Verbindung zur neuen Datenbank in einer Admin-PowerShell wieder hergestellt werden.

Add-PSSnapin Citrix*
$SQLServer = "<SQL-Servername>"   {optional: $SQLServer = "<SQL-Servername>\<SQL-Instanzname>"}
$SiteDBName = "<Site-DB-Name>"
$LogDBName = "<Logging-DB-Name>"
$MonDBName = "<Monitoring-DB-Name>"
$DBConnectSite = "Server=$SQLServer;Initial Catalog=$SiteDBName;Integrated Security=True"
$DBConnectLog = "Server=$SQLServer;Initial Catalog=$LogDBName;Integrated Security=True"
$DBConnectMon = "Server=$SQLServer;Initial Catalog=$MonDBName;Integrated Security=True"
Set-AdminDBConnection -DBConnection $DBConnectSite
Set-ConfigDBConnection -DBConnection $DBConnectSite
Set-AcctDBConnection -DBConnection $DBConnectSite
Set-AnalyticsDBConnection -DBConnection $DBConnectSite          # ab 7.6
Set-AppLibDBConnection -DBConnection $DBConnectSite             # ab 7.8
Set-ProvDBConnection -DBConnection $DBConnectSite
Set-BrokerDBConnection -DBConnection $DBConnectSite
Set-EnvTestDBConnection -DBConnection $DBConnectSite
Set-OrchDBConnection -DBConnection $DBConnectSite               # ab 7.11
Set-TrustDBConnection -DBConnection $DBConnectSite              # ab 7.11
Set-SfDBConnection -DBConnection $DBConnectSite
Set-HypDBConnection -DBConnection $DBConnectSite
Set-LogDBConnection -DBConnection $DBConnectSite
Set-LogDBConnection -DataStore Logging -DBConnection $DBConnectLog
Set-MonitorDBConnection -DBConnection $DBConnectSite
Set-MonitorDBConnection -DataStore Monitor -DBConnection $DBConnectMon
Set-MonitorConfiguration -DataCollectionEnabled $true
Set-LogSite -State Enabled

Im Anschluss werden jeweils alle Citrix Service neu gestartet:

Get-Service Citrix* | Stop-Service -Force
Get-Service Citrix* | Start-Service
Funktionstest

Nach Abschluss der Migration können die einzelnen Datenbank-Services geprüft werden.

Get-AcctServiceStatus
Get-AdminServiceStatus
Get-AnalyticsServiceStatus     # ab 7.6
Get-AppLibServiceStatus        # ab 7.8
Get-BrokerServiceStatus
Get-ConfigServiceStatus
Get-EnvTestServiceStatus
Get-HypServiceStatus
Get-LogServiceStatus
Get-MonitorServiceStatus
Get-OrchServiceStatus          # ab 7.11
Get-TrustServiceStatus         # ab 7.11
Get-ProvServiceStatus
Get-SfServiceStatus
Troubleshooting

Falls es beim Herstellen der neuen Datenbankverbindung zu Fehlern kommt mit folgender Meldung …
Citrix.Console.Models.Exceptions.DatabaseConnectionException Failed to set database connection.
…oder…
Citrix.Console.Models.Exceptions.ScriptException You are not authorized to perform this operation.
…liegt dies daran, dass die Trennung der alten Datenbankverbindung nicht überall durchgeführt wurde.

In diesem Fall muss dies manuell über die Registry korrigiert werden. Ein erneutes löschen über die PowerShell wird das Problem nicht beheben.

Hierzu navigiert man über den Registry Editor zum Pfad HKEY_LOCAL_MACHINE\Software\Citrix\XDservices\ und sucht in den Unterverzeichnissen nach dem Wert ConnectionString. Der Wert muss zwingend leer sein. Sollte einer der ConnectionString Werte noch über einen Inhalt verfügen, ist dieser händisch zu löschen. Danach die Dienste nochmal durchstarten wie oben beschrieben und die Herstellung der neuen Verbindung nochmals durchführen.

4 Antworten

  1. Kurt Schmitt sagt:

    da hat sich wohl noch ein kleiner Tippfehler eingeschlichen…

    Set-AnalysticsDBConnection –> Set-AnalyticsDBConnection, dasselbe bei Get

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.