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.
—
da hat sich wohl noch ein kleiner Tippfehler eingeschlichen…
Set-AnalysticsDBConnection –> Set-AnalyticsDBConnection, dasselbe bei Get
Hallo Herr Schmitt. Ja, Schreibfehler und dann schön mit Copy & Paste mitgezogen. Hab’s korrigiert. Danke für den Hinweis. Gruß. Andreas Schreiner
Hi, danke für den Post. Ich finde da immer noch einen Fehler: >Set-Acct-DBConnection
Hier ist ein „-“ zu viel. Richtig wäre Set-AcctDBConnection
Das gilt auch für Test-Acct-DBConnection -> Test-AcctDBConnection
Hallo Herr Glöckle. Danke für den Hinweis, ist korrigiert. Gruß. Andreas Schreiner